@@ -745,6 +745,37 @@ class TestQgsExpression: public QObject
745
745
QVariant vYMax = exp9.evaluate ( &fPolygon );
746
746
QCOMPARE ( vYMax.toDouble (), 6.0 );
747
747
}
748
+
749
+ void eval_geometry_wkt ()
750
+ {
751
+ QgsPolyline polyline, polygon_ring;
752
+ polyline << QgsPoint ( 0 , 0 ) << QgsPoint ( 10 , 0 );
753
+ polygon_ring << QgsPoint ( 2 , 1 ) << QgsPoint ( 10 , 1 ) << QgsPoint ( 10 , 6 ) << QgsPoint ( 2 , 6 ) << QgsPoint ( 2 , 1 );
754
+
755
+ QgsPolygon polygon;
756
+ polygon << polygon_ring;
757
+
758
+ QgsFeature fPoint , fPolygon , fPolyline ;
759
+ fPoint .setGeometry ( QgsGeometry::fromPoint ( QgsPoint ( -1.23456789 , 9.87654321 ) ) );
760
+ fPolyline .setGeometry ( QgsGeometry::fromPolyline ( polyline ) );
761
+ fPolygon .setGeometry ( QgsGeometry::fromPolygon ( polygon ) );
762
+
763
+ QgsExpression exp1 ( " geomToWKT($geometry)" );
764
+ QVariant vWktLine = exp1.evaluate ( &fPolyline );
765
+ QCOMPARE ( vWktLine.toString (), QString ( " LINESTRING(0 0, 10 0)" ) );
766
+
767
+ QgsExpression exp2 ( " geomToWKT($geometry)" );
768
+ QVariant vWktPolygon = exp2.evaluate ( &fPolygon );
769
+ QCOMPARE ( vWktPolygon.toString (), QString ( " POLYGON((2 1,10 1,10 6,2 6,2 1))" ) );
770
+
771
+ QgsExpression exp3 ( " geomToWKT($geometry)" );
772
+ QVariant vWktPoint = exp3.evaluate ( &fPoint );
773
+ QCOMPARE ( vWktPoint.toString (), QString ( " POINT(-1.23456789 9.87654321)" ) );
774
+
775
+ QgsExpression exp4 ( " geomToWKT($geometry, 3)" );
776
+ QVariant vWktPointSimplify = exp4.evaluate ( &fPoint );
777
+ QCOMPARE ( vWktPointSimplify.toString (), QString ( " POINT(-1.235 9.877)" ) );
778
+ }
748
779
749
780
void eval_geometry_constructor_data ()
750
781
{
@@ -803,6 +834,64 @@ class TestQgsExpression: public QObject
803
834
QgsGeometry outGeom = out.value <QgsGeometry>();
804
835
QCOMPARE ( geom->equals ( &outGeom ), true );
805
836
}
837
+
838
+ void eval_geometry_access_transform_data ()
839
+ {
840
+ QTest::addColumn<QString>( " string" );
841
+ QTest::addColumn<void *>( " geomptr" );
842
+ QTest::addColumn<bool >( " evalError" );
843
+
844
+ QgsPoint point ( 123 , 456 );
845
+ QgsPolyline line;
846
+ line << QgsPoint ( 1 , 1 ) << QgsPoint ( 4 , 2 ) << QgsPoint ( 3 , 1 );
847
+
848
+ QgsPolyline polyline, polygon_ring;
849
+ polyline << QgsPoint ( 0 , 0 ) << QgsPoint ( 10 , 0 );
850
+ polygon_ring << QgsPoint ( 1 , 1 ) << QgsPoint ( 6 , 1 ) << QgsPoint ( 6 , 6 ) << QgsPoint ( 1 , 6 ) << QgsPoint ( 1 , 1 );
851
+ QgsPolygon polygon;
852
+ polygon << polygon_ring;
853
+
854
+ QTest::newRow ( " geometry Point" ) << " geometry( $currentfeature )" << ( void * ) QgsGeometry::fromPoint ( point ) << false ;
855
+ QTest::newRow ( " geometry Line" ) << " geometry( $currentfeature )" << ( void * ) QgsGeometry::fromPolyline ( line ) << false ;
856
+ QTest::newRow ( " geometry Polyline" ) << " geometry( $currentfeature )" << ( void * ) QgsGeometry::fromPolyline ( polyline ) << false ;
857
+ QTest::newRow ( " geometry Polygon" ) << " geometry( $currentfeature )" << ( void * ) QgsGeometry::fromPolygon ( polygon ) << false ;
858
+
859
+ QgsCoordinateReferenceSystem s;
860
+ s.createFromOgcWmsCrs ( " EPSG:4326" );
861
+ QgsCoordinateReferenceSystem d;
862
+ d.createFromOgcWmsCrs ( " EPSG:3857" );
863
+ QgsCoordinateTransform t ( s, d );
864
+
865
+ QgsGeometry* tLine = QgsGeometry::fromPolyline ( line );
866
+ tLine->transform ( t );
867
+ QgsGeometry* tPolygon = QgsGeometry::fromPolygon ( polygon );
868
+ tPolygon->transform ( t );
869
+
870
+ QTest::newRow ( " transform Line" ) << " transform( geomFromWKT('" + QgsGeometry::fromPolyline ( line )->exportToWkt () + " '), 'EPSG:4326', 'EPSG:3857' )" << ( void * ) tLine << false ;
871
+ QTest::newRow ( " transform Polygon" ) << " transform( geomFromWKT('" + QgsGeometry::fromPolygon ( polygon )->exportToWkt () + " '), 'EPSG:4326', 'EPSG:3857' )" << ( void * ) tPolygon << false ;
872
+ }
873
+
874
+ void eval_geometry_access_transform ()
875
+ {
876
+ QFETCH ( QString, string );
877
+ QFETCH ( void *, geomptr );
878
+ QFETCH ( bool , evalError );
879
+
880
+ QgsGeometry* geom = ( QgsGeometry* ) geomptr;
881
+
882
+ QgsFeature f;
883
+ f.setGeometry ( geom );
884
+
885
+ QgsExpression exp ( string );
886
+ QCOMPARE ( exp.hasParserError (), false );
887
+ QCOMPARE ( exp.needsGeometry (), false );
888
+ QVariant out = exp.evaluate ( &f );
889
+ QCOMPARE ( exp.hasEvalError (), evalError );
890
+
891
+ QCOMPARE ( out.canConvert <QgsGeometry>(), true );
892
+ QgsGeometry outGeom = out.value <QgsGeometry>();
893
+ QCOMPARE ( geom->equals ( &outGeom ), true );
894
+ }
806
895
807
896
void eval_spatial_operator_data ()
808
897
{
0 commit comments