2017-09-15 123 views
0

私は、PythonライブラリOSMNxを使用して、いくつかの都市旅行の間に最適なルートを描きました。最終変数はa list of OSM idsです。OSMNx:OSM IDを使用してノードの座標を取得

今、私はこのルートをshpまたはjsonファイルとして保存しようとしています。問題は、各ノードの緯度/経度が必要なことですが、OSMNx関数ではそれを見つけることができませんでした。

私はget_route_edge_attributesを試しました(ただし、座標はこの関数の有効な属性ではありません)。この単一のIDを持つOSMノードの座標を取得する方法はありますか?

ありがとうございます。

+0

私の悪いAlireza、私は休暇中で、どんなスクリーンからも遠かった!私はちょうどあなたのラインをテストし、彼らは正常に働いた。私はすぐにあなたの答えを検証する、もう一度ありがとう。 – Raphadasilva

+0

前のコメントに申し訳ありません。それが聞こえてうれしいです。 –

答えて

1

グラフの各ノードとエッジのすべての属性があります。あなたは使用してノード属性を取得することができます。

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です。

関連する問題