映射/捕捉GPX错误的纬度点到边

时间:2019-07-15 16:52:51

标签: pandas geopandas shapely osmnx

我有几条要分析的(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方法的距离?

0 个答案:

没有答案