简介:全国地质灾害点空间矢量shp数据包,汇集了崩塌、塌陷、泥石流、地面沉降、地裂缝、滑坡、不稳定斜坡七类灾害点的空间位置,适用于地理信息、灾害防治、城乡规划及科研教学等场景。压缩包共十八个文件,内含三个SHP矢量主文件及配套的属性表、空间索引、投影坐标、字符编码、元数据文件,结构清晰,可直接在主流地理信息软件中加载使用,包体约40.49MB。该数据可用于地质灾害监测预警、风险评估与防治规划,也可支撑成因分析、历史灾情重建及趋势预测等研究,为有关部门制定灾害预防和应急响应措施提供依据。目前已有267人学习下载。借助多类灾害点的空间分布与属性信息,使用者可快速构建灾害专题地图,为城乡规划、工程建设及土地利用等提供基础数据支撑。
1. 全国地质灾害点空间矢量shp分布数据:一张图装下七类隐患点
做防灾减灾规划的朋友最近给我传了一份全国地质灾害点空间矢量shp数据,解压后从崩塌、塌陷、泥石流、地面沉降、地裂缝、滑坡到不稳定斜坡,七类灾害点全部按统一字段归类。每条记录带着经纬度坐标、灾害编号、规模等级和威胁人口信息,直接在ArcGIS或QGIS里叠加到影像底图上就能用。这篇文章,我会把这份shp数据的字段含义、加载出图、格式转换和常见坑位全部过一遍,帮你在做灾害易发性评价或应急管理专题时少走弯路。
2. 先懂数据再动手:七类灾害编码、字段结构与shp文件家族
2.1 七类地质灾害点的分类逻辑与识别特征
地质灾害点空间矢量数据里的七类分类不是随手贴的标签,每一类背后都有明确的现场识别特征和成灾模式,数据处理前先搞清楚这些,才不会在符号化和统计分析时把类型弄混。
崩塌,指陡坡上的岩土体在重力作用下突然脱离母体、向下翻滚坠落的现象。这类点通常分布在公路切坡、矿山边坡和河谷陡岸,特征是坡面有新鲜卸荷裂隙、坡脚有坠落堆积物。在shp数据里,崩塌点往往是对现场“已发灾害”或“潜在隐患”的位置标记,属性里一般会带上规模体积描述。
塌陷则完全不同,它指向覆盖层或岩溶区在地下水渗蚀、地表水冲蚀下形成的地面坑洞。华北平原、两广和西南岩溶区的塌陷点密度明显偏高。这类点如果只给坐标,不结合地下水位和岩性条件看,很容易误判。野外调查时塌陷点通常能看到明显近圆形坑壁或渗水通道。泥石流的点记录的是沟谷或坡面上的泥石流物源区和流通区位置,一般分布在植被稀疏、沟床纵坡大的山区沟道内。这类点最典型的属性信息是流域面积和堆积扇范围,用来做危险性分级很有价值。
地面沉降点多位于长三角、华北平原等深层地下水超采区,特征是覆盖范围大、沉降速率缓。在矢量数据里以点记录时,通常代表沉降中心或监测孔位置,一个沉降区往往有多个点,做空间分析时需要注意去重。地裂缝点是七类里最“线性”的灾害,表现为地表岩土体拉开形成裂缝带,陕西关中一带分布最典型。滑坡点不用多讲,是所有灾害里研究最充分的一类,分布在顺层坡、堆积体坡和人工切坡段。不稳定斜坡点则是一个偏“预防”的分类,指斜坡目前还没失稳,但已有变形迹象,属于需要重点监测的对象。
说到底,这七类点本质上是各类灾害事件的“位置快照”。和CAD的dwg图纸不同,shp里的每条记录都带着属性上下文——灾害编号、类型代码、规模等级、威胁对象。这也是我拿到这份数据后第一件事就是打开属性表的原因:坐标只能告诉你“在哪”,属性才能告诉你“这是什么、有多严重”。另外要提醒一句,这些数据大多来自全国地质灾害普查和群测群防成果汇总,空间上能覆盖到县级行政区,但对镇村尺度仍是点状抽查,做宏观区划非常合适,做高精度村组级风险区划时还需要补充大比例尺现场调查。
2.2 属性表核心字段:从灾害编码到规模等级
打开shp属性表后,常见的字段构成大概如下表。不同批次的数据字段名可能略有差别,但核心信息基本一致。
| 字段名 | 类型 | 字段说明 |
|---|---|---|
| FID | 整型 | 要素内部序号 |
| Shape | 点几何 | 空间位置(经纬度坐标) |
| DISASTER_ID | 字符型 | 灾害点唯一编号 |
| DISASTER_TYPE | 字符型 | 灾种类型代码 |
| NAME | 字符型 | 灾害点名称 |
| LONGITUDE | 双精度 | 经度(十进制度) |
| LATITUDE | 双精度 | 纬度(十进制度) |
| SCALE_LEVEL | 字符型 | 规模等级(巨型/大型/中型/小型) |
| THREATEN_POP | 整型 | 威胁人口数 |
| LOCATION | 字符型 | 详细位置描述 |
DISASTER_TYPE字段里,崩塌常见代码是BT,塌陷是TX,泥石流是NSL,地面沉降是DMC,地裂缝是DLX,滑坡是HP,不稳定斜坡是BWDXP。如果你拿到的数据代码不是这套,最好的方式是先做一遍频次统计(右键字段统计或使用Dissolve工具),把实际值和类别对应关系梳理出来,不要拿到手就按常见代码硬套。THREATEN_POP字段是灾害影响评估的核心量化指标,很多风险区划模型都用它做加权因子。如果原始调查记录缺失较多,这个字段的NULL值会很常见,用之前必须清洗,常见做法是把NULL统一填为0或用全县平均值插补。LONGITUDE和LATITUDE虽然看起来和Shape字段的坐标是一回事,但某些数据源的这两个字段与Shape几何坐标并不严格一致,空间计算时以Shape字段的几何坐标为准,手填的经纬度列只适合做表格对接。
2.3 shp不是单个文件:完整文件集合与坐标系细节
一个完整的shp文件最少包含四个配套文件:.shp存几何、.shx存索引、.dbf存属性、.prj存投影信息。缺少.prj文件是最常见的坑,没有它,ArcGIS不知道这个数据的坐标系,会直接按默认的WGS84处理,如果实际是CGCS2000或西安80,图层就会莫名其妙跑到海里或者和底图错位。.cpg文件保存了dbf属性表的字符编码,常见值有UTF-8、GB2312、GBK。如果你拿到的压缩包里只有.shp、.shx、.dbf三个文件而没有.prj和.cpg,那这个数据在工程里大概率要经过一轮“投影定义加编码修复”才能干净使用。判断数据坐标系快慢的经验是右键图层属性查看源信息,如果显示Unknown,就对照同区域其他成果数据的投影参数来补定,优先问提供方要坐标系的中央经线或投影带号,别自己瞎猜。
3. 在ArcGIS里加载出专业专题图:符号化、标注与出图三步曲
3.1 加载shp:先检查投影再拖进地图
ArcGIS Pro里加载shp本身没什么门槛,地图工程新建后,在目录窗格里展开文件夹连接,找到灾害点shp所在目录,右键选择“添加至当前地图”就行。关键在添加之后的第一件事:检查图层属性里的源坐标系,与底图坐标系做对比。
常见情况是灾害点shp是CGCS2000地理坐标系,而在线底图是Web Mercator投影,ArcGIS Pro会自动动态投影让两者视觉上叠在一起,看起来没问题。但如果你在这个状态下做距离计算、面积统计或者缓冲区分析,软件会按错误的投影尺度运算,结果偏得非常离谱。我一般会在地图属性里把底图坐标系设成与项目所在区域匹配的投影坐标系,例如CGCS2000_3_Degree_GK_CM_120E,再把灾害点图层和底图都统一到同一框架下。数据框的显示单位也要确认设置为米而不是度,否则后续量算工具的返回值会让人摸不着头脑。
3.2 分类符号化:七类点七种颜色一眼可辨
图层上右键打开符号系统(Symbology),把符号化方式选为“唯一值”,字段选择DISASTER_TYPE。然后为每个灾种手动分配颜色和形状:崩塌用深红色实心圆,滑坡用橙红色,泥石流用紫色,地面沉降用棕色,地裂缝用黑色,塌陷用暗青色,不稳定斜坡用黄色空心三角形。这样图面拉远时一眼能看出哪类灾害在哪个区域聚集。
如果DISASTER_TYPE字段里含有NULL或空值,单独给空值分配一种浅灰色,否则ArcGIS会把它画成默认白色,在浅色底图下完全看不见。做唯一值符号化时,字段值里的空格和全角字符也会被当成不同类别,先做一次字段清理(删除首尾空格、统一半角)再符号化,能避免图例里出现两个几乎同名的类别。符号化方案设置好后建议保存为图层文件(.lyrx或.lyr),下次加载新数据时直接套用,不用重新配一遍。
3.3 标注与图例:出图前最后收拾三个细节
标注字段一般选NAME或灾害编号,具体看制图比例尺。如果全国范围灾害点密度很大,标注打开后图面会被文字糊满,我的做法是设置标注随比例尺可见,在1:50万以下隐藏标注,放大到重点区域再显示。图例排版上,只保留当前地图视图中可见的类别,ArcGIS里右键图例删除对应项,QGIS则通过图层可见性控制。导出时设置300dpi以上,格式用PNG或PDF,并勾选“将标注转换为图形”,避免换一台机器打开工程时字体缺失导致标注乱跑。这三件事做完,专题图基本可以直接拿出去汇报了。
4. 格式转换不走弯路:shp转GeoJSON、WKT与3DTiles的实操命令
4.1 ogr2ogr一条命令:shp转GeoJSON并重投影
GDAL的ogr2ogr是所有矢量格式转换最趁手的工具,ArcGIS自带的Python环境或QGIS安装包里都包含它。命令行里写:
ogr2ogr -f GeoJSON disaster_geojson.geojson disaster_points.shp -t_srs EPSG:4326参数说明:-f GeoJSON指定输出格式;-t_srs EPSG:4326把数据重投影到WGS84经纬度坐标系。这一步很有必要,很多在线地图组件只认EPSG:4326的GeoJSON,如果你保留CGCS2000投影参数,前端叠加时会偏出几十公里。
只想导出某个灾种时,例如滑坡,加一个过滤条件:
ogr2ogr -f GeoJSON huapo.geojson disaster_points.shp -where "DISASTER_TYPE = 'HP'"-where参数相当于SQL的WHERE子句,注意字段值的大小写和引号写法,Windows命令行下双引号嵌套经常翻车,建议写成单引号在内的形式。
4.2 导出WKT与TXT:用Python或ogr2ogr喂数据给脚本
很多科研场景需要把shp转成WKT文本直接写入PostGIS或作为机器学习模型的输入。用Python的pyogrio读取shp导出WKT最简单:
import pyogrio gdf = pyogrio.read_dataframe('disaster_points.shp') with open('disaster_wkt.txt', 'w', encoding='utf-8') as f: for _, row in gdf.iterrows(): wkt = row.geometry.wkt f.write(f"{row['DISASTER_TYPE']}\t{wkt}\n")这里pyogrio读取速度比pyshp快很多,几万条点数据毫秒级读完。每行写入灾害类型和WKT,用制表符分隔,后续用pandas读进来做统计或训练都很方便。没有Python环境时,用ogr2ogr输出CSV格式的WKT一样能达到目的:
ogr2ogr -f CSV disaster_wkt.csv disaster_points.shp -lco GEOMETRY=AS_WKT生成的CSV第一列是WKT几何,后面跟着属性字段,这就是网上常说的“shp转txt”的便捷方案。日常快速查看数据时完全够用,唯一需要注意CSV默认没有编码参数,中文属性字段在Excel里打开会乱码,指定-lco ENCODING=UTF-8可以缓解。
4.3 从CAD的dwg到shp再到3DTiles:完整互操作链路
很多人手里还存着大量地质灾害隐患点的CAD图纸,dwg里的块(Block)对象要转成shp空间矢量数据,不能直接在ArcGIS里打开后复制粘贴。常规流程是先在CAD中把块炸开(Explode),保存为带坐标的dxf文件,再用ArcGIS Pro的“CAD转地理数据库”工具把dxf按图层引入。转换后得到的要素类通常在CAD点图层里,需要用Append工具追加进目标shp:
import arcpy target_fc = 'disaster_points.shp' source_fc = 'cad_points.gdb/cad_points' arcpy.Append_management(source_fc, target_fc, 'NO_TEST')Append工具要提前把字段映射关系设好,CAD图层里的Handle对应shp的DISASTER_ID,Layer字段对应DISASTER_TYPE,这样追加上去后属性不会错位。再往后做Web端三维展示,常需要把shp转成3DTiles。推荐先把shp转成GeoJSON(步骤见4.1),再送入CesiumLab或开源工具tile-cesium转换,设置高度字段和样式属性。如果直接转而不指定任何高度字段,3DTiles里的点会全部贴着地球表面铺开,视觉上就是一层平面点,完全看不出地形起伏关系。
5. 避坑手册:灾害点shp操作中的五个现场与排查方法
5.1 现象:图层漂移到海中央或非洲大陆
把shp添加到ArcGIS后,点图层显示在大西洋或者非洲中部,和底图完全不套合。原因绝大多数是坐标系不匹配:全国灾害点shp本身是CGCS2000或西安80投影坐标,而底图是WGS84经纬度,软件把投影坐标数值当成经纬度来画,当然会跑到海上去。解决方法是右键图层查看坐标系,如果显示Unknown或拿不准,先用“定义投影”工具手动赋一个正确坐标系,再用“投影”工具转换到目标坐标系。注意定义投影不改变坐标数值,只有投影转换才会重算坐标,这两步经常有人只做一半,看图层位置没变就以为修好了。
5.2 现象:属性表中文变成“口口”乱码
属性表里NAME、LOCATION字段的中文全是“口口口”或问号。原因是dbf属性表编码是GB2312写入,而ArcGIS Pro默认按UTF-8读取,两边编码集冲突。最快的排查方式是看有没有.cpg文件,有的话打开它看内容,是UTF-8就改,是GBK就改成匹配值,改完重新加载图层。没有.cpg文件时,可以用QGIS重新加载一次,在数据源管理里指定编码为GBK,没问题后另存一份shp,这样新文件会带正确的.cpg声明。Python批量修复的写法在2.3节提过,用dbfread按GBK读出来再按UTF-8写回去,适合一次性处理几十个shp的场景。
5.3 现象:查重时完全重合的两个点没被判重
做地质灾害点去重时,两个点坐标显示完全相同,用Find Identical却查不出来。原因是坐标数值显示精度与存储精度不一致:shp存的是双精度浮点数,一个点精确到7位小数,另一个精确到4位小数,显示时四舍五入看起来一样,但存储值不同。解决思路是把坐标近似到小数点后4位(约11米精度),再用新字段做聚合查重。ArcGIS字段计算器里用round函数,Python脚本则是:
arcpy.CalculateField_management('disaster_points.shp', 'LON_APPROX', 'round(!LONGITUDE!,4)', 'PYTHON3') arcpy.CalculateField_management('disaster_points.shp', 'LAT_APPROX', 'round(!LATITUDE!,4)', 'PYTHON3')再按LON_APPROX和LAT_APPROX两个字段做汇总。做华北平原地面沉降点清洗时,几十组重复点第4位小数才出现差异,肉眼根本看不出来,这个坑不踩过的人不会留意。
5.4 现象:字段名被截断成10个字符
属性表里出现DISASTER_I、THREATEN_这样明显的截断字段名。原因是shp基于dBASE III的dbf格式,字段名上限10个字符,超长会被自动截断,早期程序还可能补下划线。自己创建shp时字段命名就控制在10字符以内,建议用缩写方案:DISASTER_ID写成DIS_ID,THREATEN_POP写成POP_THREAT。如果是从File GeoDatabase或GeoJSON转过来的数据,转完后逐个比对字段清单,发现截断就马上重命名。大量字段需要保留完整名称时,干脆把数据导入gdb,File Geodatabase支持最长64字符字段名,不再有截断烦恼。
5.5 现象:裁剪后属性记录和原表对不上
用某个行政边界裁剪全国灾害点shp后,裁剪图层的属性表记录数和地图上可见的点数对不上,或者某些记录属性全空。原因在于Clip工具和Select by Location的判定逻辑不同:Clip严格按几何相交切分,边界线上的点可能被保留也可能被裁掉;Select by Location默认按“相交”规则,边界上的点即使只有极小部分相交也会被选中。裁剪前先用“修复几何”工具检查shp完整性,裁剪完成后立刻用“要素类完整性”验证。我自己的习惯是裁剪后顺手做一个按灾害类型的频次统计,和原表数量对比,偏差超过预期就返回上一步检查边界数据精度。行政区划shp如果来源不统一,边界套合偏差十几米很正常,这时优先按位置选择而不是Clip,或者给Clip设置一个极小搜索容差。
6. 把灾害点数据用起来:核密度分析圈定高发区的参数与验证
地质灾害易发性评价里最常用的操作,是把散点状的灾害点shp密度化。全国七类灾害点直接叠加到行政区划图,只能看到点在哪,但做核密度分析后,就能得到一张连续的灾害点密度栅格,用来圈定高发区。ArcGIS Pro里调用Spatial Analyst工具箱的核密度分析(Kernel Density),输入要素选全部灾害点,Population字段选None(每个点权重为1),输出像元大小建议设置为地图单位的四分之一到二分之一,比如数据框单位是米,那像元大小设成100米左右。搜索半径(带宽)是关键参数,对全国尺度我的做法是跑两套:第一遍用默认值做全局格局判断,第二遍缩小到默认值的五分之一到十分之一,圈出高发核心区。
密度栅格出来以后,按自然间断点分5级,取最高一级作为极高易发区。这里有一个必须做的验证动作:把极高易发区与县界做面积占比统计,或者与已知重大灾害点做叠加检验。如果极高易发区面积明显不合理,比如占全国陆地面积超过30%,说明带宽设得太大;如果碎片化小斑块一大堆,说明带宽太小。第一次做的时候我直接用了默认带宽,结果极高易发区把大半个西南山区都圈进来,图上一片红,被甲方质疑是统计参数没调好。第二次把带宽缩小一个数量级,又出现大量碎片化斑块,这些统计参数不试是不知道的,纯靠猜只会翻车。如果不想用核密度,也可以手动生成渔网对shp做分割,统计每个网格里的点数量,效果类似但边界更硬,适合需要按格网统计的场景。从那以后我每次做核密度分析,都会强制自己跑两套参数对比验证,再结合已有灾点核对一遍,这套流程帮我省了不少返工的麻烦。希望帮到你。
本文还有配套的精品资源,点击获取