python 包介绍:osmnx

Posted UQI-LIUWJ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 包介绍:osmnx相关的知识,希望对你有一定的参考价值。

1 osmnx介绍

一个Python 包,可检索、建模、分析和可视化来自 OpenstreetMap 的街道网络。

2 graph模块

2.1 graph_from_point

osmnx.graph.graph_from_point(
    center_point, 
    dist=1000, 
    dist_type='bbox', 
    network_type='all_private', 
    simplify=True, 
    retain_all=False, 
    truncate_by_edge=False, 
    clean_periphery=True, 
    custom_filter=None)
center_point (tuple围绕其构建图形的经纬度坐标
dist (int仅保留图中心这么多米内的那些节点,距离根据 dist_type 参数确定
dist_type (string {"network""bbox"})

如果为“bbox”,则仅保留距离参数的边界框内的那些节点。

如果是“network”,则仅保留距最中心节点一定网络距离内的那些节点。

network_type (string{"all_private""all""bike""drive""drive_service""walk"})获得什么类型的街道网络
simplify (bool如果为真,使用simple_graph 函数简化图拓扑
retain_all (bool

如果为 True,即使未连接也返回整个图。

否则,只保留最大的弱连通分量。

truncate_by_edge (bool如果为真,如果至少一个节点的邻居在边界框内,则保留这个边界框外的节点

 2.2 graph_from_place

osmnx.graph.graph_from_place(
    query, 
    network_type='all_private', 
    simplify=True, 
    retain_all=False, 
    truncate_by_edge=False, 
    which_result=None, 
    buffer_dist=None, 
    clean_periphery=True, 
    custom_filter=None)
query (string or dict or list对地理编码的查询或查询以获取地点边界多边形
network_type (string {"all_private""all""bike""drive""drive_service""walk"})获得什么类型的街道网络
simplify (bool如果为真,使用simple_graph 函数简化图拓扑
retain_all (bool

如果为 True,即使未连接也返回整个图。

否则,只保留最大的弱连通分量。

truncate_by_edge (bool如果为真,如果至少一个节点的邻居在边界框内,则保留这个边界框外的节点

 

3 plot模块

3.1 plot_graph

osmnx.plot.plot_graph(
    G, 
    ax=None, 
    figsize=(8, 8), 
    bgcolor='#111111', 
    node_color='w', 
    node_size=15, 
    node_alpha=None, 
    node_edgecolor='none', 
    node_zorder=1, 
    edge_color='#999999', 
    edge_linewidth=1, 
    edge_alpha=None, 
    show=True, 
    close=False, 
    save=False, 
    filepath=None, 
    dpi=300, 
    bbox=None)
G (networkx.MultiDiGraph)需要绘制的图
ax (matplotlib axis如果不是无,则在此预先存在的轴上绘图
figsize (tuple)和matplotlib的一致
bgcolor (string背景颜色
node_color (string or list)点的颜色
node_size (int)点的大小,如果是0的话,不画点
node_alpha (float)点的透明度
node_edgecolor (string点边框的颜色
edge_color (string or list)

边的颜色

edge_linewidth (float边的宽度
edge_alpha (float)边的透明度
show (bool如果为 True,则调用 pyplot.show() 来显示图形
close (bool)如果为 True,则调用 pyplot.close() 来关闭图形
save (bool如果为 True,则将图形保存到filepath去
filepath (string)保存的路径

eg

location_point = (31.20799,121.547812)
G1 = ox.graph_from_point(location_point, dist=2000)
fig, ax = ox.plot_graph(G1, node_color='r')

 4 simplification模块

4.1 _is_endpoint

节点是边的真正端点吗?

如果节点是网络中边的“真实”端点,则返回 True,否则返回 False。

OSM 数据包括许多仅作为点存在的节点,以帮助街道绕曲线弯曲。

osmnx.simplification._is_endpoint(
    G, 
    node, 
    strict=True)

G-图,node-需要判断的点

G1=ox.graph_from_place('Pudong,Shanghai,China',
                                  network_type='drive')
nc = ['white' if ox.simplification._is_endpoint(G1, node) else 'black' for node in G1.nodes()]
ox.plot_graph(G1,figsize=(20,20),node_color=nc)

4.2 simplify_graph

osmnx.simplification.simplify_graph(
    G, 
    strict=True, 
    remove_rings=True)

通过移除间隙节点来简化图的拓扑。 

通过删除所有非交点或终端的节点来简化图拓扑。

在封装它们的端点之间直接创建一条边,但保留原始边的几何形状,并保存为新边上的新几何属性。

注意,只有简化的边才能接收几何属性。一些合并后的边可能包含多种OSM方式,如果是这样,它们的多个属性值将存储为一个列表。

注:如果之前在比如ox.graph_from_point的地方,没有设置 'simplify=False',那么这里会报错:

Exception: This graph has already been simplified, cannot simplify it again.

eg,这是没有简化的图:

location_point = (31.20799,121.547812)
G1 = ox.graph_from_point(location_point, dist=2000,simplify=False)
fig, ax = ox.plot_graph(G1, node_color='r')

这是简化了之后的图:

G2=ox.simplification.simplify_graph(G1)
ox.plot_graph(G2)

 5 io模块

5.1 load_graphml

osmnx.io.load_graphml(
    filepath, 
    node_dtypes=None, 
    edge_dtypes=None, 
    graph_dtypes=None)

5.1.1 参数说明

filepath (string or pathlib.Path)GraphML文件的路径
node_dtypes (dict点级别属性名字的字典
edge_dtypes (dict)边级别属性名字的字典
graph_dtypes (dict图级别属性名字的字典

5.1.2 用法说明 

从磁盘加载osmnx保存的GraphML文件。

这将节点、边和图形级属性(序列化为字符串)转换为相应的数据类型。

可以根据需要通过传入提供类型或自定义转换器函数的dtypes参数来定制这些参数。

例如,如果想将某些属性的值转换为bool类型,可以考虑使用内置的ox.io._convert_bool_string函数:

ox.load_graphml(fp, node_dtypes={my_attr: ox.io._convert_bool_string})

如果你手工设置了’all_oneway=True‘,那么你需要将边的oneway属性设置为str

5.1.3 使用举例

G = ox.io.load_graphml("./graph.graphml")
fig, ax = ox.plot_graph(G, node_size=0, edge_color='w', edge_linewidth=0.25)

6 utils_graph模块 

6.1 graph_to_gdfs

osmnx.utils_graph.graph_to_gdfs(
    G, 
    nodes=True, 
    edges=True, 
    node_geometry=True, 
    fill_edge_geometry=True)

 Convert a MultiDiGraph to node and/or edge GeoDataFrames.

返回:geopandas.GeoDataFrame

参数:

G (networkx.MultiDiGraph输入的图
nodes (bool如果是True,那么将图的节点转化成GeoDataFrame
edges (bool如果是True,那么将图的边转化成GeoDataFrame
node_geometry (bool如果为True,从节点x和y属性创建一个几何列
fill_edge_geometry (bool)如果为True,使用节点u和v填充缺失的边几何字段

        Gdf_nodes或gdf_edges或元组(Gdf_nodes, gdf_edges).gdf_nodes由osmid索引.

        gdf_edges由u, v, key按照正常的multidiggraph结构进行多重索引。

以上是关于python 包介绍:osmnx的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中使用 osmnx 到距离内边缘的最近点

OSMNX 地理编码器返回不正确的坐标

OSMNX:获取建筑物的外部坐标,给出它所在的坐标

来自 gdf ​​的 Osmnx 基本统计信息

使用 OSMNX Nearest_edges 的结果不正确

使用 Python 代码片段编写 LaTeX 文档