Shape文件双热力图叠加分析:提取仅蓝色热力图覆盖区域
基于Python的Shape格式热力图空间交叉分析方案
核心思路(规避图像化精度损失)
直接对Shape文件的矢量热力图层执行空间运算,借助GIS空间分析中的「差集(Difference)」操作,精准提取热力图a(蓝色内部数据)中不与热力图b(红色外部数据)重叠的区域,全程保留矢量数据的原生精度,不会出现尺度丢失问题。
批量实现步骤
1. 依赖库安装
使用geopandas处理Shape文件,shapely完成空间运算,先执行安装命令:
pip install geopandas shapely
2. 批量处理代码示例
假设你的Shape文件集中存放于shape_files目录,命名规则为heatmap_a_xxx.shp、heatmap_b_xxx.shp,批量处理代码如下:
import geopandas as gpd import os # 定义输入输出目录 input_dir = "shape_files" output_dir = "only_blue_results" os.makedirs(output_dir, exist_ok=True) # 遍历并配对处理文件 for file_name in os.listdir(input_dir): if file_name.startswith("heatmap_a_") and file_name.endswith(".shp"): # 匹配对应的热力图b文件 a_shp_path = os.path.join(input_dir, file_name) b_shp_name = file_name.replace("heatmap_a_", "heatmap_b_") b_shp_path = os.path.join(input_dir, b_shp_name) if not os.path.exists(b_shp_path): print(f"未找到对应b文件{b_shp_name},跳过当前a文件") continue # 读取矢量数据 gdf_a = gpd.read_file(a_shp_path) gdf_b = gpd.read_file(b_shp_path) # 统一坐标系(空间运算的必要前提) if gdf_a.crs != gdf_b.crs: gdf_b = gdf_b.to_crs(gdf_a.crs) # 执行差集运算,提取仅a覆盖的区域 gdf_result = gpd.overlay(gdf_a, gdf_b, how="difference") # 保存结果文件 result_file_name = f"only_blue_{file_name}" result_file_path = os.path.join(output_dir, result_file_name) gdf_result.to_file(result_file_path) print(f"处理完成:{result_file_name}")
关键注意事项
- 坐标系统一:两个热力图层必须使用相同的坐标系(如WGS84、UTM),否则空间运算会报错,代码已自动处理坐标系转换。
- 图层类型匹配:确保热力图a和b为同类型矢量图层(如均为面图层),若原始是点/线格式的热力数据,需先通过核密度分析转为面图层后再执行运算。
- 大文件优化:若Shape文件体积较大,可通过
gdf.simplify()简化矢量要素顶点数,或采用分片处理方式提升运算效率。
内容的提问来源于stack exchange,提问作者lagnaoui jihane
相关产品推荐
相关产品推荐

