简介:这份中国喀斯特岩溶空间分布矢量数据集面向GIS、地理学与地质环境领域的研究人员和学生,用于岩溶地貌区域划分、溶蚀作用模拟及地质灾害监测等空间分析场景。资源包共8个文件,约1.2MB,以SHP格式为核心,配套shx与sbn/sbx索引、dbf属性表、prj坐标系统定义、cpg存储参数及shp.xml元数据,构成可直接在GIS软件中读取的完整数据集。数据以面状Polygon记录岩溶地块边界,属性含rock_type岩性分类(连续与不连续碳酸盐岩)、Shape_Area与Shape_Len面积周长、RTypeLabel岩性文本标签,便于快速筛选与统计。目前已有263人学习下载,适合需要一手空间数据开展岩溶地貌分析与制图的读者参考使用。
1. 喀斯特岩溶空间分布矢量数据集:从一张 SHP 说起
做西南地区水文、地质灾害或生态评估的同行,大概率都遇到过同一个尴尬:手头有 DEM、有降雨、有土壤,唯独缺一层靠谱的岩溶分布底图。喀斯特(岩溶)空间分布矢量数据集,本质就是把可溶岩层的出露范围、类型和边界,落成一份带属性表的 SHP 面文件,让你能在 ArcGIS 或 QGIS 里直接叠加、裁剪、统计。它解决的不是“画得好看”,而是“算得准”——溶蚀速率、塌陷易发区、地下水分区,全都依赖这层边界。适合谁?做县域尺度地质环境评价的、跑 SWAT 或 MODFLOW 前处理的人、以及需要把岩溶范围转成 WKT 或渔网统计单元的工程人员。这一层数据选错,后面所有模型都是沙上建塔。
2. 岩溶矢量数据从哪来:三种主流来源与选型逻辑
2.1 公开地质图数字化:最稳但最费工
国内可用的岩溶分布底图,绕不开 1:20 万和 1:50 万区域地质调查图。这些图件以扫描件或 PDF 形式存在,需要矢量化。常见做法是:先做地理配准,再对可溶岩地层(如灰岩、白云岩、白云质灰岩)逐层描边。选型上,1:20 万精度够县域评价用,1:50 万只适合省级概览。判断标准很简单——你的研究区如果小于一个县,1:50 万的边界误差可能比你的缓冲区还大。
矢量化时不要一上来就全图描。先按地层代号筛选,只保留可溶岩组。属性表至少要有:地层代号、岩性大类、可溶性强弱。可溶性强弱可以按“纯灰岩 > 白云质灰岩 > 不纯灰岩 > 泥灰岩”分四级,这是后续做分区统计的关键字段。
2.2 从 DEM 间接提取:快但只能做辅助
热搜里常出现“arcgis从dem的提分文件提取shp”,这条路对岩溶分布只能算间接。DEM 本身不包含岩性信息,但喀斯特地貌有典型特征:峰丛、峰林、溶洼、天窗。你可以用坡度、地形起伏度、曲率做组合阈值,圈出“疑似岩溶地貌区”。具体参数我一般这样设:坡度 15°~45°、地形起伏度大于 30 m、曲率变率高的区域。但必须说清楚——这是地貌推断,不是岩性边界。它只能用来校验你数字化出来的岩溶范围是否合理,不能替代地质图。
2.3 已有矢量数据整合:注意坐标系和拓扑
如果你拿到的是别人整理的 SHP,第一件事不是打开看,而是查坐标系。岩溶数据常见的有 CGCS2000、WGS84、西安80,甚至有些老数据是北京54。坐标系不统一,叠加时偏移几百米是常事。第二件事是查拓扑:面是否闭合、有没有自相交、相邻面之间有没有缝隙或重叠。用 QGIS 的“拓扑检查器”或 ArcGIS 的“检查几何”工具跑一遍。有重叠的面在后续做面积统计时会重复计算,这是血泪经验。
提示:拿到任何岩溶 SHP,先做
Define Projection确认坐标系,再做Project统一到你的工作坐标系,顺序不能反。
3. 把岩溶 SHP 用起来:裁剪、统计与格式转换
3.1 按县域边界裁剪并统计岩溶面积占比
这是最常见的需求。你有一个县域行政区划边界 SHP,想算每个县的岩溶面积占比。核心命令用 GDAL 的ogr2ogr加-clipsrc就能跑,但更灵活的是用 Python 的 geopandas。
import geopandas as gpd # 读取岩溶分布和县域边界 karst = gpd.read_file("karst_distribution.shp") counties = gpd.read_file("county_boundary.shp") # 统一坐标系,以县域边界为准 karst = karst.to_crs(counties.crs) # 按县域裁剪 karst_clip = gpd.overlay(karst, counties, how="intersection") # 计算每个县的岩溶面积(投影坐标系下单位是米) karst_clip["karst_area"] = karst_clip.geometry.area counties["total_area"] = counties.geometry.area # 汇总到县 summary = karst_clip.groupby("county_name")["karst_area"].sum().reset_index() summary = summary.merge( counties[["county_name", "total_area"]], on="county_name" ) summary["karst_ratio"] = summary["karst_area"] / summary["total_area"] print(summary[["county_name", "karst_ratio"]])逻辑说明:overlay的intersection会把岩溶面切成县域内的碎片,再按县名分组求和。参数上,to_crs必须做,否则面积算出来是度平方,毫无意义。karst_ratio就是你要的岩溶面积占比。如果某个县没有岩溶,它不会出现在summary里,需要左连接补零。
3.2 SHP 转 WKT、TXT 和 3DTiles 的实操
热搜里“shp格式矢量数据导出为wkt”“shp转txt”“shp转3dtiles”都是高频操作。转 WKT 用 geopandas 一行搞定:
# 导出为 WKT 文本,保留属性 karst["wkt"] = karst.geometry.apply(lambda geom: geom.wkt) karst[["地层代号", "岩性", "wkt"]].to_csv("karst_wkt.csv", index=False)转 TXT 通常是为了给其他程序读坐标,可以用to_file加driver="CSV",但注意 CSV 里的几何默认是 WKT。转 3DTiles 需要先把面拉伸成体,常用工具是py3dtiles或 Cesium 的3d-tiles-tools,但岩溶面本身是二维的,拉伸高度建议用 10~50 米做示意,不要用真实高程,否则会跟地形打架。
3.3 渔网分割与分区统计
“渔网分割shp”在岩溶研究里很实用:把研究区切成 1km×1km 的格网,统计每个格网内的岩溶面积占比,再做空间自相关。用 QGIS 的“创建网格”工具生成渔网,然后跟岩溶面做intersection,最后按网格 ID 汇总。参数上,网格大小取决于你的研究尺度——县域用 500m,省域用 1km 或 2km。网格太小,计算量爆炸;太大,空间异质性被抹平。
4. 避坑与排查:岩溶 SHP 处理中的五个翻车现场
4.1 坐标系“看起来对”但面积算错
现象:两个图层在 ArcGIS 里叠得严丝合缝,但面积统计结果跟实际差了一个数量级。原因:数据框坐标系是地理坐标系(度),而图层本身是投影坐标系,或者反过来。ArcGIS 会动态投影显示,但计算面积时用的是数据框坐标系。解决:在属性表里新建字段,用Calculate Geometry时明确选择投影坐标系,或者统一用 geopandas 的to_crs转到投影坐标系再算。
4.2 面自相交导致裁剪失败
现象:overlay报错TopologyException,或者裁剪结果缺了一块。原因:数字化时手抖,面边界交叉了。解决:用karst.geometry.is_valid检查,对无效几何用buffer(0)修复。但buffer(0)会轻微改变边界,对精度要求高的场景,还是回原图重新描。
4.3 属性表字段类型混乱
现象:地层代号明明是“C1”,读进来变成“C1.0”或者乱码。原因:SHP 的 DBF 字段类型和编码问题。解决:读入时指定encoding="gbk"或utf-8,字段类型在导出前统一转成字符串。如果已经乱了,用astype(str)强转,再str.replace清理。
4.4 渔网统计时面积重复计算
现象:所有网格的岩溶面积加起来,比总岩溶面积大。原因:岩溶面跨网格时,intersection会把它切分,但如果原始面有重叠,切分后重叠部分被算了两次。解决:先对岩溶面做dissolve消除内部重叠,再跟渔网相交。
4.5 转 3DTiles 后位置偏移
现象:在 Cesium 里加载 3DTiles,模型飘到别的地方去了。原因:3DTiles 需要 EPSG:4978(地心坐标系),而你的 SHP 是平面坐标系。解决:先用pyproj转到 EPSG:4979(经纬度+高程),再转 4978。或者直接用 Cesium ion 的上传工具,它会自动处理。
5. 进阶技巧:用岩溶 SHP 做溶蚀速率分区验证
岩溶分布数据最值钱的用法,是跟水化学数据结合算溶蚀速率。我一般这样做:先按岩性把岩溶面分成“纯灰岩”“白云岩”“不纯碳酸盐岩”三类,每类选几个代表性泉点,用泉水的水化学数据算溶蚀速率(用HCO3-和流量估算)。然后把速率值挂到对应的岩溶面上,做分区统计。如果某类岩性的速率异常低,要么是数据错了,要么是边界划错了。
验证方法很简单:拿你的岩溶边界去叠 DEM 提取的峰丛洼地范围,重合度低于 70% 就说明边界有问题。这个阈值是我踩坑踩出来的——低于 70%,后面所有分区结果都不可信。
最后一个习惯:每次处理完岩溶 SHP,我都会导出一份karst_metadata.txt,记录坐标系、字段含义、数据来源、处理日期。这东西平时没用,等半年后你忘了当初怎么处理的,它就是后悔药。希望帮到你。
本文还有配套的精品资源,点击获取