= !MapGuide RFC 106 - OGC WFS 1.1.0 Support = This page contains an change request (RFC) for the !MapGuide Open Source project. More !MapGuide RFCs can be found on the [wiki:MapGuideRfcs RFCs] page. == Status == ||RFC Template Version||(1.0)|| ||Submission Date||07/22/2010|| ||Last Modified||Arthur Liu 07/22/2010|| ||Author||Arthur Liu|| ||RFC Status||draft|| ||Implementation Status||under development|| ||Proposed Milestone||2.3|| ||Assigned PSC guide(s)||Bruce Dechant|| ||'''Voting History'''||(vote date)|| ||no vote|| || == Overview == Enhance the WFS 1.1.0 implmentation of MapGuide according to OGC WFS 1.1.0 specification. The goal is to make sure MapGuide could pass the OGC certification for WFS 1.1.0 and 1.0.0 (http://cite.opengeospatial.org). == Motivation == OGC WFS 1.1.0 specification has been released for years, however, the offical supported WFS version for MapGuide is stay 1.0.0. It is necessary for MapGuide to enhance the implementation to support WFS 1.1.0. == Proposed Solution == '''1) Enhance the !GetFeatureType operation to support mutiple GML formats'''[[BR]] [[BR]] It's described in WFS 1.1.0 specification section 8.1 that the only mandatory output in response to a !DescribeFeatureType request is a GML3 application schema defined using XML Schema. Because GML2 application schema is kept for backward compatibility, it is necessary for MapGuide to enhance the !HttpWfsGetFeatureType to handle different GML formats. [[BR]][[BR]] A new !DescribeWfsFeature API should be added to handle the output GML format {{{ //////////////////////////////////////////////////////////////////////////////////////////////////////// /// \brief /// Retrieves schema informationabout a set of feature classes for a given feature source with specified format. /// /// \note1 /// /// /// \htmlinclude DotNetSyntaxTop.html /// virtual MgByteReader DescribeWfsFeatureType(MgResourceIdentifier featureSourceId, MgStringCollection featureClasses, string outputFormat); /// \htmlinclude SyntaxBottom.html /// \htmlinclude JavaSyntaxTop.html /// virtual MgByteReader DescribeWfsFeatureType(MgResourceIdentifier featureSourceId, MgStringCollection featureClasses, string outputFormat); /// \htmlinclude SyntaxBottom.html /// \htmlinclude PHPSyntaxTop.html /// virtual MgByteReader DescribeWfsFeatureType(MgResourceIdentifier featureSourceId, MgStringCollection featureClasse, string outputFormats); /// \htmlinclude SyntaxBottom.html /// /// \param featureSourceId (MgResourceIdentifier) /// The resource identifier defining the /// location of the feature source in /// the repository. /// \param featureClasses (MgStringCollection) /// A collection of strings identifying the feature classes for which to /// retrieve schema information. If this collection is null or empty, information /// is returned for all feature classes. /// \param outputFormat (String/string) /// A string identifying the output format of /// the retrieved schema information. /// /// \return /// Returns an MgByteReader containing the XML schema. /// virtual MgByteReader* DescribeWfsFeatureType(MgResourceIdentifier* featureSourceId, MgStringCollection* featureClasses, CREFSTRING outputFormat) = 0; }}} !HttpWfsGetFeatureType should be enhanced to obtain the output GML format and invoke the new API !DescribeWfsFeatureType with outputFormat parameter {{{ void MgHttpWfsDescribeFeatureType::Execute(MgHttpResponse& hResponse) { ...... // Determine required output format CPSZ pszOutputFormat = Wfs.RequestParameter(MgHttpResourceStrings::reqWfsOutputFormat.c_str()); STRING sOutputFormat = pszOutputFormat? pszOutputFormat : _(""); ...... Ptr response = pFeatureService->DescribeWfsFeatureType(&idResource,pFeatureClasses,sOutputFormat); ...... } }}} '''2) Enhance the !GetFeature operation to support mutiple GML formats'''[[BR]] [[BR]] In WFS 1.1.0 specification section 9.2: ''The optional output format attribute specifies the format of the response to a !GetFeature request. The default value is text/xml;subtype=gml/3.1.1 indicating that a vald GML3 document, that validate s against a valid GML3 application schema, must be generated. For backward compatibility, the value GML2 may be specified indicating that a valid GML2 document, that validates against a valid GML2 application schema, must be generated.'' So,it is necessary for MapGuide to enhance the !HttpWfsGetFeature to handle different GML formats. [[BR]][[BR]] A new !DescribeWfsFeature API should be added to handle the output GML format {{{ //////////////////////////////////////////////////////////////////////////////////////////////////////// /// \brief /// Retrieves feature information based on the supplied criteria with specified format. /// /// \note1 /// /// /// \htmlinclude DotNetSyntaxTop.html /// virtual MgByteReader GetWfsFeature(MgResourceIdentifier featureSourceId, string featureClass, MgStringCollection requiredProperties, string srs, string filter, int maxFeatures, string outputFormat); /// \htmlinclude SyntaxBottom.html /// \htmlinclude JavaSyntaxTop.html /// virtual MgByteReader GetWfsFeature(MgResourceIdentifier featureSourceId, String featureClass, MgStringCollection requiredProperties, String srs, String filter, int maxFeatures, string outputFormat); /// \htmlinclude SyntaxBottom.html /// \htmlinclude PHPSyntaxTop.html /// virtual MgByteReader GetWfsFeature(MgResourceIdentifier featureSourceId, string featureClass, MgStringCollection requiredProperties, string srs, string filter, int maxFeatures, string outputFormat); /// \htmlinclude SyntaxBottom.html /// /// \param featureSourceId (MgResourceIdentifier) /// The resource identifier defining the /// location of the feature source in /// the repository. /// \param featureClass (String/string) /// The feature class containing the features to retrieve. /// \param requiredProperties (MgStringCollection) /// The collection of properties to retrieve for each feature. If the /// collection is null or empty, all properties will be retrieved. /// \param srs (String/string) /// The spatial reference system in which to return feature geometries /// \param filter (String/string) /// An XML string containing the definition for an OGC filter /// \param maxFeatures (int) /// The maximum number of features to retrieve. If the value is less /// than or equal to zero, all features will be retrieved. /// \param outputFormat (String/string) /// A string identifying the output format of /// the retrieved feature information. /// /// \return /// Returns an MgByteReader containing the requested feature information. /// virtual MgByteReader* GetWfsFeature(MgResourceIdentifier* featureSourceId, CREFSTRING featureClass,MgStringCollection* requiredProperties, CREFSTRING srs, CREFSTRING filter, INT32 maxFeatures, CREFSTRING outputFormat) = 0; }}} !HttpWfsGetFeature should be enhanced to obtain the output GML format and invoke the new API !GetWfsFeature with outputFormat parameter {{{ void MgHttpWfsGetFeature::AcquireResponseData(MgOgcServer* ogcServer) { ...... STRING sOutputFormat = m_getFeatureParams->GetOutputFormat(); ...... Ptr resultReader = featureService->GetWfsFeature(featureSourceId, ((sSchemaHash.size()==0) ? sClass : sSchemaHash + _(":") + sClass), requiredProperties, m_getFeatureParams->GetSrs(), filter, numFeaturesToRetrieve, sOutputFormat); ...... } }}} [[BR]] '''3) Handle axis orientation for particular coordinate systems[[BR]]''' [[BR]] The same as WMS 1.3.0, WFS 1.1.0 also reversed the axis sequence for some EPSG code include EPSG:4326, which means for some EPSG SRS, the meaning of (x,y) is changed from (lon,lat) to (lat,lon) or even other orientations. == Implications == Besides OGC WFS 1.1.0, MapGuide also support WFS 1.0.0. This enhancement should not affect the functionality of previous version. == Test Plan == After the implementation of OGC WFS 1.1.0 enhancement, an official OGC certification(http://cite.opengeospatial.org) will test if MapGuide provides standard WFS service. == !Funding/Resources == Supplied by Autodesk. == Relevant Ticket ==