(資料科學學習手札162)Python GIS神器geopandas 1.0版本釋出

费弗里發表於2024-06-25

本文完整程式碼及附件已上傳至我的Github倉庫https://github.com/CNFeffery/DataScienceStudyNotes

1 簡介

  大家好我是費老師,就在昨天,Python生態中著名的GIS分析庫geopandas釋出了其1.0.0正式版本。

(資料科學學習手札162)Python GIS神器geopandas 1.0版本釋出

  歷經10年迭代升級,geopandas充分完善了其在GIS資料分析上的功能,使得我們可以使用類似pandas的操作方式,便捷且高效能的開展各種常用的GIS分析運算,極大增強了PythonGIS分析領域的能力。

  今天的文章,費老師我就將帶大家一起快速瞭解在全新的1.0版本中,新的功能特性、最佳化提升以及相關API的變動情況🚀~

2 geopandas 1.0版本介紹

  如果你還未曾安裝使用過geopandas,我最推薦的方式是新建虛擬環境,並在虛擬環境中透過conda-forge源進行穩定安裝,以當下非常流行的開源環境管理工具mamba(可參考我所寫的教程)為例,在終端執行下列命令(目前推薦Python版本為3.9),靜靜等待,即可一步到位完成最新版geopandas的安裝:

mamba create -n geopandas-env python=3.9 -y && mamba activate geopandas-env && mamba install geopandas -y

  而如果你已經安裝了先前版本的geopandas,那麼在你的對應環境下,終端執行下列命令即可進行版本升級:

mamba update geopandas -y
(資料科學學習手札162)Python GIS神器geopandas 1.0版本釋出

  新安裝或升級完成後,檢查一下版本變化,成功升級到1.0.0版本🥳:

(資料科學學習手札162)Python GIS神器geopandas 1.0版本釋出

2.1 新增API介紹

  首先我們來了解一下新版本geopandas中新增的部分主要的API:

2.1.1 新增count_geometries()方法

  新增方法count_geometries(),用於針對多部件要素計算單體要素數量:

(資料科學學習手札162)Python GIS神器geopandas 1.0版本釋出

2.1.2 新增count_interior_rings()方法

  新增方法count_interior_rings(),用於針對多邊形要素計算內環數量:

(資料科學學習手札162)Python GIS神器geopandas 1.0版本釋出

2.1.3 新增relate_pattern()方法

  新增方法relate_pattern(),用於計算要素之間是否滿足特定的DE-9IM(一種分別計算成對要素在內部、邊界、外部兩兩之間相交相離狀態的複雜空間模型)空間關係,具體的原理細節較多,我會在之後單獨撰文介紹,下面僅演示relate_pattern()的使用示例:

(資料科學學習手札162)Python GIS神器geopandas 1.0版本釋出

2.1.4 新增intersection_all()方法

  新增方法intersection_all(),用於計算向量列中全體要素的公共相交部分:

(資料科學學習手札162)Python GIS神器geopandas 1.0版本釋出

2.1.5 新增line_merge()方法

  新增方法line_merge(),用於快速合併一系列端點相交的線要素:

(資料科學學習手札162)Python GIS神器geopandas 1.0版本釋出

2.1.6 新增set_precision()、get_precision()方法

  新增方法set_precision()get_precision(),用於設定及獲取向量列的座標精度大小:

(資料科學學習手札162)Python GIS神器geopandas 1.0版本釋出

2.1.7 新增count_coordinates()方法

  新增方法count_coordinates(),用於快速計算向量列各要素座標點數量:

(資料科學學習手札162)Python GIS神器geopandas 1.0版本釋出

2.1.8 新增is_ccw屬性方法

  新增屬性方法is_ccw,用於針對座標點數量大於等於4個的線要素,判斷其座標串方向是否符合逆時針方向:

(資料科學學習手札162)Python GIS神器geopandas 1.0版本釋出

2.1.9 新增is_closed屬性方法

  新增屬性方法is_closed,用於判斷線要素是否起點終點相同:

(資料科學學習手札162)Python GIS神器geopandas 1.0版本釋出

2.1.10 新增force_2d()、force_3d()方法

  新增方法force_2d()force_3d(),用於將向量列強制去除z軸座標、強制新增z軸座標:

(資料科學學習手札162)Python GIS神器geopandas 1.0版本釋出

2.1.11 新增voronoi_polygons()方法

  新增方法voronoi_polygons(),用於基於整體向量列的所有頂點,快速生成泰森多邊形:

(資料科學學習手札162)Python GIS神器geopandas 1.0版本釋出

2.1.12 新增contains_properly()方法

  新增方法contains_properly(),用於快捷判斷向量A是否嚴格包含向量B,與contains()方法的區別是,contains_properly()不允許作比較的向量間有任何公共點:

(資料科學學習手札162)Python GIS神器geopandas 1.0版本釋出

2.1.13 新增build_area()方法

  新增方法build_area(),用於基於一系列可以構成閉合面要素的線要素,整體生成合法的若干多邊形:

(資料科學學習手札162)Python GIS神器geopandas 1.0版本釋出

2.1.14 新增snap()方法

  新增方法snap(),用於將滿足距離閾值要求的要素A掛靠到對應的要素B之上:

(資料科學學習手札162)Python GIS神器geopandas 1.0版本釋出

2.1.15 新增transform()方法

  新增方法transform(),用於基於自定義座標偏移函式,實現對向量要素的座標轉換,其中自定義函式的輸入為N行2列後N行3列的numpy陣列,輸出形狀與輸入一致即可,我們可以配合numpy中的apply_along_axis()實現自由的座標點級別轉換計算,而無需關心輸入的要素是點線面中的哪種:

(資料科學學習手札162)Python GIS神器geopandas 1.0版本釋出

2.1.16 新增get_geometry()方法

  新增方法get_geometry(),用於將向量列各要素視作多部件要素,進行快捷位序索引:

(資料科學學習手札162)Python GIS神器geopandas 1.0版本釋出

2.1.17 新增dwithin()方法

  新增方法dwithin(),用於快速判斷向量A是否在向量B目標的指定距離內:

(資料科學學習手札162)Python GIS神器geopandas 1.0版本釋出

2.1.18 新增to_geo_dict()方法

  新增方法to_geo_dict(),用於將GeoDataFrame快捷轉化為GeoJSON格式字典資料結構:

(資料科學學習手札162)Python GIS神器geopandas 1.0版本釋出

2.2 功能增強

  接下來我們來了解新版本中獲得功能增強的一些主要API:

2.2.1 空間連線新增dwithin型空間關係判斷

  針對sjoin()方法,新增了dwithin型空間關係判斷,使得我們可以在geopandas中真正意義上直接實現“匹配與目標要素距離在XXX以內的紀錄行”:

(資料科學學習手札162)Python GIS神器geopandas 1.0版本釋出

2.2.2 配合pd.read_csv指定向量列型別

  在新版本中,我們可以將GeoDataFrame寫出為csv格式,並在使用pd.read_csv()讀取時,透過dtype引數將對應列指定解析為向量型別:

(資料科學學習手札162)Python GIS神器geopandas 1.0版本釋出

2.2.3 to_json()新增引數show_bbox、drop_id、to_wgs84

  針對GeoDataFrame.to_json(),新增引數show_bboxdrop_idto_wgs84,實現更為定製化的GeoJSON轉化:

demo_gdf = gpd.GeoDataFrame(
    {
        'name': ['示例要素'],
        'geometry': [Point(106, 29)]
    },
    crs='EPSG:4524'
)
print(demo_gdf.to_json(
    ensure_ascii=False,
    indent=4,
    show_bbox=True,
    drop_id=True,
    to_wgs84=False
))
(資料科學學習手札162)Python GIS神器geopandas 1.0版本釋出

2.2.4 空間連線新增引數on_attribute

  針對GeoDataFrame.sjoin(),新增引數on_attribute,用於額外施加常規表連線中的指定欄位相等條件,相當於設定有效的on_attribute引數後,空間連線的結果將既滿足空間關係,又滿足欄位匹配關係:

(資料科學學習手札162)Python GIS神器geopandas 1.0版本釋出

2.3 標記為廢棄的API

  新版本中也新增了一系列標記為廢棄的API,將會在未來某個版本正式移除,請注意及時調整你的相關程式碼邏輯,其中主要的有:

  • unary_union將廢棄,更換為union_all()
(資料科學學習手札162)Python GIS神器geopandas 1.0版本釋出
  • use_pygeos將廢棄並在1.1版本中正式移除

  由於pygeos已經合併入geopandas底層向量計算所依賴的新版shapely中,因此對應的use_pygeos設定項也將退出歷史舞臺:

(資料科學學習手札162)Python GIS神器geopandas 1.0版本釋出
  • crs屬性賦值以修改座標系的方式將在未來版本被禁用,請統一使用set_crs()代替
(資料科學學習手札162)Python GIS神器geopandas 1.0版本釋出

  篇幅有限,未能詳盡介紹全部新版本內容,完整的更新日誌請移步:https://github.com/geopandas/geopandas/releases/tag/v1.0.0


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

相關文章