python包介绍:GeoPandas(初识)
1? GeoPandas介紹
????????GeoPandas是一個開源項目,可以更輕松地使用python處理地理空間數據。
????????GeoPandas擴展了Pandas中使用的數據類型DataFrame,允許對幾何類型進行空間操作。
????????GeoPandas的目標是使在python中使用地理空間數據更容易。它結合了Pandas和Shapely的能力,提供了Pandas的地理空間操作和多種Shapely的高級接口。GeoPandas可以讓您輕松地在python中進行操作,否則將需要空間數據庫,如PostGIS。
1.1 GeoPandas 概念
? ? ? ? GeoPandas 的核心是?geopandas.GeoDataFrame,?pandas.DataFrame的一個子類。這個GeoDataFrame可以存儲幾何列并執行空間操作。
??幾何圖形由geopandas.GeoSeries處理。它是panda.series的一個子類。???
??GeoDataFrame?是一組Series的組合(可以是數字、文本、布爾變量等等),同時GeoDataFrame也包括了帶有幾何圖形信息的geopandas.GeoSeries(點、多邊形等)
? ?
?????????每個GeoSeries可以包含任何幾何類型,并具有一個GeoSeries.crs屬性,它存儲關于投影的信息(crs代表坐標參考系統 Coordinate Reference System)。因此,GeoDataFrame中的每個GeoSeries可以在不同的投影中,例如,允許您擁有相同幾何圖形的多個版本(不同投影)。
????????GeoDataFrame中只有一個GeoSeries被認為是活躍的幾何圖形,這意味著應用于GeoDataFrame的所有幾何操作都是在這個活動列上操作的。
2讀取和寫文件
?2.1 讀文件
????????假設我們有一個文件,這個文件同時有數據和幾何信息(比如,GeoPackage, GeoJSON,Shapefile等),我們可以用geopandas.read_file來讀取它。這個操作可以自動探測文件屬性,并創建一個GeoDataFrame。
? ? ? ? 比如我們使用’nybb‘數據集,這個數據集是紐約各區地圖,GeoPandas安裝的一部分。
import geopandaspath_to_data = geopandas.datasets.get_path("nybb") gdf = geopandas.read_file(path_to_data)gdf2.2 寫文件?
寫文件直接用GeoDataFrame.to_file即可
默認的文件格式是Shapefile,但是你也可以用driver來賦值給
?
3 簡單的方法?
????????現在我們有了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 得到多邊形的質心
3.4 測量距離?
我們還可以測量每個質心與第一個質心的距離。
?這里我們先設定一個 Point作為我們的基準點,然后對某一列進行求距離的操作
????????求得的結果是一個DataFrame,所以我們可以在地理空間數據集上使用所有的pandas功能,并使用屬性和幾何信息一起做數據操作。
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 創建幾何圖形
在我們已經有的幾何圖形的基礎上,我們可以創建新的圖形
4.1?凸包 convex hull
GeoDataFrame.convex_hull.
?4.2 緩沖 buffer
????????在某些情況下,我們可能需要使用GeoDataFrame.buffer()緩沖幾何圖形。
????????GeoDataFrame.buffer()方法會自動應用于活躍的幾何列,但我們也可以直接應用于任何GeoSeries。
????????讓我們緩沖 區和它們的中心,并把它們畫在一起。
緩沖活躍幾何列10000英尺
gdf["buffered"] = gdf.buffer(10000)?緩沖質心幾何列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 幾何相關性
我們也可以去研究不同幾何列的空間關系。利用上面的幾何圖形,我們可以檢查哪些緩沖區與布魯克林的原始幾何體相交,也就是說,距離布魯克林10000英尺以內的區域。
首先我們先找到布魯克林區的多邊形
gdf.loc["Brooklyn", "geometry"]5.1 相交
然后我們可以看哪些?gdf["buffered"]?里面的幾何體和布魯克林區相交
?5.2 在原始多邊形內
我們可以檢查哪些緩沖質心是完全在原多邊形內的。
?畫圖認證:
?
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.56 投影?
????????每一個GeoSeries 都有一個坐標參考系?Coordinate Reference System (CRS),GeoSeries.crs
????????CRS告訴GeoPandas幾何圖形的坐標在地球上的位置。
????????在某些情況下,CRS是地理坐標,這意味著坐標以緯度和經度表示。在這些情況下,其CRS是WGS84,其授權代碼是EPSG:4326。
????????讓我們看看紐約區GeoDataFrame的投影
?使用英尺坐標的幾何圖形的授權代碼是?EPSG:2263。我們可以通過GeoSeries.to_crs()將GeoSeries投影到別的授權編碼上?
gdf = gdf.set_geometry("geometry") boroughs_4326 = gdf.to_crs("EPSG:4326") boroughs_4326.crs兩個編碼的區別在于,我們之前兩個點的舉例是?120 000 - 280 000 (feet),現在是?40.5 - 40.9 (degrees)?
參考資料:Introduction to GeoPandas — GeoPandas 0.9.0 documentation
總結
以上是生活随笔為你收集整理的python包介绍:GeoPandas(初识)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python笔记:load_ext au
- 下一篇: python库整理:numpy 集合操作