Skip to content

Commit

Permalink
[WFS] Add test for @geometry in filter expression
Browse files Browse the repository at this point in the history
  • Loading branch information
agiudiceandrea authored Jan 9, 2025
1 parent ae482b6 commit 03f5c38
Showing 1 changed file with 95 additions and 7 deletions.
102 changes: 95 additions & 7 deletions tests/src/core/testqgsogcutils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -733,26 +733,48 @@ void TestQgsOgcUtils::testExpressionToOgcFilter_data()
"</ogc:Not>"
"</ogc:Filter>" );

QTest::newRow( "intersects_bbox" ) << QStringLiteral( "intersects_bbox($geometry, geomFromWKT('POINT (5 6)'))" ) << QString( "<ogc:Filter xmlns:ogc=\"http://www.opengis.net/ogc\" xmlns:gml=\"http://www.opengis.net/gml\">"
QTest::newRow( "intersects_bbox $geometry" ) << QStringLiteral( "intersects_bbox($geometry, geomFromWKT('POINT (5 6)'))" ) << QString( "<ogc:Filter xmlns:ogc=\"http://www.opengis.net/ogc\" xmlns:gml=\"http://www.opengis.net/gml\">"
"<ogc:BBOX>"
"<ogc:PropertyName>geometry</ogc:PropertyName>"
"<gml:Box><gml:coordinates ts=\" \" cs=\",\">5,6 5,6</gml:coordinates></gml:Box>"
"</ogc:BBOX>"
"</ogc:Filter>" );

QTest::newRow( "intersects + wkt" ) << QStringLiteral( "intersects($geometry, geomFromWKT('POINT (5 6)'))" ) << QString( "<ogc:Filter xmlns:ogc=\"http://www.opengis.net/ogc\" xmlns:gml=\"http://www.opengis.net/gml\">"
QTest::newRow( "intersects + wkt $geometry" ) << QStringLiteral( "intersects($geometry, geomFromWKT('POINT (5 6)'))" ) << QString( "<ogc:Filter xmlns:ogc=\"http://www.opengis.net/ogc\" xmlns:gml=\"http://www.opengis.net/gml\">"
"<ogc:Intersects>"
"<ogc:PropertyName>geometry</ogc:PropertyName>"
"<gml:Point><gml:coordinates ts=\" \" cs=\",\">5,6</gml:coordinates></gml:Point>"
"</ogc:Intersects>"
"</ogc:Filter>" );

QTest::newRow( "contains + gml" ) << QStringLiteral( "contains($geometry, geomFromGML('<Point><coordinates cs=\",\" ts=\" \">5,6</coordinates></Point>'))" ) << QString( "<ogc:Filter xmlns:ogc=\"http://www.opengis.net/ogc\" xmlns:gml=\"http://www.opengis.net/gml\">"
QTest::newRow( "contains + gml $geometry" ) << QStringLiteral( "contains($geometry, geomFromGML('<Point><coordinates cs=\",\" ts=\" \">5,6</coordinates></Point>'))" ) << QString( "<ogc:Filter xmlns:ogc=\"http://www.opengis.net/ogc\" xmlns:gml=\"http://www.opengis.net/gml\">"
"<ogc:Contains>"
"<ogc:PropertyName>geometry</ogc:PropertyName>"
"<Point><coordinates ts=\" \" cs=\",\">5,6</coordinates></Point>"
"</ogc:Contains>"
"</ogc:Filter>" );

QTest::newRow( "intersects_bbox @geometry" ) << QStringLiteral( "intersects_bbox(@geometry, geomFromWKT('POINT (5 6)'))" ) << QString( "<ogc:Filter xmlns:ogc=\"http://www.opengis.net/ogc\" xmlns:gml=\"http://www.opengis.net/gml\">"
"<ogc:BBOX>"
"<ogc:PropertyName>geometry</ogc:PropertyName>"
"<gml:Box><gml:coordinates ts=\" \" cs=\",\">5,6 5,6</gml:coordinates></gml:Box>"
"</ogc:BBOX>"
"</ogc:Filter>" );

QTest::newRow( "intersects + wkt @geometry" ) << QStringLiteral( "intersects(@geometry, geomFromWKT('POINT (5 6)'))" ) << QString( "<ogc:Filter xmlns:ogc=\"http://www.opengis.net/ogc\" xmlns:gml=\"http://www.opengis.net/gml\">"
"<ogc:Intersects>"
"<ogc:PropertyName>geometry</ogc:PropertyName>"
"<gml:Point><gml:coordinates ts=\" \" cs=\",\">5,6</gml:coordinates></gml:Point>"
"</ogc:Intersects>"
"</ogc:Filter>" );

QTest::newRow( "contains + gml @geometry" ) << QStringLiteral( "contains(@geometry, geomFromGML('<Point><coordinates cs=\",\" ts=\" \">5,6</coordinates></Point>'))" ) << QString( "<ogc:Filter xmlns:ogc=\"http://www.opengis.net/ogc\" xmlns:gml=\"http://www.opengis.net/gml\">"
"<ogc:Contains>"
"<ogc:PropertyName>geometry</ogc:PropertyName>"
"<Point><coordinates ts=\" \" cs=\",\">5,6</coordinates></Point>"
"</ogc:Contains>"
"</ogc:Filter>" );

}

void TestQgsOgcUtils::testExpressionToOgcFilterWFS11()
Expand Down Expand Up @@ -791,7 +813,7 @@ void TestQgsOgcUtils::testExpressionToOgcFilterWFS11_data()
QTest::addColumn<QString>( "srsName" );
QTest::addColumn<QString>( "xmlText" );

QTest::newRow( "bbox" )
QTest::newRow( "bbox $geometry" )
<< QStringLiteral( "intersects_bbox($geometry, geomFromWKT('POLYGON((2 49,2 50,3 50,3 49,2 49))'))" )
<< QStringLiteral( "urn:ogc:def:crs:EPSG::4326" )
<< QString(
Expand All @@ -805,6 +827,21 @@ void TestQgsOgcUtils::testExpressionToOgcFilterWFS11_data()
"</ogc:BBOX>"
"</ogc:Filter>"
);

QTest::newRow( "bbox @geometry" )
<< QStringLiteral( "intersects_bbox(@geometry, geomFromWKT('POLYGON((2 49,2 50,3 50,3 49,2 49))'))" )
<< QStringLiteral( "urn:ogc:def:crs:EPSG::4326" )
<< QString(
"<ogc:Filter xmlns:ogc=\"http://www.opengis.net/ogc\" xmlns:gml=\"http://www.opengis.net/gml\">"
"<ogc:BBOX>"
"<ogc:PropertyName>my_geometry_name</ogc:PropertyName>"
"<gml:Envelope srsName=\"urn:ogc:def:crs:EPSG::4326\">"
"<gml:lowerCorner>49 2</gml:lowerCorner>"
"<gml:upperCorner>50 3</gml:upperCorner>"
"</gml:Envelope>"
"</ogc:BBOX>"
"</ogc:Filter>"
);
}

void TestQgsOgcUtils::testExpressionToOgcFilterWFS20()
Expand Down Expand Up @@ -860,7 +897,7 @@ void TestQgsOgcUtils::testExpressionToOgcFilterWFS20_data()
"</fes:PropertyIsEqualTo></fes:Filter>" )
<< QStringLiteral( "myns" ) << QStringLiteral( "http://example.com/myns" );

QTest::newRow( "bbox" )
QTest::newRow( "bbox $geometry" )
<< QStringLiteral( "intersects_bbox($geometry, geomFromWKT('POLYGON((2 49,2 50,3 50,3 49,2 49))'))" )
<< QStringLiteral( "urn:ogc:def:crs:EPSG::4326" )
<< QString(
Expand All @@ -876,7 +913,7 @@ void TestQgsOgcUtils::testExpressionToOgcFilterWFS20_data()
)
<< QString() << QString();

QTest::newRow( "bbox with namespace" )
QTest::newRow( "bbox with namespace $geometry" )
<< QStringLiteral( "intersects_bbox($geometry, geomFromWKT('POLYGON((2 49,2 50,3 50,3 49,2 49))'))" )
<< QStringLiteral( "urn:ogc:def:crs:EPSG::4326" )
<< QString(
Expand All @@ -892,7 +929,7 @@ void TestQgsOgcUtils::testExpressionToOgcFilterWFS20_data()
)
<< QStringLiteral( "myns" ) << QStringLiteral( "http://example.com/myns" );

QTest::newRow( "intersects" )
QTest::newRow( "intersects $geometry" )
<< QStringLiteral( "intersects($geometry, geomFromWKT('POLYGON((2 49,2 50,3 50,3 49,2 49))'))" )
<< QStringLiteral( "urn:ogc:def:crs:EPSG::4326" )
<< QString(
Expand All @@ -910,6 +947,57 @@ void TestQgsOgcUtils::testExpressionToOgcFilterWFS20_data()
"</fes:Filter>"
)
<< QString() << QString();

QTest::newRow( "bbox @geometry" )
<< QStringLiteral( "intersects_bbox(@geometry, geomFromWKT('POLYGON((2 49,2 50,3 50,3 49,2 49))'))" )
<< QStringLiteral( "urn:ogc:def:crs:EPSG::4326" )
<< QString(
"<fes:Filter xmlns:fes=\"http://www.opengis.net/fes/2.0\" xmlns:gml=\"http://www.opengis.net/gml/3.2\">"
"<fes:BBOX>"
"<fes:ValueReference>my_geometry_name</fes:ValueReference>"
"<gml:Envelope srsName=\"urn:ogc:def:crs:EPSG::4326\">"
"<gml:lowerCorner>49 2</gml:lowerCorner>"
"<gml:upperCorner>50 3</gml:upperCorner>"
"</gml:Envelope>"
"</fes:BBOX>"
"</fes:Filter>"
)
<< QString() << QString();

QTest::newRow( "bbox with namespace @geometry" )
<< QStringLiteral( "intersects_bbox(@geometry, geomFromWKT('POLYGON((2 49,2 50,3 50,3 49,2 49))'))" )
<< QStringLiteral( "urn:ogc:def:crs:EPSG::4326" )
<< QString(
"<fes:Filter xmlns:fes=\"http://www.opengis.net/fes/2.0\" xmlns:gml=\"http://www.opengis.net/gml/3.2\" xmlns:myns=\"http://example.com/myns\">"
"<fes:BBOX>"
"<fes:ValueReference>myns:my_geometry_name</fes:ValueReference>"
"<gml:Envelope srsName=\"urn:ogc:def:crs:EPSG::4326\">"
"<gml:lowerCorner>49 2</gml:lowerCorner>"
"<gml:upperCorner>50 3</gml:upperCorner>"
"</gml:Envelope>"
"</fes:BBOX>"
"</fes:Filter>"
)
<< QStringLiteral( "myns" ) << QStringLiteral( "http://example.com/myns" );

QTest::newRow( "intersects @geometry" )
<< QStringLiteral( "intersects(@geometry, geomFromWKT('POLYGON((2 49,2 50,3 50,3 49,2 49))'))" )
<< QStringLiteral( "urn:ogc:def:crs:EPSG::4326" )
<< QString(
"<fes:Filter xmlns:fes=\"http://www.opengis.net/fes/2.0\" xmlns:gml=\"http://www.opengis.net/gml/3.2\">"
"<fes:Intersects>"
"<fes:ValueReference>my_geometry_name</fes:ValueReference>"
"<gml:Polygon gml:id=\"qgis_id_geom_1\" srsName=\"urn:ogc:def:crs:EPSG::4326\">"
"<gml:exterior>"
"<gml:LinearRing>"
"<gml:posList srsDimension=\"2\">49 2 50 2 50 3 49 3 49 2</gml:posList>"
"</gml:LinearRing>"
"</gml:exterior>"
"</gml:Polygon>"
"</fes:Intersects>"
"</fes:Filter>"
)
<< QString() << QString();
}

Q_DECLARE_METATYPE( QgsOgcUtils::GMLVersion )
Expand Down

0 comments on commit 03f5c38

Please sign in to comment.