(數據科學學習手札154)geopandas 0.14版本新特性一覽

本文示例代碼已上傳至我的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

  直接在終端中執行上述命令即可一步到位完成虛擬環境的創建,以及新版geopandasjupyterlab的安裝:

2.2 geopandas 0.14版本底層依賴變動

  在0.14版本中,geopandas底層將默認使用shapely(>=2.0版本)進行高性能矢量運算,因此geopandas僅會在shapely缺失但pygeos已安裝時,纔會調用pygeos。且geopandas將會在未來要發佈的1.0正式版本中,直接移除對pygeos,以及舊版shapely(<2.0版本)的支持:

2.3 新增一系列矢量計算方法

  在這次新版本中,基於shapelyGeoSeries/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),是一種用來度量路徑之間相似度的經典數學方法:

  舉個例子,我們構造如下的四條路徑線要素,肉眼上很容易看出abcd各自相似度最高:

  而通過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()最近鄰搜索計算之前手動排除要素自身:

  更多有關geopandas0.14版本的更新內容,請移步https://geopandas.org/en/stable/docs/changelog.html瞭解更多。


  以上就是本文的全部內容,歡迎在評論區與我進行討論~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章