[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