由点和几何信息生成的OSMNX图 [英] OSMNX graph from point and geometry information
本文介绍了由点和几何信息生成的OSMNX图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在最新的工作中,不幸的是几何属性不在那里。现在有没有可能访问结点或边的坐标?
非常感谢!
推荐答案
OSMnx仅向简化的边添加geometry
属性。如果边未简化,则其几何是其入射节点u
和v
之间的平凡直线。在您的代码中,您使用simplify=False
参数化了graph_from_point
,因此没有一条边被简化,也没有一条边具有geometry
属性:
import osmnx as ox
ox.config(use_cache=True, log_console=True)
point = 40.729630, -73.998835
dist = 100
G = ox.graph_from_point(point, dist=dist, network_type='drive', simplify=False)
for u, v, data in G.edges(keys=False, data=True):
simp = '' if 'geometry' in data else 'not '
print(f'edge {data["osmid"]} has {simp}been simplified')
如果简化该图,其部分或全部边将具有几何属性,具体取决于链接两个交叉点的特定街道段最初是否跨越多个OSM节点。this paper中详细介绍了拓扑简化方法。更多详细信息请参阅the docs。示例:
import osmnx as ox
ox.config(use_cache=True, log_console=True)
point = 40.729630, -73.998835
dist = 100
G = ox.graph_from_point(point, dist=dist, network_type='drive', simplify=True)
for u, v, data in G.edges(keys=False, data=True):
simp = '' if 'geometry' in data else 'not '
print(f'edge {data["osmid"]} has {simp}been simplified')
您还可以通过使用fill_edge_geometry=True
调用graph_to_gdfs
,然后使用graph_from_gdfs
重新构建您的图形,向简化或非简化图形的每条边手动添加几何属性,如下所示:
import osmnx as ox
import pandas as pd
ox.config(use_cache=True, log_console=True)
point = 40.729630, -73.998835
dist = 100
G = ox.graph_from_point(point, dist=dist, network_type='drive', simplify=False)
# create nodes, edges GeoDataFrames and fill in all edge geometry attributes
# then re-create a MultiDiGraph from those GeoDataFrames
nodes, edges = ox.graph_to_gdfs(G, fill_edge_geometry=True)
G2 = ox.graph_from_gdfs(nodes, edges, graph_attrs=G.graph)
for u, v, data in G2.edges(keys=False, data=True):
assert 'geometry' in data
最后,在上面的一条评论中,您提到了我使用的是最新版本,即osmnx 0.16.1。但是,您的代码片段不能使用v0.16.1,因为distance
参数在5或6个版本之前已弃用,并最终被dist
替换。尝试运行print(ox.__version__)
以查看您实际使用的版本。
这篇关于由点和几何信息生成的OSMNX图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文