33 lines
821 B
Python
33 lines
821 B
Python
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) |