This is an automated email from the git hooks/post-receive script. sebastic pushed a commit to branch master in repository qgis.
commit 19088cc97d5a6b422534bb37b9b5b0d81a9d69f6 Author: Bas Couwenberg <[email protected]> Date: Fri Jul 21 20:12:36 2017 +0200 New upstream version 2.14.17+dfsg --- CMakeLists.txt | 2 +- ChangeLog | 36 +++++++++++++++++ debian/changelog | 10 ++++- debian/control.in | 2 +- src/core/geometry/qgscompoundcurvev2.cpp | 31 ++++---------- src/core/geometry/qgscurvepolygonv2.cpp | 25 +++++++----- src/core/geometry/qgsgeometryutils.cpp | 12 +++++- src/core/geometry/qgslinestringv2.cpp | 11 ++--- src/core/geometry/qgsmultilinestringv2.cpp | 2 +- src/core/geometry/qgspointv2.cpp | 11 ++++- src/core/qgsvectorfilewriter.cpp | 12 ++++++ src/providers/ogr/qgsogrprovider.cpp | 22 ++++++++++ src/server/qgswfsserver.cpp | 18 ++++++++- tests/src/core/testqgsgeometry.cpp | 47 +++++++++++++++------- .../testdata/qgis_server/wfs_getfeature_limit2.txt | 12 +++--- .../testdata/qgis_server/wfs_getfeature_nobbox.txt | 18 ++++----- .../qgis_server/wfs_getfeature_start1_limit1.txt | 6 +-- .../qgis_server/wfs_getfeature_startindex2.txt | 6 +-- 18 files changed, 196 insertions(+), 87 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d283e60..c199bae 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ SET(CPACK_PACKAGE_VERSION_MAJOR "2") SET(CPACK_PACKAGE_VERSION_MINOR "14") -SET(CPACK_PACKAGE_VERSION_PATCH "16") +SET(CPACK_PACKAGE_VERSION_PATCH "17") SET(COMPLETE_VERSION ${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}) SET(RELEASE_NAME "Essen") IF (POLICY CMP0048) # in CMake 3.0.0+ diff --git a/ChangeLog b/ChangeLog index 31fd80b..0741c33 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,39 @@ +Even Rouault <[email protected]> 2017-07-08 + + [OGR] Use OGR_F_SetFieldNull() with GDAL >= 2.2 to avoid GeoJSON fields to be unset (fixes #16812) + +rldhont <[email protected]> 2017-07-05 + + Fix GML2 after Port GML3 improvements to 2.14 branch + +Marco Hugentobler <[email protected]> 2017-02-22 + + Port GML3 improvements to 2.14 branch + +Juergen E. Fischer <[email protected]> 2017-07-04 + + debian packaging: drop explicit libopenscenegraph-dev build dependency + +rldhont <[email protected]> 2017-06-30 + + Identation [BUGFIX] QgsCurvePolygonV2::asGML3, build right GML3 polygon + +rldhont <[email protected]> 2017-06-30 + + [BUGFIX] QgsCurvePolygonV2::asGML3, build right GML3 polygon + +rldhont <[email protected]> 2017-06-28 + + [BUGFIX] QgsCurvePolygonV2::asGML, add interior ring only if one exists + +rldhont <[email protected]> 2017-06-28 + + [BUGFIX] QgsCurvePolygonV2::asGML, add interior ring only if one exists + +Juergen E. Fischer <[email protected]> 2017-06-23 + + Release of 2.14.16 + Juergen E. Fischer <[email protected]> 2017-06-19 include uic qtwebkit.py diff --git a/debian/changelog b/debian/changelog index 7f9e50f..57fbf42 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,8 +1,14 @@ -qgis (2.14.16) UNRELEASED; urgency=medium +qgis (2.14.17) UNRELEASED; urgency=medium + + * Release of 2.14.17 + + -- Jürgen E. Fischer <[email protected]> Fri, 21 Jul 2017 14:00:03 +0200 + +qgis (2.14.16) unstable; urgency=medium * Release of 2.14.16 - -- Jürgen E. Fischer <[email protected]> Fri, 23 Jun 2017 14:00:04 +0200 + -- Jürgen E. Fischer <[email protected]> Fri, 21 Jul 2017 14:00:03 +0200 qgis (2.14.15) unstable; urgency=medium diff --git a/debian/control.in b/debian/control.in index b613507..4690f4f 100644 --- a/debian/control.in +++ b/debian/control.in @@ -52,7 +52,6 @@ Build-Depends: python-sip (>= 4.5.0), python-sip-dev (>= 4.5.0), libosgearth-dev, - libopenscenegraph-dev, libqscintilla2-dev, git, doxygen, @@ -451,6 +450,7 @@ Depends: qgis-providers (= ${binary:Version}), ${shlibs:Depends}, ${misc:Depends} +Suggests: xvfb Conflicts: qgis-mapserver Provides: qgis-mapserver Replaces: qgis-mapserver diff --git a/src/core/geometry/qgscompoundcurvev2.cpp b/src/core/geometry/qgscompoundcurvev2.cpp index 819b2bf..76a37c3 100644 --- a/src/core/geometry/qgscompoundcurvev2.cpp +++ b/src/core/geometry/qgscompoundcurvev2.cpp @@ -255,33 +255,16 @@ QDomElement QgsCompoundCurveV2::asGML2( QDomDocument& doc, int precision, const QDomElement QgsCompoundCurveV2::asGML3( QDomDocument& doc, int precision, const QString& ns ) const { - QDomElement elemCurve = doc.createElementNS( ns, "Curve" ); - - QDomElement elemSegments = doc.createElementNS( ns, "segments" ); - + QDomElement compoundCurveElem = doc.createElementNS( ns, "CompositeCurve" ); Q_FOREACH ( const QgsCurveV2* curve, mCurves ) { - if ( dynamic_cast<const QgsLineStringV2*>( curve ) ) - { - QgsPointSequenceV2 pts; - curve->points( pts ); - - QDomElement elemLineStringSegment = doc.createElementNS( ns, "LineStringSegment" ); - elemLineStringSegment.appendChild( QgsGeometryUtils::pointsToGML3( pts, doc, precision, ns, is3D() ) ); - elemSegments.appendChild( elemLineStringSegment ); - } - else if ( dynamic_cast<const QgsCircularStringV2*>( curve ) ) - { - QgsPointSequenceV2 pts; - curve->points( pts ); - - QDomElement elemArcString = doc.createElementNS( ns, "ArcString" ); - elemArcString.appendChild( QgsGeometryUtils::pointsToGML3( pts, doc, precision, ns, is3D() ) ); - elemSegments.appendChild( elemArcString ); - } + QDomElement curveMemberElem = doc.createElementNS( ns, "curveMember" ); + QDomElement curveElem = curve->asGML3( doc, precision, ns ); + curveMemberElem.appendChild( curveElem ); + compoundCurveElem.appendChild( curveMemberElem ); } - elemCurve.appendChild( elemSegments ); - return elemCurve; + + return compoundCurveElem; } QString QgsCompoundCurveV2::asJSON( int precision ) const diff --git a/src/core/geometry/qgscurvepolygonv2.cpp b/src/core/geometry/qgscurvepolygonv2.cpp index c751aab..92a09d9 100644 --- a/src/core/geometry/qgscurvepolygonv2.cpp +++ b/src/core/geometry/qgscurvepolygonv2.cpp @@ -300,16 +300,16 @@ QDomElement QgsCurvePolygonV2::asGML2( QDomDocument& doc, int precision, const Q elemOuterBoundaryIs.appendChild( outerRing ); delete exteriorLineString; elemPolygon.appendChild( elemOuterBoundaryIs ); - QDomElement elemInnerBoundaryIs = doc.createElementNS( ns, "innerBoundaryIs" ); for ( int i = 0, n = numInteriorRings(); i < n; ++i ) { + QDomElement elemInnerBoundaryIs = doc.createElementNS( ns, "innerBoundaryIs" ); QgsLineStringV2* interiorLineString = interiorRing( i )->curveToLine(); QDomElement innerRing = interiorLineString->asGML2( doc, precision, ns ); innerRing.toElement().setTagName( "LinearRing" ); elemInnerBoundaryIs.appendChild( innerRing ); delete interiorLineString; + elemPolygon.appendChild( elemInnerBoundaryIs ); } - elemPolygon.appendChild( elemInnerBoundaryIs ); return elemPolygon; } @@ -317,18 +317,25 @@ QDomElement QgsCurvePolygonV2::asGML3( QDomDocument& doc, int precision, const Q { QDomElement elemCurvePolygon = doc.createElementNS( ns, "Polygon" ); QDomElement elemExterior = doc.createElementNS( ns, "exterior" ); - QDomElement outerRing = exteriorRing()->asGML2( doc, precision, ns ); - outerRing.toElement().setTagName( "LinearRing" ); - elemExterior.appendChild( outerRing ); + QDomElement curveElem = exteriorRing()->asGML3( doc, precision, ns ); + if ( curveElem.tagName() == "LineString" ) + { + curveElem.setTagName( "LinearRing" ); + } + elemExterior.appendChild( curveElem ); elemCurvePolygon.appendChild( elemExterior ); - QDomElement elemInterior = doc.createElementNS( ns, "interior" ); + for ( int i = 0, n = numInteriorRings(); i < n; ++i ) { - QDomElement innerRing = interiorRing( i )->asGML2( doc, precision, ns ); - innerRing.toElement().setTagName( "LinearRing" ); + QDomElement elemInterior = doc.createElementNS( ns, "interior" ); + QDomElement innerRing = interiorRing( i )->asGML3( doc, precision, ns ); + if ( innerRing.tagName() == "LineString" ) + { + innerRing.setTagName( "LinearRing" ); + } elemInterior.appendChild( innerRing ); + elemCurvePolygon.appendChild( elemInterior ); } - elemCurvePolygon.appendChild( elemInterior ); return elemCurvePolygon; } diff --git a/src/core/geometry/qgsgeometryutils.cpp b/src/core/geometry/qgsgeometryutils.cpp index f913c0a..8ba201b 100644 --- a/src/core/geometry/qgsgeometryutils.cpp +++ b/src/core/geometry/qgsgeometryutils.cpp @@ -631,12 +631,20 @@ QDomElement QgsGeometryUtils::pointsToGML2( const QgsPointSequenceV2 &points, QD { QDomElement elemCoordinates = doc.createElementNS( ns, "coordinates" ); + // coordinate separator + QString cs = ","; + // tupel separator + QString ts = " "; + + elemCoordinates.setAttribute( "cs", cs ); + elemCoordinates.setAttribute( "ts", ts ); + QString strCoordinates; Q_FOREACH ( const QgsPointV2& p, points ) - strCoordinates += qgsDoubleToString( p.x(), precision ) + ',' + qgsDoubleToString( p.y(), precision ) + ' '; + strCoordinates += qgsDoubleToString( p.x(), precision ) + cs + qgsDoubleToString( p.y(), precision ) + ts; - if ( strCoordinates.endsWith( ' ' ) ) + if ( strCoordinates.endsWith( ts ) ) strCoordinates.chop( 1 ); // Remove trailing space elemCoordinates.appendChild( doc.createTextNode( strCoordinates ) ); diff --git a/src/core/geometry/qgslinestringv2.cpp b/src/core/geometry/qgslinestringv2.cpp index e2f2d48..e59504c 100644 --- a/src/core/geometry/qgslinestringv2.cpp +++ b/src/core/geometry/qgslinestringv2.cpp @@ -209,14 +209,9 @@ QDomElement QgsLineStringV2::asGML3( QDomDocument& doc, int precision, const QSt QgsPointSequenceV2 pts; points( pts ); - QDomElement elemCurve = doc.createElementNS( ns, "Curve" ); - QDomElement elemSegments = doc.createElementNS( ns, "segments" ); - QDomElement elemArcString = doc.createElementNS( ns, "LineStringSegment" ); - elemArcString.appendChild( QgsGeometryUtils::pointsToGML3( pts, doc, precision, ns, is3D() ) ); - elemSegments.appendChild( elemArcString ); - elemCurve.appendChild( elemSegments ); - - return elemCurve; + QDomElement elemLineString = doc.createElementNS( ns, "LineString" ); + elemLineString.appendChild( QgsGeometryUtils::pointsToGML3( pts, doc, precision, ns, is3D() ) ); + return elemLineString; } QString QgsLineStringV2::asJSON( int precision ) const diff --git a/src/core/geometry/qgsmultilinestringv2.cpp b/src/core/geometry/qgsmultilinestringv2.cpp index a83bdc6..3107fac 100644 --- a/src/core/geometry/qgsmultilinestringv2.cpp +++ b/src/core/geometry/qgsmultilinestringv2.cpp @@ -54,7 +54,7 @@ QDomElement QgsMultiLineStringV2::asGML2( QDomDocument& doc, int precision, cons QDomElement QgsMultiLineStringV2::asGML3( QDomDocument& doc, int precision, const QString& ns ) const { - QDomElement elemMultiCurve = doc.createElementNS( ns, "MultiLineString" ); + QDomElement elemMultiCurve = doc.createElementNS( ns, "MultiCurve" ); Q_FOREACH ( const QgsAbstractGeometryV2 *geom, mGeometries ) { if ( dynamic_cast<const QgsLineStringV2*>( geom ) ) diff --git a/src/core/geometry/qgspointv2.cpp b/src/core/geometry/qgspointv2.cpp index 3caadca..7cda68a 100644 --- a/src/core/geometry/qgspointv2.cpp +++ b/src/core/geometry/qgspointv2.cpp @@ -213,7 +213,16 @@ QDomElement QgsPointV2::asGML2( QDomDocument& doc, int precision, const QString& { QDomElement elemPoint = doc.createElementNS( ns, "Point" ); QDomElement elemCoordinates = doc.createElementNS( ns, "coordinates" ); - QString strCoordinates = qgsDoubleToString( mX, precision ) + ',' + qgsDoubleToString( mY, precision ); + + // coordinate separator + QString cs = ","; + // tupel separator + QString ts = " "; + + elemCoordinates.setAttribute( "cs", cs ); + elemCoordinates.setAttribute( "ts", ts ); + + QString strCoordinates = qgsDoubleToString( mX, precision ) + cs + qgsDoubleToString( mY, precision ); elemCoordinates.appendChild( doc.createTextNode( strCoordinates ) ); elemPoint.appendChild( elemCoordinates ); return elemPoint; diff --git a/src/core/qgsvectorfilewriter.cpp b/src/core/qgsvectorfilewriter.cpp index 536147b..a563118 100644 --- a/src/core/qgsvectorfilewriter.cpp +++ b/src/core/qgsvectorfilewriter.cpp @@ -1771,7 +1771,19 @@ OGRFeatureH QgsVectorFileWriter::createFeature( QgsFeature& feature ) int ogrField = mAttrIdxToOgrIdx[ fldIdx ]; if ( !attrValue.isValid() || attrValue.isNull() ) + { +// Starting with GDAL 2.2, there are 2 concepts: unset fields and null fields +// whereas previously there was only unset fields. For a GeoJSON output, +// leaving a field unset will cause it to not appear at all in the output +// feature. +// When all features of a layer have a field unset, this would cause the +// field to not be present at all in the output, and thus on reading to +// have disappeared. #16812 +#ifdef OGRNullMarker + OGR_F_SetFieldNull( poFeature, ogrField ); +#endif continue; + } switch ( attrValue.type() ) { diff --git a/src/providers/ogr/qgsogrprovider.cpp b/src/providers/ogr/qgsogrprovider.cpp index 3626ff4..32719b1 100644 --- a/src/providers/ogr/qgsogrprovider.cpp +++ b/src/providers/ogr/qgsogrprovider.cpp @@ -1035,7 +1035,18 @@ bool QgsOgrProvider::addFeature( QgsFeature& f ) QVariant attrVal = attrs.at( targetAttributeId ); if ( attrVal.isNull() || ( type != OFTString && attrVal.toString().isEmpty() ) ) { +// Starting with GDAL 2.2, there are 2 concepts: unset fields and null fields +// whereas previously there was only unset fields. For a GeoJSON output, +// leaving a field unset will cause it to not appear at all in the output +// feature. +// When all features of a layer have a field unset, this would cause the +// field to not be present at all in the output, and thus on reading to +// have disappeared. #16812 +#ifdef OGRNullMarker + OGR_F_SetFieldNull( feature, targetAttributeId ); +#else OGR_F_UnsetField( feature, targetAttributeId ); +#endif } else { @@ -1323,7 +1334,18 @@ bool QgsOgrProvider::changeAttributeValues( const QgsChangedAttributesMap &attr_ if ( it2->isNull() || ( type != OFTString && it2->toString().isEmpty() ) ) { +// Starting with GDAL 2.2, there are 2 concepts: unset fields and null fields +// whereas previously there was only unset fields. For a GeoJSON output, +// leaving a field unset will cause it to not appear at all in the output +// feature. +// When all features of a layer have a field unset, this would cause the +// field to not be present at all in the output, and thus on reading to +// have disappeared. #16812 +#ifdef OGRNullMarker + OGR_F_SetFieldNull( of, f ); +#else OGR_F_UnsetField( of, f ); +#endif } else { diff --git a/src/server/qgswfsserver.cpp b/src/server/qgswfsserver.cpp index c682167..00b34a8 100644 --- a/src/server/qgswfsserver.cpp +++ b/src/server/qgswfsserver.cpp @@ -2004,7 +2004,14 @@ QDomElement QgsWFSServer::createFeatureGML2( QgsFeature* feat, QDomDocument& doc delete centroid; } else - gmlElem = QgsOgcUtils::geometryToGML( geom, doc, prec ); + { + QgsAbstractGeometryV2* abstractGeom = geom->geometry(); + if ( abstractGeom ) + { + gmlElem = abstractGeom->asGML2( doc, prec, "http://www.opengis.net/gml" ); + } + } + if ( !gmlElem.isNull() ) { QgsRectangle box = geom->boundingBox(); @@ -2081,7 +2088,14 @@ QDomElement QgsWFSServer::createFeatureGML3( QgsFeature* feat, QDomDocument& doc delete centroid; } else - gmlElem = QgsOgcUtils::geometryToGML( geom, doc, "GML3", prec ); + { + QgsAbstractGeometryV2* abstractGeom = geom->geometry(); + if ( abstractGeom ) + { + gmlElem = abstractGeom->asGML3( doc, prec, "http://www.opengis.net/gml" ); + } + } + if ( !gmlElem.isNull() ) { QgsRectangle box = geom->boundingBox(); diff --git a/tests/src/core/testqgsgeometry.cpp b/tests/src/core/testqgsgeometry.cpp index 0c9b6e1..48abc2d 100644 --- a/tests/src/core/testqgsgeometry.cpp +++ b/tests/src/core/testqgsgeometry.cpp @@ -564,9 +564,9 @@ void TestQgsGeometry::pointV2() QgsPointV2 exportPoint( 1, 2 ); QgsPointV2 exportPointFloat( 1 / 3.0, 2 / 3.0 ); QDomDocument doc( "gml" ); - QString expectedGML2( "<Point xmlns=\"gml\"><coordinates xmlns=\"gml\">1,2</coordinates></Point>" ); + QString expectedGML2( "<Point xmlns=\"gml\"><coordinates xmlns=\"gml\" cs=\",\" ts=\" \">1,2</coordinates></Point>" ); QCOMPARE( elemToString( exportPoint.asGML2( doc ) ), expectedGML2 ); - QString expectedGML2prec3( "<Point xmlns=\"gml\"><coordinates xmlns=\"gml\">0.333,0.667</coordinates></Point>" ); + QString expectedGML2prec3( "<Point xmlns=\"gml\"><coordinates xmlns=\"gml\" cs=\",\" ts=\" \">0.333,0.667</coordinates></Point>" ); QCOMPARE( elemToString( exportPointFloat.asGML2( doc, 3 ) ), expectedGML2prec3 ); //asGML3 @@ -1402,15 +1402,15 @@ void TestQgsGeometry::lineStringV2() << QgsPointV2( 1 + 1 / 3.0, 1 + 2 / 3.0 ) << QgsPointV2( 2 + 1 / 3.0, 2 + 2 / 3.0 ) ); QDomDocument doc( "gml" ); - QString expectedGML2( "<LineString xmlns=\"gml\"><coordinates xmlns=\"gml\">31,32 41,42 51,52</coordinates></LineString>" ); + QString expectedGML2( "<LineString xmlns=\"gml\"><coordinates xmlns=\"gml\" cs=\",\" ts=\" \">31,32 41,42 51,52</coordinates></LineString>" ); QCOMPARE( elemToString( exportLine.asGML2( doc ) ), expectedGML2 ); - QString expectedGML2prec3( "<LineString xmlns=\"gml\"><coordinates xmlns=\"gml\">0.333,0.667 1.333,1.667 2.333,2.667</coordinates></LineString>" ); + QString expectedGML2prec3( "<LineString xmlns=\"gml\"><coordinates xmlns=\"gml\" cs=\",\" ts=\" \">0.333,0.667 1.333,1.667 2.333,2.667</coordinates></LineString>" ); QCOMPARE( elemToString( exportLineFloat.asGML2( doc, 3 ) ), expectedGML2prec3 ); //asGML3 - QString expectedGML3( "<Curve xmlns=\"gml\"><segments xmlns=\"gml\"><LineStringSegment xmlns=\"gml\"><posList xmlns=\"gml\" srsDimension=\"2\">31 32 41 42 51 52</posList></LineStringSegment></segments></Curve>" ); + QString expectedGML3( "<LineString xmlns=\"gml\"><posList xmlns=\"gml\" srsDimension=\"2\">31 32 41 42 51 52</posList></LineString>" ); QCOMPARE( elemToString( exportLine.asGML3( doc ) ), expectedGML3 ); - QString expectedGML3prec3( "<Curve xmlns=\"gml\"><segments xmlns=\"gml\"><LineStringSegment xmlns=\"gml\"><posList xmlns=\"gml\" srsDimension=\"2\">0.333 0.667 1.333 1.667 2.333 2.667</posList></LineStringSegment></segments></Curve>" ); + QString expectedGML3prec3( "<LineString xmlns=\"gml\"><posList xmlns=\"gml\" srsDimension=\"2\">0.333 0.667 1.333 1.667 2.333 2.667</posList></LineString>" ); QCOMPARE( elemToString( exportLineFloat.asGML3( doc, 3 ) ), expectedGML3prec3 ); //asJSON @@ -2840,12 +2840,29 @@ void TestQgsGeometry::polygonV2() << QgsPointV2( QgsWKBTypes::Point, 0, 10 ) << QgsPointV2( QgsWKBTypes::Point, 10, 10 ) << QgsPointV2( QgsWKBTypes::Point, 10, 0 ) << QgsPointV2( QgsWKBTypes::Point, 0, 0 ) ); exportPolygon.setExteriorRing( ext ); + + // GML document for compare + QDomDocument doc( "gml" ); + + // as GML2 + QString expectedSimpleGML2( "<Polygon xmlns=\"gml\"><outerBoundaryIs xmlns=\"gml\"><LinearRing xmlns=\"gml\"><coordinates xmlns=\"gml\" cs=\",\" ts=\" \">0,0 0,10 10,10 10,0 0,0</coordinates></LinearRing></outerBoundaryIs></Polygon>" ); + QCOMPARE( elemToString( exportPolygon.asGML2( doc ) ), expectedSimpleGML2 ); + + //as GML3 + QString expectedSimpleGML3( "<Polygon xmlns=\"gml\"><exterior xmlns=\"gml\"><LinearRing xmlns=\"gml\"><posList xmlns=\"gml\" srsDimension=\"2\">0 0 0 10 10 10 10 0 0 0</posList></LinearRing></exterior></Polygon>" ); + QCOMPARE( elemToString( exportPolygon.asGML3( doc ) ), expectedSimpleGML3 ); + + // as JSON + QString expectedSimpleJson( "{\"type\": \"Polygon\", \"coordinates\": [[ [0, 0], [0, 10], [10, 10], [10, 0], [0, 0]]] }" ); + QCOMPARE( exportPolygon.asJSON(), expectedSimpleJson ); + ring = new QgsLineStringV2(); ring->setPoints( QgsPointSequenceV2() << QgsPointV2( QgsWKBTypes::Point, 1, 1 ) << QgsPointV2( QgsWKBTypes::Point, 1, 9 ) << QgsPointV2( QgsWKBTypes::Point, 9, 9 ) << QgsPointV2( QgsWKBTypes::Point, 9, 1 ) << QgsPointV2( QgsWKBTypes::Point, 1, 1 ) ); exportPolygon.addInteriorRing( ring ); + // as JSON QString expectedJson( "{\"type\": \"Polygon\", \"coordinates\": [[ [0, 0], [0, 10], [10, 10], [10, 0], [0, 0]], [ [1, 1], [1, 9], [9, 9], [9, 1], [1, 1]]] }" ); QCOMPARE( exportPolygon.asJSON(), expectedJson ); @@ -2861,24 +2878,24 @@ void TestQgsGeometry::polygonV2() << QgsPointV2( QgsWKBTypes::Point, 4 / 3.0, 2 / 3.0 ) << QgsPointV2( QgsWKBTypes::Point, 2 / 3.0, 2 / 3.0 ) ); exportPolygonFloat.addInteriorRing( ring ); + // as JSON QString expectedJsonPrec3( "{\"type\": \"Polygon\", \"coordinates\": [[ [1.111, 1.111], [1.111, 11.111], [11.111, 11.111], [11.111, 1.111], [1.111, 1.111]], [ [0.667, 0.667], [0.667, 1.333], [1.333, 1.333], [1.333, 0.667], [0.667, 0.667]]] }" ); QCOMPARE( exportPolygonFloat.asJSON( 3 ), expectedJsonPrec3 ); // as GML2 - QDomDocument doc( "gml" ); - QString expectedGML2( "<Polygon xmlns=\"gml\"><outerBoundaryIs xmlns=\"gml\"><LinearRing xmlns=\"gml\"><coordinates xmlns=\"gml\">0,0 0,10 10,10 10,0 0,0</coordinates></LinearRing></outerBoundaryIs>" ); - expectedGML2 += QString( "<innerBoundaryIs xmlns=\"gml\"><LinearRing xmlns=\"gml\"><coordinates xmlns=\"gml\">1,1 1,9 9,9 9,1 1,1</coordinates></LinearRing></innerBoundaryIs></Polygon>" ); + QString expectedGML2( "<Polygon xmlns=\"gml\"><outerBoundaryIs xmlns=\"gml\"><LinearRing xmlns=\"gml\"><coordinates xmlns=\"gml\" cs=\",\" ts=\" \">0,0 0,10 10,10 10,0 0,0</coordinates></LinearRing></outerBoundaryIs>" ); + expectedGML2 += QString( "<innerBoundaryIs xmlns=\"gml\"><LinearRing xmlns=\"gml\"><coordinates xmlns=\"gml\" cs=\",\" ts=\" \">1,1 1,9 9,9 9,1 1,1</coordinates></LinearRing></innerBoundaryIs></Polygon>" ); QCOMPARE( elemToString( exportPolygon.asGML2( doc ) ), expectedGML2 ); - QString expectedGML2prec3( "<Polygon xmlns=\"gml\"><outerBoundaryIs xmlns=\"gml\"><LinearRing xmlns=\"gml\"><coordinates xmlns=\"gml\">1.111,1.111 1.111,11.111 11.111,11.111 11.111,1.111 1.111,1.111</coordinates></LinearRing></outerBoundaryIs>" ); - expectedGML2prec3 += QString( "<innerBoundaryIs xmlns=\"gml\"><LinearRing xmlns=\"gml\"><coordinates xmlns=\"gml\">0.667,0.667 0.667,1.333 1.333,1.333 1.333,0.667 0.667,0.667</coordinates></LinearRing></innerBoundaryIs></Polygon>" ); + QString expectedGML2prec3( "<Polygon xmlns=\"gml\"><outerBoundaryIs xmlns=\"gml\"><LinearRing xmlns=\"gml\"><coordinates xmlns=\"gml\" cs=\",\" ts=\" \">1.111,1.111 1.111,11.111 11.111,11.111 11.111,1.111 1.111,1.111</coordinates></LinearRing></outerBoundaryIs>" ); + expectedGML2prec3 += QString( "<innerBoundaryIs xmlns=\"gml\"><LinearRing xmlns=\"gml\"><coordinates xmlns=\"gml\" cs=\",\" ts=\" \">0.667,0.667 0.667,1.333 1.333,1.333 1.333,0.667 0.667,0.667</coordinates></LinearRing></innerBoundaryIs></Polygon>" ); QCOMPARE( elemToString( exportPolygonFloat.asGML2( doc, 3 ) ), expectedGML2prec3 ); //as GML3 - QString expectedGML3( "<Polygon xmlns=\"gml\"><exterior xmlns=\"gml\"><LinearRing xmlns=\"gml\"><coordinates xmlns=\"gml\">0,0 0,10 10,10 10,0 0,0</coordinates></LinearRing></exterior>" ); - expectedGML3 += QString( "<interior xmlns=\"gml\"><LinearRing xmlns=\"gml\"><coordinates xmlns=\"gml\">1,1 1,9 9,9 9,1 1,1</coordinates></LinearRing></interior></Polygon>" ); + QString expectedGML3( "<Polygon xmlns=\"gml\"><exterior xmlns=\"gml\"><LinearRing xmlns=\"gml\"><posList xmlns=\"gml\" srsDimension=\"2\">0 0 0 10 10 10 10 0 0 0</posList></LinearRing></exterior>" ); + expectedGML3 += QString( "<interior xmlns=\"gml\"><LinearRing xmlns=\"gml\"><posList xmlns=\"gml\" srsDimension=\"2\">1 1 1 9 9 9 9 1 1 1</posList></LinearRing></interior></Polygon>" ); QCOMPARE( elemToString( exportPolygon.asGML3( doc ) ), expectedGML3 ); - QString expectedGML3prec3( "<Polygon xmlns=\"gml\"><exterior xmlns=\"gml\"><LinearRing xmlns=\"gml\"><coordinates xmlns=\"gml\">1.111,1.111 1.111,11.111 11.111,11.111 11.111,1.111 1.111,1.111</coordinates></LinearRing></exterior>" ); - expectedGML3prec3 += QString( "<interior xmlns=\"gml\"><LinearRing xmlns=\"gml\"><coordinates xmlns=\"gml\">0.667,0.667 0.667,1.333 1.333,1.333 1.333,0.667 0.667,0.667</coordinates></LinearRing></interior></Polygon>" ); + QString expectedGML3prec3( "<Polygon xmlns=\"gml\"><exterior xmlns=\"gml\"><LinearRing xmlns=\"gml\"><posList xmlns=\"gml\" srsDimension=\"2\">1.111 1.111 1.111 11.111 11.111 11.111 11.111 1.111 1.111 1.111</posList></LinearRing></exterior>" ); + expectedGML3prec3 += QString( "<interior xmlns=\"gml\"><LinearRing xmlns=\"gml\"><posList xmlns=\"gml\" srsDimension=\"2\">0.667 0.667 0.667 1.333 1.333 1.333 1.333 0.667 0.667 0.667</posList></LinearRing></interior></Polygon>" ); QCOMPARE( elemToString( exportPolygonFloat.asGML3( doc, 3 ) ), expectedGML3prec3 ); //removing the fourth to last vertex removes the whole ring diff --git a/tests/testdata/qgis_server/wfs_getfeature_limit2.txt b/tests/testdata/qgis_server/wfs_getfeature_limit2.txt index bcb35f5..6b06407 100644 --- a/tests/testdata/qgis_server/wfs_getfeature_limit2.txt +++ b/tests/testdata/qgis_server/wfs_getfeature_limit2.txt @@ -13,9 +13,9 @@ Content-Type: text/xml; charset=utf-8 </gml:Box> </gml:boundedBy> <qgs:geometry> - <gml:Point srsName="EPSG:4326"> - <gml:coordinates cs="," ts=" ">8.20349634,44.90148253</gml:coordinates> - </gml:Point> + <Point xmlns="http://www.opengis.net/gml" srsName="EPSG:4326"> + <coordinates xmlns="http://www.opengis.net/gml" cs="," ts=" ">8.20349634,44.90148253</coordinates> + </Point> </qgs:geometry> <qgs:id>1</qgs:id> <qgs:name>one</qgs:name> @@ -30,9 +30,9 @@ Content-Type: text/xml; charset=utf-8 </gml:Box> </gml:boundedBy> <qgs:geometry> - <gml:Point srsName="EPSG:4326"> - <gml:coordinates cs="," ts=" ">8.20354699,44.90143568</gml:coordinates> - </gml:Point> + <Point xmlns="http://www.opengis.net/gml" srsName="EPSG:4326"> + <coordinates xmlns="http://www.opengis.net/gml" cs="," ts=" ">8.20354699,44.90143568</coordinates> + </Point> </qgs:geometry> <qgs:id>2</qgs:id> <qgs:name>two</qgs:name> diff --git a/tests/testdata/qgis_server/wfs_getfeature_nobbox.txt b/tests/testdata/qgis_server/wfs_getfeature_nobbox.txt index d13aefc..4efb472 100644 --- a/tests/testdata/qgis_server/wfs_getfeature_nobbox.txt +++ b/tests/testdata/qgis_server/wfs_getfeature_nobbox.txt @@ -13,9 +13,9 @@ Content-Type: text/xml; charset=utf-8 </gml:Box> </gml:boundedBy> <qgs:geometry> - <gml:Point srsName="EPSG:4326"> - <gml:coordinates cs="," ts=" ">8.20349634,44.90148253</gml:coordinates> - </gml:Point> + <Point xmlns="http://www.opengis.net/gml" srsName="EPSG:4326"> + <coordinates xmlns="http://www.opengis.net/gml" cs="," ts=" ">8.20349634,44.90148253</coordinates> + </Point> </qgs:geometry> <qgs:id>1</qgs:id> <qgs:name>one</qgs:name> @@ -30,9 +30,9 @@ Content-Type: text/xml; charset=utf-8 </gml:Box> </gml:boundedBy> <qgs:geometry> - <gml:Point srsName="EPSG:4326"> - <gml:coordinates cs="," ts=" ">8.20354699,44.90143568</gml:coordinates> - </gml:Point> + <Point xmlns="http://www.opengis.net/gml" srsName="EPSG:4326"> + <coordinates xmlns="http://www.opengis.net/gml" cs="," ts=" ">8.20354699,44.90143568</coordinates> + </Point> </qgs:geometry> <qgs:id>2</qgs:id> <qgs:name>two</qgs:name> @@ -47,9 +47,9 @@ Content-Type: text/xml; charset=utf-8 </gml:Box> </gml:boundedBy> <qgs:geometry> - <gml:Point srsName="EPSG:4326"> - <gml:coordinates cs="," ts=" ">8.20345931,44.90139484</gml:coordinates> - </gml:Point> + <Point xmlns="http://www.opengis.net/gml" srsName="EPSG:4326"> + <coordinates xmlns="http://www.opengis.net/gml" cs="," ts=" ">8.20345931,44.90139484</coordinates> + </Point> </qgs:geometry> <qgs:id>3</qgs:id> <qgs:name>three</qgs:name> diff --git a/tests/testdata/qgis_server/wfs_getfeature_start1_limit1.txt b/tests/testdata/qgis_server/wfs_getfeature_start1_limit1.txt index 9408334..922dd22 100644 --- a/tests/testdata/qgis_server/wfs_getfeature_start1_limit1.txt +++ b/tests/testdata/qgis_server/wfs_getfeature_start1_limit1.txt @@ -13,9 +13,9 @@ Content-Type: text/xml; charset=utf-8 </gml:Box> </gml:boundedBy> <qgs:geometry> - <gml:Point srsName="EPSG:4326"> - <gml:coordinates cs="," ts=" ">8.20354699,44.90143568</gml:coordinates> - </gml:Point> + <Point xmlns="http://www.opengis.net/gml" srsName="EPSG:4326"> + <coordinates xmlns="http://www.opengis.net/gml" cs="," ts=" ">8.20354699,44.90143568</coordinates> + </Point> </qgs:geometry> <qgs:id>2</qgs:id> <qgs:name>two</qgs:name> diff --git a/tests/testdata/qgis_server/wfs_getfeature_startindex2.txt b/tests/testdata/qgis_server/wfs_getfeature_startindex2.txt index 534f7a1..e506e12 100644 --- a/tests/testdata/qgis_server/wfs_getfeature_startindex2.txt +++ b/tests/testdata/qgis_server/wfs_getfeature_startindex2.txt @@ -13,9 +13,9 @@ Content-Type: text/xml; charset=utf-8 </gml:Box> </gml:boundedBy> <qgs:geometry> - <gml:Point srsName="EPSG:4326"> - <gml:coordinates cs="," ts=" ">8.20345931,44.90139484</gml:coordinates> - </gml:Point> + <Point xmlns="http://www.opengis.net/gml" srsName="EPSG:4326"> + <coordinates xmlns="http://www.opengis.net/gml" cs="," ts=" ">8.20345931,44.90139484</coordinates> + </Point> </qgs:geometry> <qgs:id>3</qgs:id> <qgs:name>three</qgs:name> -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/qgis.git _______________________________________________ Pkg-grass-devel mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-grass-devel

