59 lines
1.2 KiB
Python
59 lines
1.2 KiB
Python
|
#!/bin/python3
|
||
|
|
||
|
import osmapi
|
||
|
import itertools
|
||
|
import math
|
||
|
# import pickle
|
||
|
# import os
|
||
|
|
||
|
OSM_KOGGENLAND_ID = 161930
|
||
|
PICKLE_FILE = 'koggenland.pickle'
|
||
|
|
||
|
|
||
|
def chunks(lst, n):
|
||
|
"""Yield successive n-sized chunks from lst."""
|
||
|
for i in range(0, len(lst), n):
|
||
|
yield lst[i:i + n]
|
||
|
|
||
|
|
||
|
def flatten(lst):
|
||
|
return list(itertools.chain(*lst))
|
||
|
|
||
|
|
||
|
def main():
|
||
|
osm_api = osmapi.OsmApi()
|
||
|
koggenland = osm_api.RelationFullRecur(OSM_KOGGENLAND_ID)
|
||
|
node_ids = list(map(lambda a: a['data']['id'], filter(
|
||
|
lambda a: a['type'] == 'node', koggenland)))
|
||
|
|
||
|
coords = []
|
||
|
for chunk in chunks(node_ids, 100):
|
||
|
coords += map(lambda a: (a['lat'], a['lon']),
|
||
|
osm_api.NodesGet(chunk).values())
|
||
|
|
||
|
cx, cy = 0., 0.
|
||
|
for (x, y) in coords:
|
||
|
cx += x
|
||
|
cy += y
|
||
|
cx /= len(coords)
|
||
|
cy /= len(coords)
|
||
|
|
||
|
print('centre', (cx, cy))
|
||
|
|
||
|
# 7KM radius (eye-balled)
|
||
|
|
||
|
# max_coord = None
|
||
|
# max_dist = 0
|
||
|
|
||
|
# for (x, y) in coords:
|
||
|
# dist = math.sqrt((cx - x)**2 + (cy - y)**2)
|
||
|
# if dist > max_dist:
|
||
|
# max_dist = dist
|
||
|
# max_coord = (x, y)
|
||
|
|
||
|
# print('max', max_coord)
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
main()
|