本文示例代碼已上傳至我的
Github
倉庫https://github.com/CNFeffery/DataScienceStudyNotes
1 簡介
大家好我是費老師,就在前兩天,Python
生態中的GIS
運算神器geopandas
發佈了其0.14.0
新版本,在這次新版本更新中,不僅是新增了許多矢量計算API
,還開始爲日後正式發佈1.0
版本做準備,對一些底層依賴版本進行改動。今天的文章中,我就將爲大家一一介紹相關的更新內容:
2 geopandas 0.14版本更新內容
2.1 安裝新版本geopandas
需要注意的是,從0.14
版本開始,geopandas
將最低支持的python
版本提升至3.9
:
因此,推薦大家以3.9
版本作爲建立GIS
運算Python
環境的基礎,這裏我們以conda
爲例,直接建立新的虛擬環境來做演示(下面的命令中爲了加速下載過程使用到相關國內conda
資源鏡像):
conda create -n geopandas-demo python=3.9 -c https://mirrors.sustech.edu.cn/anaconda/pkgs/main/ -y
conda activate geopandas-demo
conda install geopandas pyogrio jupyterlab -c https://mirrors.sustech.edu.cn/anaconda/cloud/conda-forge -y
直接在終端中執行上述命令即可一步到位完成虛擬環境的創建,以及新版geopandas
、jupyterlab
的安裝:
2.2 geopandas 0.14版本底層依賴變動
在0.14
版本中,geopandas
底層將默認使用shapely
(>=2.0版本)進行高性能矢量運算,因此geopandas
僅會在shapely
缺失但pygeos
已安裝時,纔會調用pygeos
。且geopandas
將會在未來要發佈的1.0
正式版本中,直接移除對pygeos
,以及舊版shapely
(<2.0版本)的支持:
2.3 新增一系列矢量計算方法
在這次新版本中,基於shapely
爲GeoSeries/GeoDataFrame
新引入了一系列矢量計算方法,具體有:
2.3.1 新增concave_hull()方法
有別於先前已有的convex_hull
方法,新增的concave_hull()
方法用於爲矢量列中的每個要素計算最小凹多邊形,與convex_hull
計算結果的對比示例如下:
import random
from shapely.geometry import MultiPoint
# 示例GeoSeries
demo_geometries = gpd.GeoSeries(
[
MultiPoint([(random.uniform(0, 1), random.uniform(0, 1)) for i in range(25)])
]
)
ax = demo_geometries.plot()
# concave_hull()計算結果
demo_geometries.concave_hull().plot(ax=ax, facecolor='none', edgecolor='red')
# 對比convex_hull()計算結果
demo_geometries.convex_hull.plot(ax=ax, facecolor='none', edgecolor='green');
2.3.2 新增delaunay_triangles()方法
新增了用於計算Delaunay三角網的delaunay_triangles()
方法,計算示例如下:
2.3.3 新增extract_unique_points()方法
新增extract_unique_points()
方法,用於直接從任意類型目標矢量中提取全部折點要素:
2.3.4 新增frechet_distance()方法
新增frechet_distance()
方法,用於計算弗雷歇距離(fréchet distance),是一種用來度量路徑之間相似度的經典數學方法:
舉個例子,我們構造如下的四條路徑線要素,肉眼上很容易看出a
與b
,c
與d
各自相似度最高:
而通過frechet_distance()
計算兩兩之間的弗雷歇距離,也可以從數值計算角度準確計算得到彼此最相似的路徑:
2.3.5 新增minimum_rotated_rectangle()方法
新增minimum_rotated_rectangle()
方法,用於爲矢量列中各個要素計算最小外接矩形,譬如:
2.3.6 新增offset_curve()方法
新增offset_curve()
方法,用於爲目標要素構建偏移曲線,即與原始要素相似但偏移一定的距離:
2.3.7 新增remove_repeated_points()方法
新增remove_repeated_points()
方法,用於沿要素座標串定義方向,將距離在閾值以內的座標點視作重複點要素進行移除,默認閾值爲0,你可以在實際應用中靈活調整閾值,從而起到簡化要素的目的:
2.3.8 新增segmentize()方法
新增segmentize()
方法,用於對目標矢量列中的各要素,按照設定的等間距進行增密操作,譬如在原有僅起點終點連成線要素基礎上,按照1單位距離進行增密的結果如下:
2.3.9 新增shortest_line()方法
新增shortest_line()
方法,用於計算任意兩個要素之間最短距離連線:
2.4 sjoin_nearest()新增exclusive參數
新版本中爲sjoin_nearest()
新增參數exclusive
,默認爲False
,當設置爲True
時,會在計算過程中自動忽略與自身要素相同的最近鄰要素,非常的實用,省得我們在做sjoin_nearest()
最近鄰搜索計算之前手動排除要素自身:
更多有關geopandas
0.14版本的更新內容,請移步https://geopandas.org/en/stable/docs/changelog.html
瞭解更多。
以上就是本文的全部內容,歡迎在評論區與我進行討論~