全国地质图shp数据处理指南:坐标系、属性编码与格式转换 简介全国地质图矢量图层数据集以WGS84坐标系提供全国范围地层多边形shp数据面向GIS开发、地质信息制图及python数据分析用户可直接用于岩性分类、年代筛选、面积统计等场景。数据属性字段设计完整AREA记录地层多边形面积平方米PERIMETER记录周长米TYPE标注岩性GLG表示地表露头地质年代GEN_GLG则对跨时代单元进行“代”级别归纳减少自行整理地质年代的工作量。压缩包共5个文件覆盖标准shapefile必需的.shp几何文件、.prj投影定义、.dbf属性表、.shx空间索引及.xml元数据解压后即可在ArcGIS、QGIS和geopandas中加载使用。数据包大小9.04MB轻量便捷。已有2616人学习本数据集。对于需要快速搭建全国地质底图、开展区域地质对比或进行空间叠加分析的读者这份数据能省去坐标转换与字段整理的繁琐步骤直接作为项目基础图层使用。1. 全国地质图矢量图层数据集shp格式能直接拖进GIS的地质底图拿到全国地质图矢量图层数据集shp格式的同行十有八九会直接把它拖进ArcGIS或QGIS里看一眼。但我见过太多人在这一步就卡住画布一片空白、要素跑到海上、属性表全是乱码最后把问题归咎于“数据不全”。其实这套数据本身通常没有大问题——它以面、线、点三类矢量图层组织面图层承载地层和岩性线图层承载断层与地质界线点图层承载产状、钻孔等地质点覆盖全国范围适合做区域地质背景分析、工程选址比选、矿区概查和空间叠加。问题大多出在配套文件、坐标系声明和编码上。这篇文章不讲地质学只讲怎么把这份shp真正用起来以及那些没人提前告诉你的坑。2. 先别急着拖进ArcGIS读懂shp配套文件、属性字段与坐标系一套完整的地质图数据在交付时往往不只有一个shp而是按图层分包地层面、断层线、地质点各一个文件夹再配一份说明文档。你第一件要做的事不是双击打开而是把文件夹里所有文件列出来看看每个shp的配套文件是否齐全。这一步能帮你省掉后面一半的排查时间。2.1 一份shp不是“一个文件”三件套缺失的后果shapefile格式的核心是三个文件.shp存几何坐标.shx存几何索引.dbf存属性表。除此之外.prj写坐标系描述.cpg标记字符编码。很多人从网盘或同事那里拷文件时只拷了.shp结果拿回来打不开或只剩属性没有图就是这个原因。文件作用缺失后的表现.shp要素几何坐标软件根本打不开报“无法打开要素类”.shx几何记录索引部分软件只显示属性表画布不渲染图形可用工具重建.dbf属性表数据图层能显示但右键打开属性表为空岩性、时代字段全丢.prj坐标系描述文本图层被识别为“未知坐标系”叠加时整体飘移.cpg字符编码声明常见表现是中文字段变乱码先怀疑它这套思路和HDF5那种“元数据存属性、二进制主体存数据集”的分层很像几何和属性分开存好处是灵活坏处是少一个文件就出问题。拷数据前养成习惯整个文件夹一起拷不要只拖那个看起来像主体的.shp。2.2 属性表里藏着的“黑匣子”地层、岩性、时代字段怎么读地质图shp的门槛不在图形在属性表。面状地质图层的属性表里通常会有地层代码、地层名称、时代、岩性、图幅编号等字段。我经手的几套数据里字段名可能不同但含义大致一致你要先认代码。字段/代码含义常见取值示例QH/地层代码岩石地层单元代号Q第四系、K白垩系、J侏罗系时代地质年代新生代、中生代、古生代岩性岩石类型描述灰岩、砂岩、花岗岩、玄武岩图幅号数据来源图幅按标准图幅编号填写地层代码用的是国际通用地质符号比如Q代表第四系、K代表白垩系、J代表侏罗系、T代表三叠系、P代表二叠系、C代表石炭系。读数据时先打开属性表用“按属性选择”过滤某一类地层比如把第四系Q单独导出来做工程选址的松散层分布分析这一步几乎每个项目都会用到。打开属性表后扫一眼字段类型数值型字段能不能参与统计文本型字段是否统一。如果“Q”和“q”混着写后面做符号化和统计时会被拆成两类这就需要统一大小写。2.3 坐标系是叠加前必须确认的第一件事CGCS2000、WGS84与投影带叠加错位是地质图shp最高频的翻车原因而且大多数人不知道问题出在哪。我国的全国性地质成果通常采用CGCS2000坐标系分带投影保存但也有老数据基于西安80或北京54。三者的参考椭球不同同一坐标值在不同框架下会差几十到上百米。坐标系用途与常见场景判断方法CGCS2000现行国家标准新生产的地质图多用此.prj文件里出现CGCS2000关键字WGS84GPS设备、KML/GeoJSON默认使用.prj里写WGS_1984或没有投影参数西安80/北京54老图件、历史资料归档文件名或说明文档里常带“80”“54”字样ArcGIS里如果shp带.prj它会自动做动态投影如果没带.prj软件只能把它画在一个假想的平面上表现为图层虽然加载成功但画布上找不到要素或要素跑到非洲附近。这就是为什么我反复强调先看.prj。另外要注意投影带高斯投影数据里带带号和不带带号的东坐标差整整一个带叠加时错位几公里是常事。2.4 用ogrinfo做一次“shp体检”最小命令与输出解读拿到shp后我习惯先跑一遍ogrinfo不急着拖进GUI。它能在几秒内告诉你图层类型、要素个数、坐标系和字段列表判断文件是否健康。# 查看shp的概要信息图层名、几何类型、要素数、坐标系 ogrinfo -so -al 地质面.shp # 查看完整字段结构和前5条属性记录 ogrinfo -al -limit 5 地质面.shp第一条命令加了-sosummary only只读元数据不遍历要素速度最快。输出里重点看三行Geometry: Polygon表示这是面要素Feature Count是要素总数Layer SRS WKT后面跟的坐标系说明。第二条命令去掉-so并加-limit 5会输出完整字段列表和前5条记录的属性值用来核实字段名是否被截断、编码是否正常。如果ogrinfo都读不出要素个数这个shp基本可以判定为损坏不用在GIS里反复折腾了。3. 从dwg到shp再到kml全国地质图矢量图层的格式转换路线地质图数据不会永远以shp形式存在。你手里的资料可能是AutoCAD的dwg、同事发来的GeoJSON、客户要求的KML甚至是一个只有坐标的Excel表。格式转换本身不难难的是转换过程中坐标系和属性不丢。3.1 dwg转shpCAD地质图进GIS的常规流程与属性丢失问题老地质队最喜欢用CAD画图图纸里地层界线、断层、钻孔全在dwg上线型和颜色代表不同含义。转到shp时最常见的问题是图形过去了属性没过去所有线变成一个图层除了颜色和线型什么也分不清。常见做法是先做预处理在CAD里把不同含义的要素分到不同图层再进入转换环节。ArcGIS里用“ArcToolbox→转换工具→从CAD→CAD转地理数据库”这里有几个必查参数目标坐标系要手动指定因为dwg本身不携带投影信息输出要素类命名不要用中文。QGIS同样支持直接拖入dwg但在“数据源管理器”里要勾选“使用子图层”否则只能看到CAD的框线看不到实体。如果环境中装了带CAD驱动的GDAL也可以用ogr2ogr直接按图层名抽出# 按CAD图层名过滤只导出“地质点”图层到shapefile ogr2ogr -f ESRI Shapefile 地质点.shp 原图.dwg 地质点注意这个命令依赖GDAL编译时是否带CAD驱动不是默认就有的跑不起来就回ArcGIS。成功转出后第一时间检查输出shp有没有.prj文件没有就手动补一个坐标系定义。3.2 ArcGIS shp转kml/kmz移动端看图前的三次参数检查项目现场看地质图常用kml/kmz配合手机地图做野外定位。ArcGIS的“图层转KML”工具够用但有三处参数必须检查错过哪一次都会在奥维或Google Earth里翻车。第一次检查坐标系。KML规范要求WGS84经纬度如果你的shp是CGCS2000高斯投影必须先运行“投影”工具生成一份WGS84副本绝不能直接拿投影坐标转KML。第二次检查要素可见性图层转KML会把属性表塞进气泡弹窗如果字段太多野外点开气泡卡半天建议先用“删除字段”保留图层名称、时代、岩性三列就够。第三次检查输出路径和压缩方式输出选择kmz格式体积小适合微信传输kml适合直接读。QGIS用户操作路径是右键图层→导出→另存为→格式选“Keyhole标记语言 KML”同样要先确认源图层坐标为WGS84。反过来的kml转shp流程一致KML里的坐标本身就是经纬度转出的shp天然是WGS84如果项目后续要求CGCS2000记得再投影一次。3.3 shp转txt/CSV与MapGIS数据交换时最容易坑的两个方向很多人想导出shp的属性表做统计分析或交接给不会GIS的同事这时转CSV是最省事的方案。注意tXT和CSV的差别在于分隔符中文环境下优先用CSVUTF-8Excel双击打开不容易乱码。# 将属性表导出为CSV同时把质心坐标追加到字段里 ogr2ogr -f CSV 地质属性.csv 地质面.shp -lco GEOMETRYAS_XY # 如果只想导出属性不带任何坐标用OFF ogr2ogr -f CSV 地质属性_无坐标.csv 地质面.shp -lco GEOMETRYOFFGEOMETRYAS_XY会把每个面的质心坐标X、Y追加成两列方便在Excel里做散点图。如果你的面是异形多边形质心可能落在形状外面这点用的时候心里有数。-lco是图层创建选项每个格式的选项名不一样转CSV时用GEOMETRYAS_XY或OFF来做开关。shp转MapGIS是另一种常用需求国内地矿系统很多老流程还跑在MapGIS上。老版本MapGIS6.x对shp的支持有限常见做法是先转DXF再进MapGIS转完手动重建拓扑。新版本MapGIS 10.x可以直接导入shp但导入后要重点检查多部件要素MultiPolygon——面内带岛湖的要素在跨平台转换时容易出现环路反转或空洞丢失。3.4 JSON转shp与Excel点转shp把非GIS数据变成图层业务方发来一个GeoJSON或一张Excel坐标表让你“把它落到图上”这是地表最常见的需求之一。GeoJSON转shp在本地用一条ogr2ogr搞定。网上有一些在线的json转shp网站但数据如果涉及未经公开的地质信息我不建议往第三方站点传宁可本地跑命令。# GeoJSON转shapefile强制声明dbf编码为UTF-8 ogr2ogr -f ESRI Shapefile 地质点.shp 地质点.geojson -lco ENCODINGUTF-8-lco ENCODINGUTF-8是写.shp时的重要参数它会把编码声明写进产物里防止后面在ArcGIS里打开乱码。GeoJSON本身是UTF-8编码但若缺少这个选项生成的dbf可能被识别成其它编码中文字段照样乱。Excel点转shp更简单ArcGIS里用“添加数据→添加XY数据”X字段选经度/东向Y字段选纬度/北向最关键的一步是在“坐标系”里指定正确的地理坐标系。很多人忽略这一步软件会默认按无投影的WGS84处理如果数据本身是CGCS2000或地方独立坐标系生成的点位就会整体漂移。这一点在QGIS里对应“导入带坐标的表格”功能一样的逻辑坐标系的声明决定了落点位置它不负责帮你自动识别坐标系统。4. 建库前的数据预处理渔网分割、shapechk修复与几何自检全国地质图的数据量不是小打小闹。县域级别的工程还好一旦涉及省域、流域或全国范围分析shp的要素动辄几十万上百万ArcGIS打开卡、出图慢、空间查询转圈。所以建库之前先把数据处理干净是我的一贯做法。4.1 渔网分割shp把全国图切成工作块的参数和命令把全国图按一定格网切成若干块让每次分析只加载局部这个操作叫渔网分割。ArcGIS里用“创建渔网”工具参数要按数据实际情况填参数建议值说明输出要素类存到地理数据库不要直接输出shp碎片太多管理混乱渔网范围取数据实际范围在源图层属性→源里复制坐标范围像元宽度/高度2°×2°或100km×100km根据你的分析尺度和要素密度决定创建面要素勾选后续用面去裁剪矢量层创建线要素取消线的用处不大徒增文件量网格建好后用“分析工具→提取→裁剪”把地质图层按每个网格面切出来或者用“分割”工具按属性批量输出。切出来的小块shp在命名上有个硬约束文件名主干最好控制在10个字符以内否则部分老工具和脚本会直接打不开。如果你手里的数据范围是线状流域或条带状走廊建议把渔网改成按矩形或沿线走向切分不要死套矩形格网。4.2 shapechk修复shp的实测用法能救什么不能救什么shp拷来拷去最常见的问题是.shx索引损坏表现为文件管理器里看着正常但GIS一打开就报“文件不存在或无法访问”之类的错误。第一反应别重下数据先用shapechk这类修复工具试一次。# 把shp和同名dbf先备份到独立目录再执行修复 cd D:\gisdata\fix shapechk 地质面.shp # 修复完成后立即用ogrinfo复核要素数量是否与备份前一致 ogrinfo -so -al 修复_地质面.shpshapechk会把可修复的错误写入生成的新文件通常命名会带“修复”之类的标识。修复前无论如何先备份修复操作本身也可能改变文件结构。修复完成后用ogrinfo看一下Feature Count和原数据属性表记录数对得上才算成功。要清楚shapechk的边界它能救的是文件头损坏、记录偏移错位、shx丢失这类结构性问题它救不了坐标系缺失、字段值本来就不全、几何自相交这类逻辑问题。后者必须回到数据源头或靠空间分析工具处理。4.3 几何错误自检与修复从ogr2ogr跳过失败到QGIS修复几何地质图的面图层最容易有自相交线环自己交叉、未闭合环ring not closed、相邻面重叠或缝隙等问题。这些错误在建库叠加分析时非常致命相交分析出错误碎片、面积统计偏大偏小、拓扑检查报一堆错。先用ogr2ogr做一次“容错导出”把坏要素隔离出来看数量# 遇到错误要素不中断跳过并继续导出 ogr2ogr -f ESRI Shapefile 地质面_修复.shp 地质面_原始.shp -skipfailures-skipfailures是排查利器。如果命令运行过程中刷出大量错误提示说明坏要素不少如果一条错误没有数据质量不错。注意这个操作本身不会修复几何它只是把好要素挑出来坏要素跳过让你知道问题规模有多大。真正的修复要用QGIS的“矢量几何→修复几何”工具它对自相交、环方向错误等常见问题做了自动化处理能重建有效面。修完后用“检查有效性”工具再跑一遍会输出一个包含错误类型的点状图层。要注意的是QGIS的修复方案对面重叠和面缝隙这类拓扑错误无能为力这类问题需要ArcGIS拓扑工具或PostGIS里的ST_IsValid才能系统查出来一般的shp处理流程里把它当作一道专检工序来做。4.4 属性规整与中文编码乱码、截断与字段重命名的标准动作属性表打开全是“锟斤拷”是每个GIS人都遇到过的鬼故事。这几乎全是编码声明问题dbf实际是GBK编码但.cpg文件缺失或写成了UTF-8软件按错误的方向去解码出来的就是乱码。解决办法不是去改数据而是改读取方式。ArcGIS里右键图层→属性→源选项卡把编码从UTF-8改成GBK或GB18030重新打开属性表就会正常。QGIS在加载shp时会弹编码选择框直接试GBK和UTF-8两种哪个正常用哪个。最稳妥的确认方式是拿记事本打开.cpg文件看内容然后倒推出真实编码。字段规整上shp格式有两条硬规则字段名不能用中文部分老MapGIS和上传通道不支持长度不能超过10个字符。操作上要统一大小写、下划线命名比如STRAT_CODE、AGE_CODE。如果检查后发现时代字段里混着“Q”和“q”先做一个“字段计算器”用UPPER函数统一成大写再做后续的符号化和统计。这些看起来像体力活但字段不规整后面做专题图、出图、提交质检数据库都是返工。另外如果你的目标不是做传统的GIS叠加分析而是想把这个数据集喂给深度学习模型做岩性识别或地质要素提取规整字段这一步就更重要先把类别字段编码成整数标签再把shp按标签栅格化导出成掩膜这和做yolov8训练数据集时的标注整理是一个道理。分类别统计检查类别数量确认没有异常类别再进入标注流程能少走很多弯路。5. 全国地质图shp避坑记录五个实打实的翻车现场以下五条都是平时在群里、培训里被问了无数遍的问题每条我都按“现象→原因→解决”的套路写清楚方便你遇到同类问题时直接对照着处理。5.1 拖进去“白屏”不显示先查坐标系声明而不是重下数据现象图层加载到ArcGIS里没有报错图层名前面的勾也是亮的但内容窗口和画布上什么都看不到。新人第一反应是数据坏了删掉重下结果重下三遍还是一样。原因坐标参考信息缺失或声明异常软件没法判断要素的空间位置只能按无坐标系处理可能导致加载的数据落在离视口几个量级之外的地方看起来就像“没有数据”。解决右键图层→属性→源查看“空间参考”一栏。如果显示“未知”点“设置坐标系”根据数据来源补上CGCS2000或对应的地理坐标系。补完以后再缩放到图层范围要素就会出现了。5.2 叠加错位几公里WGS84与CGCS2000混用只是表象现象地质图能叠到卫星影像上但地层界线整体偏移差出几百米到几十公里不等不同图幅情况还不一样让人一头雾水。原因大多数人先怀疑坐标系框架不同——WGS84和CGCS2000之间确实有差异但通常只在厘米级不足以解释公里级偏移。真正的元凶通常是投影带问题3度带和6度带数据混在一起或中央经线设置不对导致同一经纬度坐标在不同带里的投影值差了一大截。解决确认每份shp的坐标系定义后统一用“投影”工具转到一个目标坐标系下选择正确的投影带。不要靠ArcGIS数据框的动态投影硬凑那只是显示层面暂时对齐做叠加分析时数据本身还是错乱的。工程上用CGCS2000 3度分带格式居多转换时重点检查带号参数。5.3 属性表“锟斤拷”dbf编码声明与实际编码不一致现象图形显示正常但打开属性表中文字段全是“锟斤拷”“烫烫烫”这类乱码英文和数字字段正常。原因dbf文件的实际编码通常是GBK或GB18030与.cpg声明不相符软件按声明的UTF-8去解码GBK字节流中文必然乱码。这是历史原因造成的老一批数据用GBK写入转手几次后.cpg文件丢失或被重写成UTF-8。解决加载时手动指定编码。QGIS在导入shp时直接选GBK或GB18030ArcGIS在图层属性→源里修改编码选项。如果改了还乱用记事本打开.cpg看字符串再对照换另一种编码试一次通常两次之内能解决。千万别直接在Excel里硬改dbf那是越改越坏。5.4 线层“省1”“省2”分不清行政界线数据不能凭文件名判断现象数据包里有两个线状shp名字类似“省1”和“省2”加载后范围几乎一样属性表字段也差不多。有人拿它们当同一类数据用结果做面积统计或叠加分析时结果对不上。原因很多行政区划类shp会把不同层级的界线拆成独立文件比如一个放省级界线一个放地级界线但命名在不同来源里并不统一有的按层级分有的只是按图幅序号命名凭文件名猜完全不靠谱。解决把两个图层分别加载打开属性表对比行政区划代码字段。这类数据一般会带行政区划代码属性省、地级、县级代码的数据特征不同字段值级别对得上才能合并或替换使用。拿不准就把两个线层分别叠加到底图上看状态栏提示的坐标和图形范围结合属性面板的代码值判断。5.5 字段名悄悄被截断文件名与字段名的10字符红线现象一个字段在ArcGIS属性表里明明叫“QUATERNARY”导出给同事后变成了“QUATERNAR”或者图层文件拷到MapGIS里直接报字段名错误。原因shapefile的dbf格式限制字段名最长10个字符很多转换工具、老软件会静默截断而不是报错。文件名同理主干部分超过限制的shp在部分软件里也打不开。解决建库或转换之前就把字段名改成不超过10字符的英文名比如“QH”“AGE”“LITHO”这种缩写。字段名一旦被截断没有后悔药可吃只能回源头重新导出所以建库标准里一定要加这条硬要求。交付数据时附带一份字段说明txt把缩写字段和中文含义一一对应方便接手的人读数据。6. 进阶收尾抽稀shp、发布WMS与三维展示的取舍数据修干净之后还有一个绕不开的问题全国地质图太大。直接拖着几个G的shp做日常浏览和团队协作不现实最后收尾这两步是让数据真正“好用”的关键。6.1 用mapshaper对全国地质图抽稀保留10%节点仍然看得出地质轮廓# 按道格拉斯-普克算法保留10%节点可视情况降到5% mapshaper 地质面.shp -simplify dp 10% -o 地质面_抽稀.shpdp对应Douglas-Peucker算法对保持大轮廓更有利边界非常破碎的地质界线可以改用visVisvalingam算法它对密集轮廓保留效果更好。抽稀比例根据自己的出图精度调10%通常还能看出地质体轮廓5%适合做Web端底图。抽稀后务必重新加载检查一遍看细小图斑是否消失、接边处是否出现裂缝。大面积图斑和细小图斑共存时可以按面积分层抽稀小图斑不抽大图斑多抽。6.2 发布为本地WMS/WFS让全组成员共用同一份shp本地文件共享是最容易出问题的协作方式多人同时读取、版本覆盖、路径映射一乱就全乱。常见做法是部署一个GeoServer直接把shp发布为WMS供浏览出图和WFS供要素查询全组通过标准地址访问同一个数据源。步骤不复杂新建工作区→添加Shapefile数据存储→选择shp文件→发布图层→在“Tile Caching”里开启缓存。要点是shp所在路径不要包含中文和空格发布后先用预览页确认样式和字段正确。这样一个全国地质图数据源同时供ArcGIS和QGIS连接省去每人各存一份的麻烦。6.3 shp转3dtiles做三维叠加先抽稀再切片如果你要把地质图叠加到三维地形场景里展示涉及把shp转成3dtiles。流程上建议先做上一节的抽稀再转GeoJSON之后通过切片工具转3dtiles。shp直接转3dtiles不是不行但全要素节点量太大首屏加载会非常吃力而且地质图压在地形上很容易互相遮挡。三维场景里地质图更适合作为“可开关的叠图层”而不是场景主体这样取舍最经济。我现在的习惯是拿到任何一份shp先跑ogrinfo看坐标系和要素数再打开属性表扫字段名和编码最后才谈画图。这套顺序帮我少熬了很多夜。数据本身没有玄学绝大多数问题出在规范和流程上把前面的路走稳了后面就顺了。希望帮到你。本文还有配套的精品资源点击获取