[mapguide-commits] r7541 - trunk/MgDev/Server/src/Services/Feature
svn_mapguide at osgeo.org
svn_mapguide at osgeo.org
Thu May 30 00:13:23 PDT 2013
Author: christinebao
Date: 2013-05-30 00:13:22 -0700 (Thu, 30 May 2013)
New Revision: 7541
Modified:
trunk/MgDev/Server/src/Services/Feature/ServerFeatureService.cpp
trunk/MgDev/Server/src/Services/Feature/ServerFeatureService.h
trunk/MgDev/Server/src/Services/Feature/TransformCache.cpp
Log:
#2258: Serve WFS in alternate CS: SRSNAME not respected in getfeature, alternate SRS not available
- Use MgGMLCsTransform to override FdoCoordinateSystemTransform, and do coordinate system transformation.
Modified: trunk/MgDev/Server/src/Services/Feature/ServerFeatureService.cpp
===================================================================
--- trunk/MgDev/Server/src/Services/Feature/ServerFeatureService.cpp 2013-05-30 01:55:22 UTC (rev 7540)
+++ trunk/MgDev/Server/src/Services/Feature/ServerFeatureService.cpp 2013-05-30 07:13:22 UTC (rev 7541)
@@ -1832,6 +1832,7 @@
//get a transform from feature space to mapping space
TransformCache* item = TransformCache::GetLayerToMapTransform(transformCache, lfeatureName, fs, mapCs, &fact, this);
Ptr<MgCoordinateSystemTransform> trans = item? item->GetMgTransform() : NULL;
+ FdoPtr<MgGMLCsTransform> transform = new MgGMLCsTransform(trans);
assert(fc != NULL);
if (fc == NULL)
@@ -1926,6 +1927,14 @@
flags->SetCollectionName(L"FeatureCollection");
flags->SetMemberName(L"featureMember");
flags->SetMemberUri(L"http://www.opengis.net/gml");
+ flags->SetCoordinateSystemTransform(transform);
+ int epsgCode = 0;
+ if (mapCs != NULL)
+ {
+ epsgCode = mapCs->GetEpsgCode();
+ }
+ STRING srsName = L"EPSG:" + to_wstring((_Longlong)epsgCode) ;
+ flags->SetSrsName(srsName.c_str());
// gml schema location and version
if(L"text/xml; subtype=gml/2.1.2" == outputFormat)
@@ -2013,6 +2022,7 @@
featWriter = NULL;
propWriter = NULL;
xmlWriter = NULL; //flush and close file
+ transform = NULL;
//return the file
Ptr<MgByteSource> src = new MgByteSource(fileName, true);
@@ -2307,3 +2317,42 @@
return success;
}
+
+MgGMLCsTransform::MgGMLCsTransform(MgCoordinateSystemTransform *transform)
+ : FdoCoordinateSystemTransform(),
+ mTransform(transform)
+{}
+
+FdoIDirectPosition* MgGMLCsTransform::CoordinateSystemTransform(FdoIDirectPosition* sourceGeometry)
+{
+ double x = sourceGeometry->GetX();
+ double y = sourceGeometry->GetY();
+ double z = 0;
+ double m = 0;
+ FdoInt32 dimension = sourceGeometry->GetDimensionality();
+ if (dimension & FdoDimensionality_Z)
+ {
+ z = sourceGeometry->GetZ();
+ }
+ if (dimension & FdoDimensionality_M)
+ {
+ m = sourceGeometry->GetM();
+ }
+ FdoPtr<FdoDirectPositionImpl> posImpl;
+ if (dimension & FdoDimensionality_M)
+ {
+ mTransform->TransformM(&x, &y, &z, &m);
+ posImpl = FdoDirectPositionImpl::Create(x, y, z, m);
+ }
+ else if (dimension & FdoDimensionality_Z)
+ {
+ mTransform->Transform(&x, &y, &z);
+ posImpl = FdoDirectPositionImpl::Create(x, y, z);
+ }
+ else
+ {
+ mTransform->Transform(&x, &y);
+ posImpl = FdoDirectPositionImpl::Create(x, y);
+ }
+ return FDO_SAFE_ADDREF(posImpl.p);
+}
Modified: trunk/MgDev/Server/src/Services/Feature/ServerFeatureService.h
===================================================================
--- trunk/MgDev/Server/src/Services/Feature/ServerFeatureService.h 2013-05-30 01:55:22 UTC (rev 7540)
+++ trunk/MgDev/Server/src/Services/Feature/ServerFeatureService.h 2013-05-30 07:13:22 UTC (rev 7541)
@@ -1057,4 +1057,15 @@
INT32 m_nDataCacheSize;
};
+//Used for WFS coordinate system transformation
+class MgGMLCsTransform : public FdoCoordinateSystemTransform
+{
+public:
+ MgGMLCsTransform(MgCoordinateSystemTransform *transform);
+ virtual FdoIDirectPosition* CoordinateSystemTransform(FdoIDirectPosition* sourceGeometry);
+
+private:
+ MgCoordinateSystemTransform *mTransform;
+};
+
#endif
Modified: trunk/MgDev/Server/src/Services/Feature/TransformCache.cpp
===================================================================
--- trunk/MgDev/Server/src/Services/Feature/TransformCache.cpp 2013-05-30 01:55:22 UTC (rev 7540)
+++ trunk/MgDev/Server/src/Services/Feature/TransformCache.cpp 2013-05-30 07:13:22 UTC (rev 7541)
@@ -167,7 +167,7 @@
cache[srcwkt] = item;
// Set the coordinate system transform
- Ptr<MgCoordinateSystemTransform> trans = csFactory->GetTransform(dstCs, srcCs);
+ Ptr<MgCoordinateSystemTransform> trans = csFactory->GetTransform(srcCs, dstCs);
trans->IgnoreDatumShiftWarning(true);
trans->IgnoreOutsideDomainWarning(true);
More information about the mapguide-commits
mailing list