import json import pyproj from shapely.geometry import LineString, mapping from shapely.ops import transform from functools import partial from analysis.util import json_path def distance(track): project = partial( pyproj.transform, pyproj.Proj(init='EPSG:4326'), pyproj.Proj(init='EPSG:32633')) return transform(project, track).length def json_to_track(geojson, path, load=True): if load: geojson = json.loads(geojson) return LineString(json_path(geojson, path)) def calc_distance(geojson: str, path="coordinates", load=True): track = json_to_track(geojson, path, load) return distance(track) def calc_distance_simplified(geojson, path="coordinates", load=True): track = json_to_track(geojson, path, load) simplified = track.simplify(0.0002, preserve_topology=True) return distance(simplified)