我有几条要分析的(25 * 10)GPX循环轨迹(距离,最大速度,加速度等)是从Runkeeper获得的。问题在于数据包含重大错误,数据点位于字段而不是道路上。我是地理空间分析的新手,因此我意识到,诸如geopandas和shapely之类的软件包存在,但是我不知道要一直使用哪些软件包
我的主要问题的解决方案似乎与Schuessler,N.和K.W. Axhausen(2009):使用多重假设技术(https://www.ethz.ch/content/dam/ethz/special-interest/baug/ivt/ivt-dam/vpl/reports/501-600/ab568.pdf
的高分辨率导航网络上GPS轨迹的地图匹配)到目前为止,我最接近下载,绘制和分析地图数据的是使用osmnx软件包,它避免了使用付费服务(例如Google的snap-to-road feature一次只能处理100点)。我已经使用gpxpy将GPX数据转换为熊猫数据帧,这为我提供了一个包含时间,纬度,经度和海拔数据的df。
我想将显然不正确的每个GPX点(道路宽度+公差例如20 m)捕捉到道路(=边)。我的问题是,我对osmnx软件包的理解不够充分,无法完成我想做的事情。
当我这样做
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import gpxpy
import osmnx as ox
ox.config(use_cache=True, log_console=True)
#df is created using gpxpy to convert GPX data to a list, which is then converted to a pandas DataFrame
delta = 0.035 #in degrees, for plotting bounds
N = max(df['lat'][0],df['lat'][-1]) + delta
S = min(df['lat'][0],df['lat'][-1]) - delta
E = max(df['lon'][0],df['lon'][-1]) + delta
W = min(df['lon'][0],df['lon'][-1]) - delta
G = ox.graph_from_bbox(N, S, E, W, network_type='drive')
route_edges = ox.get_nearest_edges(G,df['lon'],df['lat'],method='balltree',dist=0.0001)
“ route_edges”的内容是一个ndarray,其中包含可能投影(到WGS84或UTM?)的数字,而不是度数。我不知道如何将ndarray转换回度数,或者不获取ndarray格式的经纬度GPX跟踪值,因此我可以计算到道路的距离并确定是否保留或替换数据。
总结一下: 我的主要问题是将不正确的GPX数据捕捉/更正到已知道路,因此我更喜欢使用OpenStreetMap数据。
子问题:
我应该使用osmnx来计算GPX(纬度/经度)点与边缘之间的距离,还是应该使用geopandas或shape(或完全其他的东西?)?
如何将lat / lon点转换为osmnx中使用的投影格式(例如G_projected = ox.project_graph(G)
),所以我可以用米而不是度表示get_nearest_edges方法的距离?