python 包介绍:osmnx
1 osmnx介紹
一個Python 包,可檢索、建模、分析和可視化來自 OpenstreetMap 的街道網絡。
2 graph模塊
graph類型就是networkx 包中的graph類型。所以python庫整理:networkx 包_UQI-LIUWJ的博客-CSDN博客中G的操作這里的G都可以
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')3.2 plot_graph_route?
osmnx 筆記: plot_graph_route & plot_graph_routes_UQI-LIUWJ的博客-CSDN博客
3.3?plot_graph_routes
osmnx 筆記: plot_graph_route & plot_graph_routes_UQI-LIUWJ的博客-CSDN博客
3.4?get_colors
從matplotlib顏色映射中獲取n個均勻間距的顏色。
3.4.1 基本使用方法
osmnx.plot.get_colors(n, cmap='viridis', start=0.0, stop=1.0, alpha=1.0, return_hex=False)3.4.2 參數說明
| n?(int)? | 劃分的顏色數 |
| cmap?(string) | |
| start?(float)? | 顏色空間的起始位置 |
| stop?(float)? | 顏色空間的結束位置 |
| alpha?(float)? | 透明度 |
| return_hex?(bool) | 如果為True,將RGBa顏色轉換為類似html的十六進制RGB字符串。 如果為False,返回(R, G, B, alpha)元組的顏色。 |
?3.4.3 使用舉例
ox.plot.get_colors(10,cmap='Greens') ''' [(0.9686274509803922, 0.9882352941176471, 0.9607843137254902, 1.0),(0.9066205305651672, 0.9641214917339485, 0.8884429065743944, 1.0),(0.8089965397923875, 0.9251672433679354, 0.7834525182622069, 1.0),(0.681045751633987, 0.8718954248366013, 0.6562091503267974, 1.0),(0.5351787773933102, 0.8060899653979239, 0.5287504805843906, 1.0),(0.36392156862745095, 0.7240292195309497, 0.4181468665897732, 1.0),(0.21568627450980393, 0.6287581699346405, 0.3333333333333333, 1.0),(0.10388312187620147, 0.5164936562860438, 0.2467512495194156, 1.0),(0.0, 0.4079046520569012, 0.16444444444444445, 1.0),(0.0, 0.26666666666666666, 0.10588235294117647, 1.0)] '''ox.plot.get_colors(10,cmap='Greens',return_hex=True) ''' ['#f7fcf5','#e7f6e3','#ceecc8','#aedea7','#88ce87','#5db96b','#37a055','#1a843f','#00682a','#00441b'] '''?3.5??get_edge_colors_by_attr &get_node_colors_by_attr
osmnx 補充筆記:get_edge_colors_by_attr &get_node_colors_by_attr_UQI-LIUWJ的博客-CSDN博客
?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)5.2??save_graphml
osmnx.io.save_graphml(G, filepath=None, gephi=False, encoding='utf-8')將G保存成graphml格式的文件?
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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pytorch 笔记: 复现论文 Sto
- 下一篇: scipy笔记:scipy.sparse