添加微訊號 " CNFeffery "
備註 " 數據分析 " 加 入技術交流群
❝
本文完整程式碼及附件已上傳至我的
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
(可參考我所寫的教程
mamba使用教程
公眾號:Python大數據分析
)為例,在終端執行下列命令(目前推薦
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 新增interp_all()方法
新增方法
interp_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
以上就是本文的全部內容,歡迎在評論區與我們進行討論~
加入知識星球 【我們談論數據科學】
600+ 小夥伴一起學習!
· 推薦閱讀 ·