资讯动态

用Python+QGIS玩转全国25万地质灾害点数据:从Excel/Shapefile到风险地图的保姆级教程

发布时间:2026/8/11 15:16:59 来源:尧图企业网站定制
用PythonQGIS玩转全国25万地质灾害点数据从Excel/Shapefile到风险地图的保姆级教程当25万条地质灾害记录摆在面前时大多数人的第一反应可能是无从下手。这些包含崩塌、滑坡、泥石流等七大类灾害的空间数据既是宝藏也是迷宫。本文将带你用Python和QGIS这两把瑞士军刀从原始数据清洗到专业地图输出一步步解开这个空间数据谜题。1. 环境准备与数据初探工欲善其事必先利其器。我们需要配置一个既能处理地理空间数据又能进行高效分析的工作环境。推荐使用Anaconda创建专属Python环境conda create -n geo_env python3.9 conda activate geo_env conda install -c conda-forge geopandas pandas numpy matplotlib jupyterlab对于QGIS建议下载最新的LTR长期支持版本以获得最佳稳定性。安装完成后别忘了在Python环境中注册QGIS的路径import sys sys.path.append(/Applications/QGIS.app/Contents/Resources/python) from qgis.core import *数据加载是第一步但25万行的Excel文件直接读取可能会内存溢出。这时可以分块处理import pandas as pd chunks pd.read_excel(geohazards.xlsx, chunksize10000) geo_df pd.concat([chunk for chunk in chunks])提示遇到中文编码问题时尝试指定encodinggb18030参数这个编码能覆盖绝大多数中文文本情况。2. 数据清洗与空间化处理原始数据往往存在坐标缺失、字段混杂等问题。我们需要先进行数据体检print(f缺失值统计\n{geo_df.isnull().sum()}) print(f唯一值统计\n{geo_df.nunique()})常见的数据问题及处理方法问题类型检测方法解决方案坐标缺失isnull()检查反向地理编码补全坐标漂移范围合理性检查坐标系转换修正属性异常唯一值分析数据字典映射标准化重复记录几何哈希值比对基于时间戳去重将清洗后的数据转换为GeoDataFrame是空间分析的关键一步from geopandas import GeoDataFrame from shapely.geometry import Point geometry [Point(xy) for xy in zip(geo_df[经度], geo_df[纬度])] gdf GeoDataFrame(geo_df, geometrygeometry, crsEPSG:4326)3. QGIS可视化基础与进阶技巧在QGIS中加载数据后通过图层属性可以快速实现基础可视化。但专业地图需要更多定制分类渲染按灾害类型设置不同符号热力图基于威胁人口/财产生成密度图聚类显示解决点要素重叠问题时间轴展示灾害时空演变制作热力图的Python实现import numpy as np from scipy.stats import gaussian_kde coords np.vstack([gdf.geometry.x, gdf.geometry.y]) kde gaussian_kde(coords, weightsgdf[威胁财产]) xgrid np.linspace(gdf.geometry.x.min(), gdf.geometry.x.max(), 100) ygrid np.linspace(gdf.geometry.y.min(), gdf.geometry.y.max(), 100) Xgrid, Ygrid np.meshgrid(xgrid, ygrid) Z kde(np.vstack([Xgrid.ravel(), Ygrid.ravel()]))在QGIS中可以通过处理工具箱中的热图算法实现类似效果并支持实时参数调整。4. 空间分析与风险模型构建基础可视化之后我们需要更深入的空间分析来提取有价值的信息。常见分析包括核密度分析识别灾害热点区域空间自相关检测灾害聚集模式缓冲区分析评估基础设施风险叠加分析结合地形、地质数据使用geopandas进行空间连接示例import geopandas as gpd # 加载行政区划数据 admin gpd.read_file(admin_boundaries.shp) # 空间连接统计灾害数量 result gpd.sjoin(gdf, admin, howinner, opwithin) count_by_region result.groupby(region_name).size()风险指数计算模型可以这样构建gdf[risk_index] (gdf[灾害等级] * 0.4 gdf[威胁人口] * 0.3 gdf[威胁财产] * 0.3)5. 专业地图输出与动态报告最终成果需要以专业地图形式呈现。QGIS的打印布局工具提供了丰富的制图元素比例尺根据地图用途选择适当比例图例分类清晰避免冗余指北针保持地图方向感格网便于坐标定位标注关键信息突出显示Python自动化输出多幅地图的脚本from qgis.core import QgsProject, QgsPrintLayout project QgsProject.instance() manager project.layoutManager() template risk_map_template.qpt for region in regions: layout QgsPrintLayout(project) layout.initializeDefaults() layout.loadFromTemplate(QgsReadWriteContext(), template) # 更新地图范围和数据 manager.addLayout(layout) layout.exportToPdf(foutput/{region}_risk_map.pdf)6. 实战案例省级地质灾害风险评估以某省数据为例完整工作流包括数据预处理清洗、转换坐标系空间分析计算各县市灾害密度风险评估构建多指标评价体系可视化表达分级设色图表结合成果输出PDF报告交互式Web地图关键指标权重分配表指标权重计算方法灾害密度30%数量/面积灾害类型20%类型多样性指数人口暴露25%威胁人口总和经济暴露25%威胁财产总和在完成这个案例后我发现最耗时的环节往往是数据清洗和坐标系转换。一个实用的建议是在处理省级数据时先统一转换为该省常用的投影坐标系如CGCS2000省域网可以显著提高分析精度和速度。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价