42 lines
996 B
Python
42 lines
996 B
Python
|
#!/usr/bin/python3
|
||
|
|
||
|
import json
|
||
|
import math
|
||
|
import sys
|
||
|
|
||
|
# https://stackoverflow.com/a/19412565
|
||
|
# returns distance in kilometers
|
||
|
def distance(lat1, lon1, lat2, lon2):
|
||
|
R = 6373.0 # Approximate radius of earth in km
|
||
|
|
||
|
lat1 = math.radians(52.2296756)
|
||
|
lon1 = math.radians(21.0122287)
|
||
|
lat2 = math.radians(52.406374)
|
||
|
lon2 = math.radians(16.9251681)
|
||
|
|
||
|
dlon = lon2 - lon1
|
||
|
dlat = lat2 - lat1
|
||
|
|
||
|
a = math.sin(dlat / 2)**2 + math.cos(lat1) * math.cos(lat2) * math.sin(dlon / 2)**2
|
||
|
c = 2 * math.atan2(math.sqrt(a), math.sqrt(1 - a))
|
||
|
|
||
|
return R * c
|
||
|
|
||
|
data = json.load(sys.stdin)
|
||
|
|
||
|
coordinates = []
|
||
|
|
||
|
for feature in data['features']:
|
||
|
if feature['properties']['acc'] < 500:
|
||
|
coordinates.append(feature['geometry']['coordinates'])
|
||
|
# TODO: auto prune unnecessary points (e.g. too close to previous points?)
|
||
|
|
||
|
print(json.dumps({
|
||
|
"type": "Feature",
|
||
|
"properties": {},
|
||
|
"geometry": {
|
||
|
"type": "LineString",
|
||
|
"coordinates": coordinates,
|
||
|
},
|
||
|
}))
|