33# which is licensed under Apache 2.0.
44# See LICENSE.txt for the full license text.
55
6- import requests
7- import json
86import csv
9- import geojson
7+ import json
108import logging
119import re
1210from datetime import datetime
13- from shapely .geometry import Polygon , Point
1411from io import StringIO
12+
13+ import geojson
14+ import requests
15+ from shapely .geometry import Point , Polygon
16+
1517from .errors import (
16- OverpassSyntaxError ,
17- TimeoutError ,
1818 MultipleRequestsError ,
19+ OverpassSyntaxError ,
1920 ServerLoadError ,
20- UnknownOverpassError ,
2121 ServerRuntimeError ,
22+ TimeoutError ,
23+ UnknownOverpassError ,
2224)
2325
2426
@@ -110,14 +112,10 @@ def get(self, query, responseformat="geojson", verbosity="body", build=True, dat
110112 if self .debug :
111113 print (content_type )
112114 if content_type == "text/csv" :
113- result = []
114- reader = csv .reader (StringIO (r .text ), delimiter = "\t " )
115- for row in reader :
116- result .append (row )
117- return result
115+ return list (csv .reader (StringIO (r .text ), delimiter = "\t " ))
118116 elif content_type in ("text/xml" , "application/xml" , "application/osm3s+xml" ):
119117 return r .text
120- elif content_type == "application/json" :
118+ else :
121119 response = json .loads (r .text )
122120
123121 if not build :
@@ -133,7 +131,7 @@ def get(self, query, responseformat="geojson", verbosity="body", build=True, dat
133131 if overpass_remark and overpass_remark .startswith ("runtime error" ):
134132 raise ServerRuntimeError (overpass_remark )
135133
136- if responseformat is not "geojson" :
134+ if responseformat != "geojson" :
137135 return response
138136
139137 # construct geojson
@@ -301,21 +299,18 @@ def _as_geojson(self, elements):
301299 if member ["role" ] == "inner" :
302300 points = [(coords ["lon" ], coords ["lat" ]) for coords in member .get ("geometry" , [])]
303301 # Check that the inner polygon is complete
304- if points and points [- 1 ] == points [0 ]:
305- # We need to check to which outer polygon the inner polygon belongs
306- point = Point (points [0 ])
307- check = False
308- for poly in polygons :
309- polygon = Polygon (poly [0 ])
310- if polygon .contains (point ):
311- poly .append (points )
312- check = True
313- break
314- if not check :
315- raise UnknownOverpassError ("Received corrupt data from Overpass (inner polygon cannot "
316- "be matched to outer polygon)." )
317- else :
302+ if not points or points [- 1 ] != points [0 ]:
318303 raise UnknownOverpassError ("Received corrupt data from Overpass (incomplete polygon)." )
304+ # We need to check to which outer polygon the inner polygon belongs
305+ point = Point (points [0 ])
306+ for poly in polygons :
307+ polygon = Polygon (poly [0 ])
308+ if polygon .contains (point ):
309+ poly .append (points )
310+ break
311+ else :
312+ raise UnknownOverpassError ("Received corrupt data from Overpass (inner polygon cannot "
313+ "be matched to outer polygon)." )
319314 # Finally create MultiPolygon geometry
320315 if polygons :
321316 geometry = geojson .MultiPolygon (polygons )
0 commit comments