@@ -190,9 +190,9 @@ def _as_geojson(self, elements):
190190
191191 features = []
192192 geometry = None
193- no_match_count = 0
194193 for elem in elements :
195194 elem_type = elem .get ("type" )
195+ elem_tags = elem .get ("tags" )
196196 if elem_type and elem_type == "node" :
197197 geometry = geojson .Point ((elem .get ("lon" ), elem .get ("lat" )))
198198 elif elem_type and elem_type == "way" :
@@ -218,17 +218,21 @@ def _as_geojson(self, elements):
218218 # also sometimes the next member may not actually connect to the previous member, so if necessary,
219219 # find a matching member
220220 if points :
221- dist_start = (points [- 1 ][0 ] - mem ["geometry" ][0 ]["lon" ])** 2 + (points [- 1 ][1 ] - mem ["geometry" ][0 ]["lat" ])** 2
222- dist_end = (points [- 1 ][0 ] - mem ["geometry" ][- 1 ]["lon" ])** 2 + (points [- 1 ][1 ] - mem ["geometry" ][- 1 ]["lat" ])** 2
221+ dist_start = (points [- 1 ][0 ] - mem ["geometry" ][0 ]["lon" ]) ** 2 + (
222+ points [- 1 ][1 ] - mem ["geometry" ][0 ]["lat" ]) ** 2
223+ dist_end = (points [- 1 ][0 ] - mem ["geometry" ][- 1 ]["lon" ]) ** 2 + (
224+ points [- 1 ][1 ] - mem ["geometry" ][- 1 ]["lat" ]) ** 2
223225 if dist_start == 0 :
224226 pass # don't need to do anything
225227 elif dist_end == 0 :
226228 # flip the next member - it is entered in the wrong direction
227229 mem ["geometry" ] = list (reversed (mem ["geometry" ]))
228230 else :
229231 # try flipping the previous member
230- dist_flipped_start = (points [0 ][0 ] - mem ["geometry" ][0 ]["lon" ])** 2 + (points [0 ][1 ] - mem ["geometry" ][0 ]["lat" ])** 2
231- dist_flipped_end = (points [0 ][0 ] - mem ["geometry" ][- 1 ]["lon" ])** 2 + (points [0 ][1 ] - mem ["geometry" ][- 1 ]["lat" ])** 2
232+ dist_flipped_start = (points [0 ][0 ] - mem ["geometry" ][0 ]["lon" ]) ** 2 + (
233+ points [0 ][1 ] - mem ["geometry" ][0 ]["lat" ]) ** 2
234+ dist_flipped_end = (points [0 ][0 ] - mem ["geometry" ][- 1 ]["lon" ]) ** 2 + (
235+ points [0 ][1 ] - mem ["geometry" ][- 1 ]["lat" ]) ** 2
232236 if dist_flipped_start == 0 :
233237 # just flip the start
234238 points = list (reversed (points ))
@@ -242,24 +246,22 @@ def _as_geojson(self, elements):
242246 for i in range (pos + 1 , len (elem ['members' ])):
243247 if not point_found :
244248 new_pt = elem ['members' ][i ]
245- dist_start = (new_pt ['geometry' ][0 ]['lon' ] - points [- 1 ][0 ])** 2 + (new_pt ['geometry' ][0 ]['lat' ] - points [- 1 ][1 ])** 2
246- dist_end = (new_pt ['geometry' ][- 1 ]['lon' ] - points [- 1 ][0 ])** 2 + (new_pt ['geometry' ][- 1 ]['lat' ] - points [- 1 ][1 ])** 2
249+ dist_start = (new_pt ['geometry' ][0 ]['lon' ] - points [- 1 ][0 ]) ** 2 + (
250+ new_pt ['geometry' ][0 ]['lat' ] - points [- 1 ][1 ]) ** 2
251+ dist_end = (new_pt ['geometry' ][- 1 ]['lon' ] - points [- 1 ][0 ]) ** 2 + (
252+ new_pt ['geometry' ][- 1 ]['lat' ] - points [- 1 ][1 ]) ** 2
247253
248254 if dist_start == 0 or dist_end == 0 :
249255 point_found = True
250256 # swap the order of the members -- we have found the one we want
251- elem ['members' ][pos ], elem ['members' ][i ] = elem ['members' ][i ], elem ['members' ][pos ]
257+ elem ['members' ][pos ], elem ['members' ][i ] = elem ['members' ][i ], \
258+ elem ['members' ][pos ]
252259 # save this new point as mem
253260 mem = elem ['members' ][pos ]
254261
255262 if dist_end == 0 :
256263 mem ['geometry' ] = list (reversed (mem ['geometry' ]))
257264
258- if not point_found :
259- no_match_count += 1
260- # don't work with this park
261- continue
262-
263265 # address outer values
264266 if mem ['role' ] == 'outer' :
265267 if prev == "inner" :
@@ -293,7 +295,7 @@ def _as_geojson(self, elements):
293295 if points [- 1 ] == points [0 ]:
294296 poly .append (points )
295297 points = []
296- # update conditoin
298+ # update condition
297299 prev = "inner"
298300
299301 not_first = True
@@ -302,30 +304,16 @@ def _as_geojson(self, elements):
302304 polygons .append (poly )
303305
304306 if polygons != [[]]:
305- # create MultiPolygon feature - separate multipolygon for each outer
306- for outer_poly in polygons :
307- poly_props = elem .get ("tags" )
308- poly_props .update ({'id' : elem ['id' ]})
309- multipoly = {
310- "type" : "Feature" ,
311- "properties" : poly_props ,
312- "geometry" : {
313- "type" : "MultiPolygon" ,
314- "coordinates" : [outer_poly ]
315- }
316- }
317- # add to features
318- features .append (multipoly )
307+ geometry = geojson .MultiPolygon (polygons )
319308 else :
320309 continue
321310
322- if elem_type and ( elem_type == "node" or elem_type == "way" ) :
311+ if geometry :
323312 feature = geojson .Feature (
324313 id = elem ["id" ],
325314 geometry = geometry ,
326- properties = elem . get ( "tags" )
315+ properties = elem_tags
327316 )
328317 features .append (feature )
329-
330- # print('number of unmatched parks: {}'.format(no_match_count))
318+
331319 return geojson .FeatureCollection (features )
0 commit comments