詳解OSMnx:Python中的開源地理空間分析工具包

一、OSMnx概述

OSMnx是一個開源的Python地理空間數據可視化和分析工具包,基於OpenStreetMap數據源,可以用來分析城市的街道網路、生成全景地圖等。使用OSMnx,你可以輕鬆獲取城市的複雜路網和建築結構。同時,OSMnx允許你使用不同的分析方法,如自行車網路的生成、確定分層路網等。這個工具包的優勢在於,不必了解複雜的GIS或地理空間分析技術,就能快速的處理和可視化地理空間數據。

二、安裝OSMnx

要安裝OSMnx,首先需要確保你已經安裝了Python和JupyterNotebook。打開Anaconda Prompt或命令行控制台,輸入以下命令:

conda config --prepend channels conda-forge
conda create -n ox --strict-channel-priority osmnx

由於OSMnx包含大量的依賴關係,因此安裝時可能需要一些時間。安裝完成後,可以通過打開jupyter notebook來檢驗是否安裝完成。新建一個notebook,輸入以下代碼,檢查是否出錯:

import osmnx as ox
ox.config(log_console=True, use_cache=True)
place_name = "Piedmont, California, USA" #構建地點
graph = ox.graph_from_place(place_name)
ox.plot_graph(graph)

如果沒有任何錯誤,查看你的Jupyter Notebook,你應該可以看到從OpenStreetMap下載的Piedmont, 加利福尼亞州的道路網路。

三、獲取地理空間數據

在OSMnx中,獲取地理空間數據的方法非常容易。最常用的方法之一是通過place名稱獲取道路網路。可以按以下方式執行代碼來實現

import osmnx as ox
ox.config(log_console=True, use_cache=True)
place_name = "Piedmont, California, USA" #構建地點
graph = ox.graph_from_place(place_name)
ox.plot_graph(graph)

OSMnx還允許我們根據坐標範圍來獲取道路網路。要獲取地理空間範圍,請按以下方式執行代碼:

import osmnx as ox
ox.config(log_console=True, use_cache=True)
north, south, east, west = 37.79, 37.78, -122.41, -122.43
graph = ox.graph_from_bbox(north, south, east, west)
ox.plot_graph(graph)

除了道路網路,OSMnx還允許您獲取建築物、商店、運動設備等各種信息。以下是一些選擇的示例代碼:

# 獲取建築物和道路
G = ox.graph_from_point((37.79, -122.41), distance=750, network_type='all')
area = ox.project_gdf(ox.gdf_from_place('Berkeley, California'))
buildings = ox.buildings_from_place(place_name)
streets = ox.core.graph_to_gdfs(graph, nodes=False, edges=True, node_geometry=False, fill_edge_geometry=True)

# 獲取購物點和其他點
poi2 = ox.pois_from_place(place_name, amenities=['restaurant'])

# 獲取街道名
streets_names = ox.core.get_route_edge_attributes(graph, attribute='name')

四、生成具有地理意義的可視化圖像

OSMnx提供了幾種直接可視化圖像的方法,其中最常用的 метод是plot_graph()。以下代碼演示如何生成帶有彩色道路和節點類型的圖像。

import osmnx as ox
ox.config(log_console=True, use_cache=True)
place_name = "Piedmont, California, USA"
graph = ox.graph_from_place(place_name, network_type='drive')
fig, ax = ox.plot_graph(graph, node_size=0, edge_color=『y』, edge_linewidth=0.5, show=False, close=False)
fig.canvas.draw()
ax.set_title(『{} (drive network)』.format(place_name), fontsize=20)
plt.show()

可以看到我們繪製了一個擁有各種顏色的道路和點的圖像。

五、分析網路結構

OSMnx對分析和可視化街道網路非常適用。以下是OSMnx提供的一些分析方法:

1. 分層路網

跨越多個交通模式的「圖層」路網。如下所示,通過network_type參數值為all,OSMnx可以生成一個圖層路網。

G_all = ox.graph_from_place(place_name, network_type='all')
fig, ax = ox.plot_graph(G_all, node_size=0)

2. 生成街區

使用graph_from_address()函數生成地址。此函數需要一個字元串地址作為參數,例如「1600 Amphitheatre Parkway, Mountain View, CA」。使用此功能,您可以生成指定地址周圍的街區,如下圖所示

import osmnx as ox
ox.config(log_console=True, use_cache=True)
address = '955 Westwood Blvd, Los Angeles, CA' #構建地點
G = ox.graph_from_address(address, dist=750, network_type='drive')
fig, ax = ox.plot_graph(G)
fig.savefig('images/los-angeles.png', dpi=300, bbox_inches='tight')

六、自行車路網分析

OSMnx包含了許多功能,可以生成不同類型的網路。在下面的代碼段中,我們使用network_type=『bike』將OSMnx配置為只找到自行車道路。然後,我們使用make_route_graph()函數來找到在兩個點之間的最短自行車路線。

import osmnx as ox
ox.config(use_cache=True, log_console=True)
G = ox.graph_from_address('1118 26th St, Santa Monica, California', network_type='bike')
route = ox.shortest_path(G, "1118 26th St, Santa Monica, California」, 「1832 11th St, Santa Monica, California」)

七、總結

OSMnx是一個用於地理空間數據的分析和可視化的強大工具箱。它為我們提供了許多特性,使我們能夠方便地獲取和分析地理空間數據。能夠生成具有地理意義的可視化圖像,生成街區和自行車路網分析。 如果您想開始自己的地理空間數據項目,OSMnx是您不可或缺的工具!

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/193998.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-02 09:43
下一篇 2024-12-02 09:44

相關推薦

  • SDN開源組織中ONOS起步最早

    ONOS是一個開源軟體定義網路(SDN)操作系統,由ON.Lab創建並一直在開發。該平台旨在通過使用網路虛擬化技術使工程師能夠快速靈活地創建和管理網路服務。 一、ONOS的優勢 在…

    編程 2025-04-29
  • GitHub好玩的開源項目

    本文旨在介紹GitHub上一些好玩的開源項目,並提供代碼示例供讀者參考和學習。 一、Emoji列表 GitHub上有一份完整的Emoji列表,它支持各種平台和設備,方便用戶在Git…

    編程 2025-04-28
  • 雲盤開源系統哪個好?

    本文將會介紹幾種目前主流的雲盤開源系統,從不同方面對它們做出分析比較,以此來確定哪個雲盤開源系統是最適合您的。 一、Seafile Seafile是一款非常出色的雲盤開源系統,它的…

    編程 2025-04-28
  • 開源Python CMS的優勢和應用範圍

    開源Python CMS是一種基於Python架構的內容管理系統。它不僅具有高效可靠的核心框架,還有大量的插件和現成的模板,可以充分滿足各種網站需求,使開發人員輕鬆地進行網站設計和…

    編程 2025-04-28
  • 開源軟體授權使用證明

    開源軟體在現今的軟體開發領域中發揮了非常重要的作用。但是,開源軟體的免費使用並不意味著用戶可以隨意使用,因為開源軟體本身也有授權的問題。本文將從多個方面闡述開源軟體授權使用證明的相…

    編程 2025-04-28
  • 地理科學師範專業的教學應用與實踐

    隨著未來社會的發展,地理科學師範專業在我國的高等教育體系中扮演著越來越重要的角色。本文將從多個方面對該專業的教學應用與實踐進行詳細闡述,以期提高教師教學水平,增強學生學習體驗。 一…

    編程 2025-04-27
  • Spark開源項目-大數據處理的新星

    Spark是一款開源的大數據分散式計算框架,它能夠高效地處理海量數據,並且具有快速、強大且易於使用的特點。本文將從以下幾個方面闡述Spark的優點、特點及其相關使用技巧。 一、Sp…

    編程 2025-04-27
  • 開源腦電波技術

    本文將會探討開源腦電波技術的應用、原理和示例。 一、腦電波簡介 腦電波(Electroencephalogram,簡稱EEG),是一種用於檢測人腦電活動的無創性技術。它通過在頭皮上…

    編程 2025-04-27
  • Python開源數據集全解析

    Python已經成為了現代編程中最受歡迎的語言之一。它的強大功能、簡單易學的語法和眾多的開源庫,使得Python成為了各行各業開發者群體中需要掌握的技能。Python開源數據集則是…

    編程 2025-04-27
  • Python開源量化系統的全面介紹和應用實戰

    本文將從多個方面對Python開源量化系統進行介紹,並通過實例講解其應用。通過本文的閱讀,您將了解量化交易的概念、Python的量化工具、各種策略的實現方法以及回測與回溯分析等知識…

    編程 2025-04-27

發表回復

登錄後才能評論