@@ -206,28 +206,37 @@ def _as_geojson(self, elements):
206206 # First obtain the outer polygons
207207 for member in elem .get ("members" , []):
208208 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" , [])]
210210 # Check that the outer polygon is complete
211211 if points and points [- 1 ] == points [0 ]:
212212 polygons .append ([points ])
213+ else :
214+ raise UnknownOverpassError ("Received corrupt data from Overpass (incomplete polygon)." )
213215 # Then get the inner polygons
214216 for member in elem .get ("members" , []):
215217 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" , [])]
217219 # Check that the inner polygon is complete
218220 if points and points [- 1 ] == points [0 ]:
219221 # We need to check to which outer polygon the inner polygon belongs
220222 point = Point (points [0 ])
223+ check = False
221224 for poly in polygons :
222225 polygon = Polygon (poly [0 ])
223226 if polygon .contains (point ):
224227 poly .append (points )
228+ check = True
225229 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)." )
226235 # Finally create MultiPolygon geometry
227236 if polygons :
228237 geometry = geojson .MultiPolygon (polygons )
229238 else :
230- continue
239+ raise UnknownOverpassError ( "Received corrupt data from Overpass (invalid element)." )
231240
232241 if geometry :
233242 feature = geojson .Feature (
0 commit comments