2017-09-15 73 views
0

我使用Python库OSMNx在城市旅行的几个步骤之间绘制了最佳路线。最后的变量是a list of OSM idsOSMNx:使用OSM获取节点的坐标编号

现在,我试图将这条路线保存为shp或json文件。问题是我需要每个节点的纬度/经度,但是我没有找到一个OSMNx函数来做到这一点。

我试过get_route_edge_attributes(但坐标不是这个函数的有效属性)。有什么办法可以用这个单一的id来获得OSM节点的坐标?

在此先感谢。

+0

我的坏Alireza,我在度假,远离任何屏幕!我刚刚测试过你的线路,他们工作得很好。我立即验证您的答案,再次感谢您。 – Raphadasilva

+0

对不起,先前的评论。很高兴听到它的作品。 –

回答

1

您拥有Graph中每个节点和边的所有属性。你可以用得到的节点属性:

G.node[38862848] 
#out: {'highway': nan, 
# 'lat': 45.3210533, 
# 'lon': -122.9790558, 
# 'osmid': '38862848', 
# 'ref': nan, 
# 'x': 501641.47862882155, 
# 'y': 5018616.5723966481} 

G.node[38862848]['lat'] 
# out: 45.3210533 

,并获得边缘属性,你可以使用G[u][v]

G[5035130880][4963510289] 
# out: 
#{0: {'bridge': 'yes', 
# 'geometry': <shapely.geometry.linestring.LineString at 0x7f90ad7d5860>, 
# 'highway': 'secondary', 
# 'length': 671.332597496, 
# 'name': 'Northwest 185th Avenue', 
# 'oneway': False, 
# 'osmid': [124454683, 24446714, 124454682]}} 

所有属性也都在GeoDataFrame的曲线图。 如果有节点列表,让所有节点的几何形状的最简单的方法是:

import osmnx as ox 
import networkx as nx 

gdf_nodes, gdf_edges = ox.graph_to_gdfs() 
path = nx.shortest_path(G, G.nodes()[0], G.nodes()[1]) 
gdf_nodes.loc[path] 
#out: 
#  highway lat lon osmid ref x y geometry traffic_signals 
#5035130880 NaN 45.5637 -122.868 5035130880 NaN 510334 5.04558e+06 POINT (510334.0390091945 5045583.999886028) 0 
#4963510289 NaN 45.5698 -122.868 4963510289 NaN 510329 5.04625e+06 POINT (510329.3114555664 5046254.728223645) 0 
# ... 

输出是GeoDataFrame。