@@ -41,8 +41,15 @@ class TestQgsGeometry: public QObject
41
41
void cleanup ();// will be called after every testfunction.
42
42
43
43
void intersectionCheck ();
44
- void unionCheck ();
44
+ void unionCheck1 ();
45
+ void unionCheck2 ();
45
46
private:
47
+ /* * A helper method to return wkb geometry type as a string */
48
+ QString wkbTypeAsString ( QGis::WKBTYPE theType );
49
+ /* * A helper method to dump to qdebug the geometry of a multipolygon */
50
+ void dumpMultiPolygon ( QgsMultiPolygon &theMultiPolygon );
51
+ /* * A helper method to dump to qdebug the geometry of a polygon */
52
+ void dumpPolygon ( QgsPolygon &thePolygon );
46
53
QgsPoint mPoint1 ;
47
54
QgsPoint mPoint2 ;
48
55
QgsPoint mPoint3 ;
@@ -87,6 +94,12 @@ void TestQgsGeometry::init()
87
94
mPointY = QgsPoint (1040.0 ,1040.0 );
88
95
mPointZ = QgsPoint (1000.0 ,1040.0 );
89
96
97
+ mPolygonA .clear ();
98
+ mPolygonB .clear ();
99
+ mPolygonC .clear ();
100
+ mPolylineA .clear ();
101
+ mPolylineB .clear ();
102
+ mPolylineC .clear ();
90
103
mPolylineA << mPoint1 << mPoint2 << mPoint3 << mPoint4 << mPoint1 ;
91
104
mPolygonA << mPolylineA ;
92
105
// Polygon B intersects Polygon A
@@ -137,23 +150,87 @@ void TestQgsGeometry::intersectionCheck()
137
150
QVERIFY ( !mpPolygonGeometryA->intersects (mpPolygonGeometryC));
138
151
}
139
152
140
- void TestQgsGeometry::unionCheck ()
153
+ void TestQgsGeometry::unionCheck1 ()
141
154
{
142
-
143
- // should be no union as A does not intersect C
155
+ // should be a multipolygon with 2 parts as A does not intersect C
144
156
QgsGeometry * mypUnionGeometry = mpPolygonGeometryA->Union (mpPolygonGeometryC);
145
- QgsPolyline myPolyline = mypUnionGeometry->asPolyline ();
146
- QVERIFY (myPolyline.size () == 0 ); // check that the union failed properly
147
- // should be a union as A intersect B
148
- mypUnionGeometry = mpPolygonGeometryA->Union (mpPolygonGeometryB);
149
- myPolyline = mypUnionGeometry->asPolyline ();
150
- QVERIFY (myPolyline.size () > 0 ); // check that the union created a feature
151
- for (int i = 0 ; i < myPolyline.size (); i++)
157
+ qDebug (" Geometry Type: " + wkbTypeAsString (mypUnionGeometry->wkbType ()).toLocal8Bit ());
158
+ QVERIFY (mypUnionGeometry->wkbType () == QGis::WKBMultiPolygon);
159
+ QgsMultiPolygon myMultiPolygon = mypUnionGeometry->asMultiPolygon ();
160
+ QVERIFY (myMultiPolygon.size () > 0 ); // check that the union did not fail
161
+ dumpMultiPolygon (myMultiPolygon);
162
+ }
163
+ void TestQgsGeometry::unionCheck2 ()
164
+ {
165
+ // should be a single polygon as A intersect B
166
+ QgsGeometry * mypUnionGeometry = mpPolygonGeometryA->Union (mpPolygonGeometryB);
167
+ qDebug (" Geometry Type: " + wkbTypeAsString (mypUnionGeometry->wkbType ()).toLocal8Bit ());
168
+ QVERIFY (mypUnionGeometry->wkbType () == QGis::WKBPolygon);
169
+ QgsPolygon myPolygon = mypUnionGeometry->asPolygon ();
170
+ QVERIFY (myPolygon.size () > 0 ); // check that the union created a feature
171
+ dumpPolygon (myPolygon);
172
+ delete mypUnionGeometry;
173
+ }
174
+
175
+ void TestQgsGeometry::dumpMultiPolygon ( QgsMultiPolygon &theMultiPolygon )
176
+ {
177
+ qDebug (" Multipolygon Geometry Dump" );
178
+ for (int i = 0 ; i < theMultiPolygon.size (); i++)
152
179
{
153
- QgsPoint myPoint = myPolyline.at (i);
154
- qDebug (myPoint.stringRep ().toLocal8Bit ());
180
+ QgsPolygon myPolygon = theMultiPolygon.at (i);
181
+ qDebug (" \t Polygon in multipolygon: " + QString::number (i).toLocal8Bit ());
182
+ dumpPolygon (myPolygon);
183
+ }
184
+ }
185
+
186
+ void TestQgsGeometry::dumpPolygon ( QgsPolygon &thePolygon )
187
+ {
188
+ for ( int j = 0 ; j < thePolygon.size (); j++ )
189
+ {
190
+ QgsPolyline myPolyline = thePolygon.at ( j ); // rings of polygon
191
+ qDebug ( " \t\t Ring in polygon: " + QString::number ( j ).toLocal8Bit () );
192
+
193
+ for ( int k = 0 ; k < myPolyline.size (); k++ )
194
+ {
195
+ QgsPoint myPoint = myPolyline.at ( k );
196
+ qDebug ( " \t\t\t Point in ring " + QString::number ( k ).toLocal8Bit () + " :" + myPoint.stringRep ().toLocal8Bit () );
197
+ }
198
+ }
199
+ }
200
+
201
+ QString TestQgsGeometry::wkbTypeAsString ( QGis::WKBTYPE theType )
202
+ {
203
+ switch ( theType )
204
+ {
205
+ case QGis::WKBPoint:
206
+ return " WKBPoint" ;
207
+ case QGis::WKBLineString:
208
+ return " WKBLineString" ;
209
+ case QGis::WKBPolygon:
210
+ return " WKBPolygon" ;
211
+ case QGis::WKBMultiPoint:
212
+ return " WKBMultiPoint" ;
213
+ case QGis::WKBMultiLineString:
214
+ return " WKBMultiLineString" ;
215
+ case QGis::WKBMultiPolygon:
216
+ return " WKBMultiPolygon" ;
217
+ case QGis::WKBUnknown:
218
+ return " WKBUnknown" ;
219
+ case QGis::WKBPoint25D:
220
+ return " WKBPoint25D" ;
221
+ case QGis::WKBLineString25D:
222
+ return " WKBLineString25D" ;
223
+ case QGis::WKBPolygon25D:
224
+ return " WKBPolygon25D" ;
225
+ case QGis::WKBMultiPoint25D:
226
+ return " WKBMultiPoint25D" ;
227
+ case QGis::WKBMultiLineString25D:
228
+ return " WKBMultiLineString25D" ;
229
+ case QGis::WKBMultiPolygon25D:
230
+ return " WKBMultiPolygon25D" ;
231
+ default :
232
+ return " Unknown type" ;
155
233
}
156
- delete mypUnionGeometry;
157
234
}
158
235
159
236
QTEST_MAIN (TestQgsGeometry)
0 commit comments