@@ -206,28 +206,37 @@ def _as_geojson(self, elements):
206
206
# First obtain the outer polygons
207
207
for member in elem .get ("members" , []):
208
208
if member ["role" ] == "outer" :
209
- points = [(coords ["lon" ], coords ["lat" ]) for coords in member .get (' geometry' , [])]
209
+ points = [(coords ["lon" ], coords ["lat" ]) for coords in member .get (" geometry" , [])]
210
210
# Check that the outer polygon is complete
211
211
if points and points [- 1 ] == points [0 ]:
212
212
polygons .append ([points ])
213
+ else :
214
+ raise UnknownOverpassError ("Received corrupt data from Overpass (incomplete polygon)." )
213
215
# Then get the inner polygons
214
216
for member in elem .get ("members" , []):
215
217
if member ["role" ] == "inner" :
216
- points = [(coords ["lon" ], coords ["lat" ]) for coords in member .get (' geometry' , [])]
218
+ points = [(coords ["lon" ], coords ["lat" ]) for coords in member .get (" geometry" , [])]
217
219
# Check that the inner polygon is complete
218
220
if points and points [- 1 ] == points [0 ]:
219
221
# We need to check to which outer polygon the inner polygon belongs
220
222
point = Point (points [0 ])
223
+ check = False
221
224
for poly in polygons :
222
225
polygon = Polygon (poly [0 ])
223
226
if polygon .contains (point ):
224
227
poly .append (points )
228
+ check = True
225
229
break
230
+ if not check :
231
+ raise UnknownOverpassError ("Received corrupt data from Overpass (inner polygon cannot "
232
+ "be matched to outer polygon)." )
233
+ else :
234
+ raise UnknownOverpassError ("Received corrupt data from Overpass (incomplete polygon)." )
226
235
# Finally create MultiPolygon geometry
227
236
if polygons :
228
237
geometry = geojson .MultiPolygon (polygons )
229
238
else :
230
- continue
239
+ raise UnknownOverpassError ( "Received corrupt data from Overpass (invalid element)." )
231
240
232
241
if geometry :
233
242
feature = geojson .Feature (
0 commit comments