[prev in list] [next in list] [prev in thread] [next in thread] 

List:       fdo-commits
Subject:    [fdo-commits] r7679 - in sandbox/adsk/4.2.Q: Fdo/Unmanaged/Inc/Fdo/Xml Fdo/Unmanaged/Src/Fdo/Xml
From:       svn_fdo () osgeo ! org
Date:       2018-06-13 2:14:53
Message-ID: 20180613021454.0DDEB3900F7 () trac ! osgeo ! org
[Download RAW message or body]

Author: christinebao
Date: 2018-06-12 19:14:53 -0700 (Tue, 12 Jun 2018)
New Revision: 7679

Modified:
   sandbox/adsk/4.2.Q/Fdo/Unmanaged/Inc/Fdo/Xml/FeatureFlags.h
   sandbox/adsk/4.2.Q/Fdo/Unmanaged/Src/Fdo/Xml/CoordinateGroup.cpp
   sandbox/adsk/4.2.Q/Fdo/Unmanaged/Src/Fdo/Xml/CoordinateGroup.h
   sandbox/adsk/4.2.Q/Fdo/Unmanaged/Src/Fdo/Xml/FeatureFlags.cpp
   sandbox/adsk/4.2.Q/Fdo/Unmanaged/Src/Fdo/Xml/GeometryHandler.cpp
   sandbox/adsk/4.2.Q/Fdo/Unmanaged/Src/Fdo/Xml/GeometryHandler.h
   sandbox/adsk/4.2.Q/Providers/WFS/Src/Provider/FdoWfsConnection.cpp
   sandbox/adsk/4.2.Q/Providers/WFS/Src/Provider/FdoWfsConnectionInfo.cpp
   sandbox/adsk/4.2.Q/Providers/WFS/Src/Provider/FdoWfsDelegate.cpp
   sandbox/adsk/4.2.Q/Providers/WFS/Src/Provider/FdoWfsDelegate.h
   sandbox/adsk/4.2.Q/Providers/WFS/Src/Provider/FdoWfsGlobals.h
Log:
Support invert-axis in WFS provider.

We have some cases that WFS server returns geometry format in (latitude, longitude). \
Customer wants the format can be changed to normal format (longitude, latitude). To \
support this, we add a 'invert-axis' functionality to WFS provider. 

A new property "InvertAxis" is added to connection property dictionary. If a user \
wants to invert axis, he needs to set the property when opening the connection. 

Two new APIs SetInvertAxis() and GetInvertAxis() are added to class \
FdoXmlFeatureFlags.   /// \brief
    /// Sets whether to invert axis when getting geometry.
    /// 
    /// \param invertAxis 
    ///
    FDO_API virtual void SetInvertAxis(FdoBoolean invertAxis);

    /// \brief
    /// Gets whether to invert axis when getting geometry.
    /// 
    /// \return
    /// Returns whether to invert axis when getting geometry
    /// 
    FDO_API virtual FdoBoolean GetInvertAxis() const;

WFS provider will call SetInvertAxis() when creating its XMl feature reader. Then the \
property is used when parsing coordinates. If the axis need to be inverted, we swap \
the x,y value of the geometry. The detail is in method \
FdoXmlCoordinateGroup::parseCoordinates(FdoString* value, FdoBoolean invertAxis).


Modified: sandbox/adsk/4.2.Q/Fdo/Unmanaged/Inc/Fdo/Xml/FeatureFlags.h
===================================================================
--- sandbox/adsk/4.2.Q/Fdo/Unmanaged/Inc/Fdo/Xml/FeatureFlags.h	2018-05-31 07:47:20 \
                UTC (rev 7678)
+++ sandbox/adsk/4.2.Q/Fdo/Unmanaged/Inc/Fdo/Xml/FeatureFlags.h	2018-06-13 02:14:53 \
UTC (rev 7679) @@ -397,6 +397,21 @@
     /// 
     FDO_API virtual FdoCoordinateSystemTransform* GetCoordinateSystemTransform();
 
+    /// \brief
+    /// Sets whether to invert axis when getting geometry.
+    /// 
+    /// \param invertAxis 
+    /// 
+    FDO_API virtual void SetInvertAxis(FdoBoolean invertAxis);
+
+    /// \brief
+    /// Gets whether to invert axis when getting geometry.
+    /// 
+    /// \return
+    /// Returns whether to invert axis when getting geometry
+    /// 
+    FDO_API virtual FdoBoolean GetInvertAxis() const;
+
 protected:
 	FdoXmlFeatureFlags();
     FdoXmlFeatureFlags(FdoString* url, ErrorLevel errorLevel, FdoBoolean nameAdjust, \
ConflictOption conflictOption); @@ -420,6 +435,7 @@
 	FdoStringP mGmlDescriptionRelatePropertyName;
     FdoStringP mSrsName;
     FdoCoordinateSystemTransform *mTransform;
+    FdoBoolean mInvertAxis;
 };
 
 /// \ingroup (typedefs)

Modified: sandbox/adsk/4.2.Q/Fdo/Unmanaged/Src/Fdo/Xml/CoordinateGroup.cpp
===================================================================
--- sandbox/adsk/4.2.Q/Fdo/Unmanaged/Src/Fdo/Xml/CoordinateGroup.cpp	2018-05-31 \
                07:47:20 UTC (rev 7678)
+++ sandbox/adsk/4.2.Q/Fdo/Unmanaged/Src/Fdo/Xml/CoordinateGroup.cpp	2018-06-13 \
02:14:53 UTC (rev 7679) @@ -34,9 +34,9 @@
 	return new FdoXmlCoordinateGroup();
 }
 
-void FdoXmlCoordinateGroup::AddCoordinate(FdoString* coordinate)
+void FdoXmlCoordinateGroup::AddCoordinate(FdoString* coordinate, FdoBoolean \
invertAxis)  {
-	parseCoordinates(coordinate);
+	parseCoordinates(coordinate, invertAxis);
 }
 
 void FdoXmlCoordinateGroup::AddCoordX(FdoString* x)
@@ -104,7 +104,7 @@
 /// Helper functions
 ///////////////////////////////////////////////////////////////
 #include <iostream>
-void FdoXmlCoordinateGroup::parseCoordinates(FdoString* value)
+void FdoXmlCoordinateGroup::parseCoordinates(FdoString* value, FdoBoolean \
invertAxis)  {
 	FdoStringP coordString = value;
 
@@ -157,6 +157,16 @@
 		startPos = endPos;
 	}
 
+    if (invertAxis)
+    {
+        int dim = m_dimensionality == FdoDimensionality_Z ? 3 : 2;
+        for (int i = 0; i < m_coordinates.size(); i += dim)
+        {
+            double oriX = m_coordinates[i];
+            m_coordinates[i] = m_coordinates[i + 1];
+            m_coordinates[i + 1] = oriX;
+        }
+    }
 }
 
 bool FdoXmlCoordinateGroup::isCoordinateChar(FdoCharacter c)

Modified: sandbox/adsk/4.2.Q/Fdo/Unmanaged/Src/Fdo/Xml/CoordinateGroup.h
===================================================================
--- sandbox/adsk/4.2.Q/Fdo/Unmanaged/Src/Fdo/Xml/CoordinateGroup.h	2018-05-31 \
                07:47:20 UTC (rev 7678)
+++ sandbox/adsk/4.2.Q/Fdo/Unmanaged/Src/Fdo/Xml/CoordinateGroup.h	2018-06-13 \
02:14:53 UTC (rev 7679) @@ -32,7 +32,7 @@
 public:
 	static FdoXmlCoordinateGroup* Create();
 
-	void AddCoordinate(FdoString* coordinate);
+	void AddCoordinate(FdoString* coordinate, FdoBoolean invertAxis = false);
 	void AddCoordX(FdoString* x);
 	void AddCoordY(FdoString* y);
 	void AddCoordZ(FdoString* z);
@@ -52,7 +52,7 @@
     }
 	
 private:
-	void parseCoordinates(FdoString* value);
+	void parseCoordinates(FdoString* value, FdoBoolean invertAxis = false);
 	bool isCoordinateChar(FdoCharacter c);
 
 	FdoDimensionality m_dimensionality;

Modified: sandbox/adsk/4.2.Q/Fdo/Unmanaged/Src/Fdo/Xml/FeatureFlags.cpp
===================================================================
--- sandbox/adsk/4.2.Q/Fdo/Unmanaged/Src/Fdo/Xml/FeatureFlags.cpp	2018-05-31 07:47:20 \
                UTC (rev 7678)
+++ sandbox/adsk/4.2.Q/Fdo/Unmanaged/Src/Fdo/Xml/FeatureFlags.cpp	2018-06-13 02:14:53 \
UTC (rev 7679) @@ -32,7 +32,8 @@
       mCollectionName(FdoXml::mFeatureCollectionName),
       mMemberUri(FdoXml::mGmlUri),
       mMemberName(FdoXml::mFeatureMemberName),
-      mTransform(NULL)
+      mTransform(NULL),
+      mInvertAxis(false)
 {
     mNamespaces = FdoStringCollection::Create();
     mSchemaLocations = FdoStringCollection::Create();
@@ -47,7 +48,8 @@
       mCollectionName(FdoXml::mFeatureCollectionName),
       mMemberUri(FdoXml::mGmlUri),
       mMemberName(FdoXml::mFeatureMemberName),
-      mTransform(NULL)
+      mTransform(NULL),
+      mInvertAxis(false)
 {
     mNamespaces = FdoStringCollection::Create();
     mSchemaLocations = FdoStringCollection::Create();
@@ -240,3 +242,13 @@
     return FDO_SAFE_ADDREF(sourceGeometry);
 }
 
+void FdoXmlFeatureFlags::SetInvertAxis(FdoBoolean invertAxis)
+{
+    mInvertAxis = invertAxis;
+}
+
+FdoBoolean FdoXmlFeatureFlags::GetInvertAxis() const
+{
+    return mInvertAxis;
+}
+

Modified: sandbox/adsk/4.2.Q/Fdo/Unmanaged/Src/Fdo/Xml/GeometryHandler.cpp
===================================================================
--- sandbox/adsk/4.2.Q/Fdo/Unmanaged/Src/Fdo/Xml/GeometryHandler.cpp	2018-05-31 \
                07:47:20 UTC (rev 7678)
+++ sandbox/adsk/4.2.Q/Fdo/Unmanaged/Src/Fdo/Xml/GeometryHandler.cpp	2018-06-13 \
02:14:53 UTC (rev 7679) @@ -48,6 +48,7 @@
 	m_parsingStateStack.push_back(ParsingState_Start);
 
 	m_isMultiGeometry = false;
+    m_invertAxis = false;
     m_typeGeomExpected = GmlGeometryType_Unknown;
 }
 
@@ -57,11 +58,15 @@
 
 	m_gmlVersion = FdoGmlVersion_212;
 
-	if (flags != NULL)
-		m_gmlVersion = flags->GetGmlVersion();
+    if (flags != NULL)
+    {
+        m_gmlVersion = flags->GetGmlVersion();
+        m_invertAxis = flags->GetInvertAxis();
+    }
 
 	m_isMultiGeometry = false;
     m_typeGeomExpected = GmlGeometryType_Unknown;
+    m_flags = FDO_SAFE_ADDREF(flags);
 }
 
 FdoXmlGeometryHandler::~FdoXmlGeometryHandler()
@@ -200,7 +205,7 @@
 	case GmlGeometryType_GeometryAssociation:
 		m_parsingStateStack.push_back(ParsingState_GeometryAssociation);
 	
-		m_nestedHandler = new FdoXmlGeometryHandler();
+		m_nestedHandler = new FdoXmlGeometryHandler(m_flags);
         // Pass down the outer geometry coordinates.
         m_nestedHandler->m_coordinates = m_coordinates;
 
@@ -346,7 +351,7 @@
 	case ParsingState_LowerCorner:
 	case ParsingState_UpperCorner:
 		if(m_coordinates != NULL)
-			m_coordinates->AddCoordinate(m_dataProperty);
+			m_coordinates->AddCoordinate(m_dataProperty, m_invertAxis);
 		break;
 
 	//Coord

Modified: sandbox/adsk/4.2.Q/Fdo/Unmanaged/Src/Fdo/Xml/GeometryHandler.h
===================================================================
--- sandbox/adsk/4.2.Q/Fdo/Unmanaged/Src/Fdo/Xml/GeometryHandler.h	2018-05-31 \
                07:47:20 UTC (rev 7678)
+++ sandbox/adsk/4.2.Q/Fdo/Unmanaged/Src/Fdo/Xml/GeometryHandler.h	2018-06-13 \
02:14:53 UTC (rev 7679) @@ -146,6 +146,9 @@
     GmlGeometryType m_typeGeomExpected;
     FdoXmlSaxHandler* SkipFirstParseStep();
     void RunLastParseStep(FdoString* name, GmlGeometryType typeGeomExpected);
+
+    FdoPtr<FdoXmlFeatureFlags> m_flags;
+    FdoBoolean m_invertAxis;
 };
 
 typedef FdoPtr<FdoXmlGeometryHandler> FdoXmlGeometryHandlerP;

Modified: sandbox/adsk/4.2.Q/Providers/WFS/Src/Provider/FdoWfsConnection.cpp
===================================================================
--- sandbox/adsk/4.2.Q/Providers/WFS/Src/Provider/FdoWfsConnection.cpp	2018-05-31 \
                07:47:20 UTC (rev 7678)
+++ sandbox/adsk/4.2.Q/Providers/WFS/Src/Provider/FdoWfsConnection.cpp	2018-06-13 \
02:14:53 UTC (rev 7679) @@ -203,7 +203,9 @@
     FdoStringP proxyPort = dictionary->GetProperty (FdoWfsGlobals::ProxyPort);
     FdoStringP proxyUser = dictionary->GetProperty (FdoWfsGlobals::ProxyUsername);
     FdoStringP proxyPassword = dictionary->GetProperty \
                (FdoWfsGlobals::ProxyPassword);
-    
+    FdoStringP invertAxis = dictionary->GetProperty(FdoWfsGlobals::InvertAxis);
+    FdoBoolean isInvertAxis = (invertAxis == FdoWfsGlobals::TrueString);
+
     if (0 == mFeatureServer.GetLength()) 
     {
         throw FdoException::Create (NlsMsgGet(WFS_CONNECTION_REQUIRED_PROPERTY_NULL, \
 @@ -222,7 +224,7 @@
 	FdoStringP version = _getRequestWFSVersion(mFeatureServer);
 
     // set up the WFS delegate
-    mDelegate = FdoWfsDelegate::Create(mFeatureServer, mUserName, mPassword, \
proxyHost, proxyPort, proxyUser, proxyPassword); +    mDelegate = \
FdoWfsDelegate::Create(mFeatureServer, mUserName, mPassword, proxyHost, proxyPort, \
proxyUser, proxyPassword, isInvertAxis);  
     // try to get the service metadata
     mServiceMetadata = mDelegate->GetCapabilities(version);

Modified: sandbox/adsk/4.2.Q/Providers/WFS/Src/Provider/FdoWfsConnectionInfo.cpp
===================================================================
--- sandbox/adsk/4.2.Q/Providers/WFS/Src/Provider/FdoWfsConnectionInfo.cpp	2018-05-31 \
                07:47:20 UTC (rev 7678)
+++ sandbox/adsk/4.2.Q/Providers/WFS/Src/Provider/FdoWfsConnectionInfo.cpp	2018-06-13 \
02:14:53 UTC (rev 7679) @@ -139,6 +139,13 @@
                         NlsMsgGet(WFS_CONNECTION_PROPERTY_PROXYPASSWORD, \
                mbPropName),
                         L"", false, false, false, false, false, false, false, 0, \
NULL);  mPropertyDictionary->AddProperty(proxyPasswordProperty);
+
+        wide_to_multibyte(mbPropName, FdoWfsGlobals::InvertAxis);
+        FdoPtr<ConnectionProperty> invertAxisProperty = new ConnectionProperty(
+            FdoWfsGlobals::InvertAxis,
+            FdoWfsGlobals::InvertAxis,
+            L"", false, false, false, false, false, false, false, 0, NULL);
+        mPropertyDictionary->AddProperty(invertAxisProperty);
     }
 
     return (FDO_SAFE_ADDREF(mPropertyDictionary.p));

Modified: sandbox/adsk/4.2.Q/Providers/WFS/Src/Provider/FdoWfsDelegate.cpp
===================================================================
--- sandbox/adsk/4.2.Q/Providers/WFS/Src/Provider/FdoWfsDelegate.cpp	2018-05-31 \
                07:47:20 UTC (rev 7678)
+++ sandbox/adsk/4.2.Q/Providers/WFS/Src/Provider/FdoWfsDelegate.cpp	2018-06-13 \
02:14:53 UTC (rev 7679) @@ -28,8 +28,8 @@
 #include <Fdo/Xml/FeatureFlags.h>
 
 
-FdoWfsDelegate::FdoWfsDelegate(FdoString* defaultUrl, FdoString* userName, \
FdoString* passwd, FdoString* proxy_location, FdoString* proxy_port, FdoString* \
                proxy_user, FdoString* proxy_password):
-     FdoOwsDelegate(defaultUrl, userName, passwd, proxy_location, proxy_port, \
proxy_user, proxy_password) +FdoWfsDelegate::FdoWfsDelegate(FdoString* defaultUrl, \
FdoString* userName, FdoString* passwd, FdoString* proxy_location, FdoString* \
proxy_port, FdoString* proxy_user, FdoString* proxy_password, bool invert_axis): +    \
FdoOwsDelegate(defaultUrl, userName, passwd, proxy_location, proxy_port, proxy_user, \
proxy_password), invertAxis(invert_axis)  {
 }
 
@@ -37,9 +37,9 @@
 {
 }
 
-FdoWfsDelegate* FdoWfsDelegate::Create(FdoString* defaultUrl, FdoString* userName, \
FdoString* passwd,  FdoString* proxy_location, FdoString* proxy_port, FdoString* \
proxy_user, FdoString* proxy_password) +FdoWfsDelegate* \
FdoWfsDelegate::Create(FdoString* defaultUrl, FdoString* userName, FdoString* passwd, \
FdoString* proxy_location, FdoString* proxy_port, FdoString* proxy_user, FdoString* \
proxy_password, bool invert_axis)  {
-    return new FdoWfsDelegate(defaultUrl, userName, passwd,  proxy_location, \
proxy_port, proxy_user, proxy_password); +    return new FdoWfsDelegate(defaultUrl, \
userName, passwd,  proxy_location, proxy_port, proxy_user, proxy_password, \
invert_axis);  }
 
 FdoWfsServiceMetadata* FdoWfsDelegate::GetCapabilities(FdoString* version)
@@ -165,6 +165,7 @@
     FdoPtr<FdoXmlReader> xmlReader = FdoXmlReader::Create(tempStream);
 	FdoPtr<FdoXmlFeatureFlags> flags = \
FdoXmlFeatureFlags::Create(FdoWfsGlobals::fdo_customer, \
FdoXmlFlags::ErrorLevel_VeryLow);  flags->SetSchemaMappings(schemaMappings);
+    flags->SetInvertAxis(this->invertAxis);
     FdoPtr<FdoXmlFeatureReader> xmlFeatureReader = \
FdoXmlFeatureReader::Create(xmlReader, flags);  \
xmlFeatureReader->SetFeatureSchemas(schemas);  FdoPtr<FdoWfsFeatureReader> \
featureReader = new FdoWfsFeatureReader;	

Modified: sandbox/adsk/4.2.Q/Providers/WFS/Src/Provider/FdoWfsDelegate.h
===================================================================
--- sandbox/adsk/4.2.Q/Providers/WFS/Src/Provider/FdoWfsDelegate.h	2018-05-31 \
                07:47:20 UTC (rev 7678)
+++ sandbox/adsk/4.2.Q/Providers/WFS/Src/Provider/FdoWfsDelegate.h	2018-06-13 \
02:14:53 UTC (rev 7679) @@ -37,10 +37,11 @@
         FdoString* defaultUrl,
         FdoString* userName,
         FdoString* passwd,
-		FdoString* proxyHost = NULL,
-		FdoString* proxyPort = NULL,
-		FdoString* proxyUsername = NULL,
-        FdoString* proxyPassword = NULL
+        FdoString* proxyHost = NULL,
+        FdoString* proxyPort = NULL,
+        FdoString* proxyUsername = NULL,
+        FdoString* proxyPassword = NULL,
+        bool invertAxis = false
         );
     virtual ~FdoWfsDelegate();
     virtual void Dispose() { delete this; }
@@ -48,7 +49,7 @@
 public:
     typedef bool (FdoWfsCancelExecutationHander)(void*);
     static FdoWfsDelegate* Create(FdoString* defaultUrl, FdoString* userName, \
                FdoString* passwd);
-    static FdoWfsDelegate* Create(FdoString* defaultUrl, FdoString* userName, \
FdoString* passwd, FdoString* proxy_location, FdoString* proxy_port, FdoString* \
proxy_user, FdoString* proxy_password); +    static FdoWfsDelegate* Create(FdoString* \
defaultUrl, FdoString* userName, FdoString* passwd, FdoString* proxy_location, \
FdoString* proxy_port, FdoString* proxy_user, FdoString* proxy_password, bool \
invertAxis = false);  
     FdoWfsServiceMetadata* GetCapabilities(FdoString* version);
     FdoFeatureSchemaCollection* DescribeFeatureType(FdoStringCollection* \
typeNames,FdoString* version); @@ -79,6 +80,7 @@
 	//
 	FdoIoStream* preProcessStream(FdoIoStream* streamm, FdoWfsCancelExecutationHander \
handler, void* handleData);  
+    bool invertAxis;
 };
 
 typedef FdoPtr<FdoWfsDelegate> FdoWfsDelegateP;

Modified: sandbox/adsk/4.2.Q/Providers/WFS/Src/Provider/FdoWfsGlobals.h
===================================================================
--- sandbox/adsk/4.2.Q/Providers/WFS/Src/Provider/FdoWfsGlobals.h	2018-05-31 07:47:20 \
                UTC (rev 7678)
+++ sandbox/adsk/4.2.Q/Providers/WFS/Src/Provider/FdoWfsGlobals.h	2018-06-13 02:14:53 \
UTC (rev 7679) @@ -113,6 +113,8 @@
     static FdoString* ProxyPort                         = L"ProxyServerPort";
     static FdoString* ProxyUsername                     = L"ProxyServerUsername";
     static FdoString* ProxyPassword                     = L"ProxyServerPassword";
+    static FdoString* InvertAxis                        = L"InvertAxis";
+    static FdoString* TrueString                        = L"True";
 
     static FdoString* PROPERTYNAME                      = L"PROPERTYNAME";
     static FdoString* Filter                            = L"Filter";

_______________________________________________
fdo-commits mailing list
fdo-commits@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/fdo-commits


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic