本文完整程式碼及附件已上傳至我的
Github
倉庫https://github.com/CNFeffery/DataScienceStudyNotes
1 簡介
大家好我是費老師,就在昨天,Python
生態中著名的GIS
分析庫geopandas
釋出了其1.0.0
正式版本。
歷經10年迭代升級,geopandas
充分完善了其在GIS
資料分析上的功能,使得我們可以使用類似pandas
的操作方式,便捷且高效能的開展各種常用的GIS
分析運算,極大增強了Python
在GIS
分析領域的能力。
今天的文章,費老師我就將帶大家一起快速瞭解在全新的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
新安裝或升級完成後,檢查一下版本變化,成功升級到1.0.0
版本🥳:
2.1 新增API介紹
首先我們來了解一下新版本geopandas
中新增的部分主要的API:
2.1.1 新增count_geometries()方法
新增方法count_geometries()
,用於針對多部件要素計算單體要素數量:
2.1.2 新增count_interior_rings()方法
新增方法count_interior_rings()
,用於針對多邊形要素計算內環數量:
2.1.3 新增relate_pattern()方法
新增方法relate_pattern()
,用於計算要素之間是否滿足特定的DE-9IM(一種分別計算成對要素在內部、邊界、外部兩兩之間相交相離狀態的複雜空間模型)空間關係,具體的原理細節較多,我會在之後單獨撰文介紹,下面僅演示relate_pattern()
的使用示例:
2.1.4 新增intersection_all()方法
新增方法intersection_all()
,用於計算向量列中全體要素的公共相交部分:
2.1.5 新增line_merge()方法
新增方法line_merge()
,用於快速合併一系列端點相交的線要素:
2.1.6 新增set_precision()、get_precision()方法
新增方法set_precision()
、get_precision()
,用於設定及獲取向量列的座標精度大小:
2.1.7 新增count_coordinates()方法
新增方法count_coordinates()
,用於快速計算向量列各要素座標點數量:
2.1.8 新增is_ccw屬性方法
新增屬性方法is_ccw
,用於針對座標點數量大於等於4個的線要素,判斷其座標串方向是否符合逆時針方向:
2.1.9 新增is_closed屬性方法
新增屬性方法is_closed
,用於判斷線要素是否起點終點相同:
2.1.10 新增force_2d()、force_3d()方法
新增方法force_2d()
、force_3d()
,用於將向量列強制去除z軸座標、強制新增z軸座標:
2.1.11 新增voronoi_polygons()方法
新增方法voronoi_polygons()
,用於基於整體向量列的所有頂點,快速生成泰森多邊形:
2.1.12 新增contains_properly()方法
新增方法contains_properly()
,用於快捷判斷向量A是否嚴格包含向量B,與contains()
方法的區別是,contains_properly()
不允許作比較的向量間有任何公共點:
2.1.13 新增build_area()方法
新增方法build_area()
,用於基於一系列可以構成閉合面要素的線要素,整體生成合法的若干多邊形:
2.1.14 新增snap()方法
新增方法snap()
,用於將滿足距離閾值要求的要素A掛靠到對應的要素B之上:
2.1.15 新增transform()方法
新增方法transform()
,用於基於自定義座標偏移函式,實現對向量要素的座標轉換,其中自定義函式的輸入為N行2列後N行3列的numpy
陣列,輸出形狀與輸入一致即可,我們可以配合numpy
中的apply_along_axis()
實現自由的座標點級別轉換計算,而無需關心輸入的要素是點線面中的哪種:
2.1.16 新增get_geometry()方法
新增方法get_geometry()
,用於將向量列各要素視作多部件要素,進行快捷位序索引:
2.1.17 新增dwithin()方法
新增方法dwithin()
,用於快速判斷向量A是否在向量B目標的指定距離內:
2.1.18 新增to_geo_dict()方法
新增方法to_geo_dict()
,用於將GeoDataFrame
快捷轉化為GeoJSON
格式字典資料結構:
2.2 功能增強
接下來我們來了解新版本中獲得功能增強的一些主要API:
2.2.1 空間連線新增dwithin型空間關係判斷
針對sjoin()
方法,新增了dwithin
型空間關係判斷,使得我們可以在geopandas
中真正意義上直接實現“匹配與目標要素距離在XXX以內的紀錄行”:
2.2.2 配合pd.read_csv指定向量列型別
在新版本中,我們可以將GeoDataFrame
寫出為csv
格式,並在使用pd.read_csv()
讀取時,透過dtype
引數將對應列指定解析為向量型別:
2.2.3 to_json()新增引數show_bbox、drop_id、to_wgs84
針對GeoDataFrame.to_json()
,新增引數show_bbox
、drop_id
、to_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
))
2.2.4 空間連線新增引數on_attribute
針對GeoDataFrame.sjoin()
,新增引數on_attribute
,用於額外施加常規表連線中的指定欄位相等條件,相當於設定有效的on_attribute
引數後,空間連線的結果將既滿足空間關係,又滿足欄位匹配關係:
2.3 標記為廢棄的API
新版本中也新增了一系列標記為廢棄的API,將會在未來某個版本正式移除,請注意及時調整你的相關程式碼邏輯,其中主要的有:
unary_union
將廢棄,更換為union_all()
use_pygeos
將廢棄並在1.1
版本中正式移除
由於pygeos
已經合併入geopandas
底層向量計算所依賴的新版shapely
中,因此對應的use_pygeos
設定項也將退出歷史舞臺:
crs
屬性賦值以修改座標系的方式將在未來版本被禁用,請統一使用set_crs()
代替
篇幅有限,未能詳盡介紹全部新版本內容,完整的更新日誌請移步:https://github.com/geopandas/geopandas/releases/tag/v1.0.0
以上就是本文的全部內容,歡迎在評論區與我們進行討論~