? ? ? ? 之前發過使用批量合并矢量數據的文章:【Python&GIS】基于Python批量合并矢量數據,正好前段時間有需求把矢量數據進行融合,然后就編了一段融合矢量數據的代碼。今天就和大家分享一下如何使用Python對矢量數據實現融合的操作。
1.定義
? ? ? ? 首先大家要明白矢量數據的合并和融合有什么區別!合并是指將多個shp合并成1個shp,而融合是指將1個shp中的多個要素融合成1個要素。如下所示:
2.代碼部分
? ? ? ? 我們這里使用geopandas和shapely.geometry兩個庫,使用geopandas內置的函數實現矢量數據的融合。
# -*- coding: utf-8 -*-
"""
@Time : 2024/1/22 16:09
@Auth : RS迷途小書童
@File :Vector Data Integrate.py
@IDE :PyCharm
@Purpose:融合矢量數據,多面成單面
@Web:博客地址:https://blog.csdn.net/m0_56729804
"""
import geopandas as gpd
from shapely.geometry import Polygon, MultiPolygondef integrate_shp(file1=r"彭俊喜/1.shp", file2=r"彭俊喜/2.shp"): # shp將多個圖層融合成一個圖層gdf = gpd.read_file(file1)crs_original = gdf.crs # 獲取坐標系信息# 確保所有的幾何對象都是Polygon類型gdf['geometry'] = gdf['geometry'].apply(lambda x: x if isinstance(x, Polygon) else x.convex_hull)# 將所有面合并為一個面merged_polygon = gdf['geometry'].unary_union# 將結果保存到新的shp文件中output_gdf = gpd.GeoDataFrame({'geometry': merged_polygon}, index=[0]).set_crs(crs_original)output_gdf.to_file(file2, driver='ESRI Shapefile')if __name__ == "__main__":path1 = "" # 輸入矢量文件path2 = "" # 輸出融合后的路徑integrate_shp(path1, path2) # 調用函數
3.總結
? ? ? ? 融合、合并、創建、修改屬性表等都是矢量數據的常見操作,同時也是每個GISer必備的技能,我會不定期地在博客上分享一些自己在進行RS、GIS工作時使用到的代碼以及學習經驗。如果大家感興趣可以點個關注,有什么問題可以評論或者私信!