gc_area/find_centre.py
2023-08-27 12:37:43 +02:00

58 lines
1.2 KiB
Python
Executable file

#!/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()