日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python包介绍:GeoPandas(初识)

發(fā)布時間:2025/4/5 python 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python包介绍:GeoPandas(初识) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1? GeoPandas介紹

????????GeoPandas是一個開源項目,可以更輕松地使用python處理地理空間數(shù)據(jù)。

????????GeoPandas擴展了Pandas中使用的數(shù)據(jù)類型DataFrame,允許對幾何類型進行空間操作。

????????GeoPandas的目標是使在python中使用地理空間數(shù)據(jù)更容易。它結合了Pandas和Shapely的能力,提供了Pandas的地理空間操作和多種Shapely的高級接口。GeoPandas可以讓您輕松地在python中進行操作,否則將需要空間數(shù)據(jù)庫,如PostGIS。

1.1 GeoPandas 概念

? ? ? ? GeoPandas 的核心是?geopandas.GeoDataFrame,?pandas.DataFrame的一個子類。這個GeoDataFrame可以存儲幾何列并執(zhí)行空間操作。

??幾何圖形由geopandas.GeoSeries處理。它是panda.series的一個子類。???

??GeoDataFrame?是一組Series的組合(可以是數(shù)字、文本、布爾變量等等),同時GeoDataFrame也包括了帶有幾何圖形信息的geopandas.GeoSeries(點、多邊形等)

? ?

?????????每個GeoSeries可以包含任何幾何類型,并具有一個GeoSeries.crs屬性,它存儲關于投影的信息(crs代表坐標參考系統(tǒng) Coordinate Reference System)。因此,GeoDataFrame中的每個GeoSeries可以在不同的投影中,例如,允許您擁有相同幾何圖形的多個版本(不同投影)。

????????GeoDataFrame中只有一個GeoSeries被認為是活躍的幾何圖形,這意味著應用于GeoDataFrame的所有幾何操作都是在這個活動列上操作的。

2讀取和寫文件

?2.1 讀文件

????????假設我們有一個文件,這個文件同時有數(shù)據(jù)和幾何信息(比如,GeoPackage, GeoJSON,Shapefile等),我們可以用geopandas.read_file來讀取它。這個操作可以自動探測文件屬性,并創(chuàng)建一個GeoDataFrame。

? ? ? ? 比如我們使用’nybb‘數(shù)據(jù)集,這個數(shù)據(jù)集是紐約各區(qū)地圖,GeoPandas安裝的一部分。

import geopandaspath_to_data = geopandas.datasets.get_path("nybb") gdf = geopandas.read_file(path_to_data)gdf

2.2 寫文件?

寫文件直接用GeoDataFrame.to_file即可

默認的文件格式是Shapefile,但是你也可以用driver來賦值給

?

3 簡單的方法?

????????現(xiàn)在我們有了GeoDataFrame,可以開始處理它的幾何屬性了。

????????因為我們只從文件中讀取了一個幾何列,它被自動視為活躍幾何屬性。GeoDataFrame上定義的方法將應用到“幾何”列。

3.1 測量面積

? ? ? ? 計算一個多邊形的面積,我們可以使用GeoDataFrame.area屬性,他會返回一個?pandas.Series。

? ?注意GeoDataFrame.area只會應用于活躍的幾何列

gdf = gdf.set_index("BoroName") gdf

?

gdf["area"] = gdf.area gdf

?3.2?得到多邊形的邊界

?GeoDataFrame.boundary.

?3.3 得到多邊形的質(zhì)心

3.4 測量距離?

我們還可以測量每個質(zhì)心與第一個質(zhì)心的距離。

?這里我們先設定一個 Point作為我們的基準點,然后對某一列進行求距離的操作

????????求得的結果是一個DataFrame,所以我們可以在地理空間數(shù)據(jù)集上使用所有的pandas功能,并使用屬性和幾何信息一起做數(shù)據(jù)操作。

3.5 制作地圖

????????GeoPandas還可以繪制地圖,這樣我們就可以檢查我們的幾何圖形在空間中的樣子。

? ? ? ? 方法就是GeoDataFrame.plot()

? ? ? ? 在下面的例子中,我們對gdf畫圖

3.5.1??首先我們查看當前的活躍幾何列

? ? ? ?

3.5.2?然后繪圖?

(這個相當于底圖)

?我們用當前的活躍幾何列描繪某一列GeoSeries

?3.5.3?切換活躍列

?我們切換活躍列(set_geometry),出來的就是不一樣的東西

? ???

?3.5.4 疊加GeoSeries

我們也可以將兩個GeoSeries疊加在一起。我們只需要用一個圖作為另一個圖的軸axis。

?

?gdf["centroid"]是在ax之上畫成的,所以ax是“最底層”。

因而右邊的圖,ax交換之后,就顯示不出黑點了,因為gdf["centroid"]被?gdf["geometry"]覆蓋住了

4 創(chuàng)建幾何圖形

在我們已經(jīng)有的幾何圖形的基礎上,我們可以創(chuàng)建新的圖形

4.1?凸包 convex hull

GeoDataFrame.convex_hull.

?4.2 緩沖 buffer

????????在某些情況下,我們可能需要使用GeoDataFrame.buffer()緩沖幾何圖形。

????????GeoDataFrame.buffer()方法會自動應用于活躍的幾何列,但我們也可以直接應用于任何GeoSeries。

????????讓我們緩沖 區(qū)和它們的中心,并把它們畫在一起。

緩沖活躍幾何列10000英尺

gdf["buffered"] = gdf.buffer(10000)

?緩沖質(zhì)心幾何列10 000英尺

gdf["buffered_centroid"] = gdf["centroid"].buffer(10000)

做圖可視化

ax = gdf["buffered"].plot(alpha=.5,figsize=(15,15)) gdf["buffered_centroid"].plot(ax=ax, color="red", alpha=.5) gdf["bound"].plot(ax=ax, color="white", linewidth=.5)

?5 幾何相關性

我們也可以去研究不同幾何列的空間關系。利用上面的幾何圖形,我們可以檢查哪些緩沖區(qū)與布魯克林的原始幾何體相交,也就是說,距離布魯克林10000英尺以內(nèi)的區(qū)域。

首先我們先找到布魯克林區(qū)的多邊形

gdf.loc["Brooklyn", "geometry"]

5.1 相交

然后我們可以看哪些?gdf["buffered"]?里面的幾何體和布魯克林區(qū)相交

?5.2 在原始多邊形內(nèi)

我們可以檢查哪些緩沖質(zhì)心是完全在原多邊形內(nèi)的。

?畫圖認證:

?

gdf = gdf.set_geometry("buffered_centroid") ax = gdf.plot("within", legend=True, categorical=True, legend_kwds={'loc': "upper left"}) # using categorical plot and setting the position of the legend gdf["bound"].plot(ax=ax, color="black", linewidth=.5) # passing the first plot and setting linewitdth to 0.5

6 投影?

????????每一個GeoSeries 都有一個坐標參考系?Coordinate Reference System (CRS),GeoSeries.crs

????????CRS告訴GeoPandas幾何圖形的坐標在地球上的位置。

????????在某些情況下,CRS是地理坐標,這意味著坐標以緯度和經(jīng)度表示。在這些情況下,其CRS是WGS84,其授權代碼是EPSG:4326。

????????讓我們看看紐約區(qū)GeoDataFrame的投影

?使用英尺坐標的幾何圖形的授權代碼是?EPSG:2263。我們可以通過GeoSeries.to_crs()將GeoSeries投影到別的授權編碼上?

gdf = gdf.set_geometry("geometry") boroughs_4326 = gdf.to_crs("EPSG:4326") boroughs_4326.crs

兩個編碼的區(qū)別在于,我們之前兩個點的舉例是?120 000 - 280 000 (feet),現(xiàn)在是?40.5 - 40.9 (degrees)?

參考資料:Introduction to GeoPandas — GeoPandas 0.9.0 documentation

總結

以上是生活随笔為你收集整理的python包介绍:GeoPandas(初识)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。