
要说地质行业里最让人又爱又恨的数据1:20万地质图绝对排得上号。爱它是因为这算得上是一份覆盖全国的系统性基础地质资料地层、岩体、断层、产状、水文信息全都有做区域调查、矿产评价、工程选址都绕不开它。恨它是因为大多数人手里拿到的都是纸质扫描图线划混乱、颜色褪变、没有属性想用GIS做点分析简直无从下手。所以这些年来把全国1:20万地质图转成MapGIS矢量数据、按图幅整理成岩性断层数据库一直是地矿信息化里需求最旺盛、也最考验耐心的活儿。这篇文章我想把完整的技术链路拆开讲清楚从扫描图配准、图层组织、属性设计到MapGIS里矢量化实操、拓扑检查再到最终的空间数据库入库全程按项目实战的方式来走。其中涉及的字段设计、参数设置、接边处理、质检逻辑都是我在真实项目里反复试过、调整过、踩过坑之后沉淀下来的方案。适合正在做地质图数字化建库的GIS工程师、地质资料管理人员或者准备用MapGIS和空间数据库做地质数据治理的同学参考。放心内容是可以直接照着落地的不是那种讲完概念就完事的科普文。1. 这套数据的底子与建库的整体规划1.1 1:20万地质图到底是一份什么资料1:20万区域地质图是在全国范围内按统一标准开展的中比例尺区域地质调查成果图面上承载了沉积地层的分布与时代、岩浆岩的侵入期次与岩性、断裂构造的展布与类型、产状要素、化石产地、矿化点等核心地质信息。和更大比例尺的详查图比它覆盖范围大、内容相对概括但恰恰因为比例尺适中在全国性资源评价和区域性规划里使用频率最高。就数据体量来说全国1:20万图幅总量在1400幅左右。每一幅图都包含地形底图、地质体边界、断层线、各种点状标注和花纹符号信息密度非常高。更要命的是这些图件大多完成于上世纪六七十年代到九十年代之间原始成果形式是纸图或者分色清绘胶片后来虽然陆陆续续扫描了一批但扫描图的色彩退化、纸张变形、线划粘连问题非常普遍。不做矢量化处理这些图基本就只能拿来“看个大概”既不能量算面积也不能按属性筛选更没法和其他图层做空间分析。所以把栅格扫描图转成带拓扑结构的矢量数据再赋上符合规范的地质属性本质上就是把“死图”救活成“活数据”。这个过程中最核心的资产反而不是画线本身而是底图里蕴含的地质语义——哪些线是地层界线哪些线是断层一个多边形代表哪个时代哪套地层这些信息必须在矢量化时准确保留下来否则画得再漂亮也只是一堆线框。1.2 为什么选择MapGIS来做矢量化现在市面上的GIS软件很多ArcGIS、QGIS、中望GIS都能做矢量化但我个人在做这套数据时依然首选MapGIS原因非常实际。第一MapGIS在地质领域浸润的时间足够长内置的地质符号、线型、花纹库基本就是照着地质图式图例做的。1:20万地质图里的地层岩性花纹、断层符号、产状标注在MapGIS里都能找到对应的子图号和线型号画出来之后和原图风格高度一致不需要自己手工造符号。这一点在数据成果要提交验收、要符合地质行业制图标准时特别重要。第二MapGIS对老式扫描地质图的支持是经过历史检验的。它的图形编辑和拓扑处理机制虽然上手需要适应但在大量重复性图幅矢量化时反而效率很高特别是弧段编辑、结点平差、拓扑重建这套逻辑很契合地质图复杂的线面关系。第三国内早期建成的区域地质图空间数据库大量成果都是MapGIS格式后续做数据整合、跨幅拼接、成果汇交时沿用MapGIS可以最大限度兼容历史数据。当然这并不意味着只能绑死在MapGIS上。如果单位已经全面转向ArcGIS或QGIS完全可以在MapGIS里完成矢量化之后通过中间格式转到其他平台。我自己的项目里就经常采用“MapGIS矢量化 空间数据库统一管理”的混合路线既保留制图优势又利用数据库做后续分析和共享。注意MapGIS版本差异比较大6.7和10.x在工程文件结构、数据格式上并不完全互通。开工之前先和团队确认好统一使用的版本避免不同人提交的数据互相打不开。1.3 数据库建成后到底能干什么很多人以为建库就是把图矢量化完存起来其实差得很远。一个组织良好的全国1:20万地质图分幅数据库能支撑的应用场景非常多。最基础的是数据检索和出图。按图幅号、地层代号、岩性关键词、断裂名称任意组合查询几分钟就能定位到目标区域并输出规范图件替代了过去翻纸图、拼图边的工作。更进一步是统计分析比如统计某省域范围内不同时代地层的出露面积、统计主干断裂的走向和延伸长度、筛选某个岩浆岩期次相关的矿化点分布这些在矢量化之前几乎不可能做到。再往上就是空间分析把断层线做缓冲区分析、把地层多边形与矿产勘查区叠加求交、用数字高程模型和地质图做三维地形透视等等这些都是数据库建成以后才能顺势解锁的能力。我在做这个项目的时候一直跟团队强调矢量化不是终点数据库才是终点。每一根线的绘制、每一个结点的闭合、每一个属性的录入最终都要为查询和分析服务。带着这个目标做很多画图时的取舍就会变得清晰——该分层的分层该建拓扑的建拓扑该补属性的补属性不做无效劳动。2. 图层怎么分、属性怎么定2.1 图层划分方案图层划分是整个建库工作的地基这一步没想清楚后面返工的成本极高。我的建议是严格按照“点、线、面”三种要素类型和地质语义双重维度来划分图层宁可分得细一点也不要堆在一个层里。一套我反复用、也推荐照用的划分方案大致是这样的地质体面图层存储所有地层单元、岩浆岩体、变质岩区的多边形每个多边形代表一个相对独立的地质体关联地层时代、岩石名称、代号等属性。地质界线图层存储地质体之间的界线包括整合界线、不整合界线、推测界线等。这个层的线和面图层有严格的拓扑对应关系必须一致。断层线图层存储各类断裂构造属性里区分断层的性质正断层、逆断层、平移断层、性质不明断层等。产状点图层存储地层产状、节理产状、片理产状等点状要素记录倾向、倾角和产状类型。化石与矿化点图层化石点、矿点、矿化点都要单独分层后续做资源评价直接调用。地理底图图层等高线、水系、居民地、道路、境界等按MapGIS的图例规范分别管理。这样划分的好处在于查询断层时不需要在地层线里做属性筛选统计地层出露面积时不需要担心混入非地质界线后续接边和拓扑检查也更容易定位问题。2.2 属性字段设计属性字段设计必须兼顾两个约束一是要符合行业标准让数据出去能和其他单位对接二是要满足本单位的实际应用需求不能标准倒是标准了自己用起来却缺这缺那。以地质体面图层为例我常用的字段结构是这样的CREATE TABLE stratum_region ( fid INTEGER PRIMARY KEY, sheet_no VARCHAR(20), -- 图幅编号如 K50C001001 geo_code VARCHAR(20), -- 地质代号如 Pt1、J2x str_name VARCHAR(80), -- 地层/岩体名称如 蓟县系、燕山期花岗岩 lithology VARCHAR(200), -- 岩石名称如 灰岩、砂岩夹页岩 strat_age VARCHAR(40), -- 地质时代如 中元古代、晚侏罗世 litho_code VARCHAR(20), -- 岩性编码对应岩石分类字典 area_m2 DOUBLE, -- 面积平方米 source VARCHAR(80), -- 数据来源图幅和矢量化人员 check_stat VARCHAR(10) -- 检查状态待检/合格 );断层线图层的字段我会额外加上断层名称、断层类型、走向、倾向、倾角、断层长度等。特别强调一点断层长度这个属性不要在矢量化初期就手工填而是等线全部画完、拓扑处理完成后用软件自动计算线长度再回填避免手工量算误差也省人工。产状点图层则建议记录构造类型、倾向、倾角和测量位置描述。倾向倾角字段用浮点型角度值保留到整数即可不需要太高精度毕竟原始图件本身是概略性的。2.3 分幅规则、坐标系与投影1:20万标准图幅按经纬度分幅经差1度、纬差40分两度带和六度带都可能涉及。在实际建库时坐标系统通常选择北京54坐标系、高斯-克吕格投影按图幅所在位置选择对应的中央经线。但是这里有一个很麻烦的问题——不同图幅生产年代不同有的用北京54有的用西安80有的图幅资料甚至标注的是自由坐标或近似坐标。所以我强烈建议在建库开始前强制性统一坐标基准。我的项目经验是如果后续要建全国尺度的数据库尽量统一到西安80或国家2000坐标系通过图幅四角点的理论经纬度坐标进行配准这样即使原始成图坐标体系混乱也能在配准环节拉到统一基准上。如果只在省域范围内使用保留北京54、按标准分幅也可以接受但必须在元数据里写清楚不能含糊。另一个容易忽略的参数是投影分带。1:20万图幅是跨带的相邻图幅如果采用不同的中央经线接边时会发现明明应该吻合的线对不上。我的做法是每个图幅按自己地理位置选择正确的中央经线单独建库到最终拼接时再做投影转换而不是一上来就强行把所有图幅投到同一个带里。2.4 属性字典怎么建地质要素的属性内容非常规范地层时代、岩石类型、断层性质都有对应的国家标准和行业代码建库时最好维护一套属性字典表而不是在每张图里手敲中文描述。比如岩性编码既要包含沉积岩的灰岩、砂岩、页岩、泥岩也要包含岩浆岩的花岗岩、闪长岩、玄武岩还要包含变质岩的片麻岩、大理岩、千枚岩等等。地层时代则按宇、界、系、统、组逐级编码。断层类型按正断层、逆断层、走滑断层、性质不明进行归类。属性字典的价值在后期会充分体现。没有字典的时候查询“灰岩”可能要同时匹配“石灰岩”“灰岩夹白云质灰岩”“灰岩与页岩互层”等好几种写法有了字典和编码查询和统计都能直接挂接代码既准确又高效。我的实践经验是字典表直接用数据库管理矢量化作业时通过代码加载到MapGIS的字段字典里录入人员只选不敲从源头避免同物异名。3. 图解矢量化全过程3.1 扫描图的预处理与配准拿到扫描图后不建议直接开画。原始扫描件往往图廓变形、方向不正、色彩偏色必须先做图像预处理。第一步是校正方向把图幅的图廓线调整成水平或垂直这一步在MapGIS的图像分析模块里可以完成。第二步是裁剪和匀色把图廓以外的黑边、色标裁掉对过度褪色的区域做对比度拉伸保证线划在屏幕上清楚可辨。第三步才是配准这是整个矢量化里最关键的环节之一。配准的原理是用图上的理论坐标点来解算扫描图像坐标和真实地理坐标之间的转换关系。1:20万地形图图廓上通常绘有公里网或经纬网我们可以取图廓四角点、经纬网交叉点作为控制点。控制点的数量和分布有讲究四角点打底中间尽量均匀加密到9到12个点特别在图幅边缘有变形的位置必须加密。配准完成后一定要做一次残差检查均方根误差控制在半个像素以内是比较理想的状态起码也不要超过一个像素否则后续连线的位置精度会出大问题。这里我要特别强调一个常见误区很多人配准之后不看残差就直接矢量化最后矢量数据和相邻图幅接不上又回头寻找原因效率极低。配准的残差报告一定要截图或导出存档这既是质检依据也是以后排查坐标问题的基础。3.2 新建工程和图例参数设置配准完成之后在MapGIS里为图幅新建工程工程里包含前面规划好的各个点、线、面文件。很多人忽略的是新建文件的图例参数必须预先设置好而不是画完线之后再来改。图例参数设置包括点文件的子图号、子图高度、颜色线文件的线型号、线宽、颜色面文件的填充花纹号、填充颜色等。这些参数要按照1:20万地质图图式规范来定。比如地层界线的实线用哪个线型号推测界线用哪个线型号不同时代的花岗岩用哪种花纹填充MapGIS的图例库里有现成的方案直接套用再微调即可。特别提醒面文件的填充花纹不要设置得过于密集。MapGIS在刷新和重建拓扑时花纹密集的面会严重拖慢显示和运算速度尤其在配置不高的机器上一个图幅几十上百个地质体卡顿会非常明显。制图输出之前再统一加密花纹编辑期间用简洁图例就好。3.3 图层矢量化实操细节矢量化顺序上我个人的习惯是“先面后线、先主后次”先勾绘地质体边界形成面再沿面边界提取地质界线最后画断层和点要素。这样做的好处是拓扑关系清晰不容易出现断层和地层界线交叉却对不上的混乱局面。具体到画线操作MapGIS中常用输入流线、输入折线、输入正交线等几种方式。地质界线大部分是自然曲线用流线模式追踪效果最好节点密度默认即可太密反而增加数据量。而在断层这类相对平直的构造线时用折线模式效率更高。勾绘面边界时必须保证每个地质体多边形闭合这是拓扑检查能通过的前提。实际操作里我要求作业员每画完一个图幅的某个图层就立即做一次自检不要等全部画完再检查。自检的项目包括有没有未闭合的多边形、有没有重复线、有没有跨越图廓的线、断层有没有错断到地质体内部。这些问题越早发现越容易改越到后期越难收拾。产状符号的绘制相对简单但属性录入绝不能漏。一个产状点如果没有倾向倾角属性那它就是一个没有灵魂的符号数据库建成后完全没有分析价值。录入产状属性时我还会要求补充注记描述说明这个产状是层理产状还是节理产状因为同一张图里两种构造要素的产状符号看起来很像。3.4 拓扑检查与数据质检矢量化完成后拓扑检查是绕不开的一关。MapGIS的拓扑处理包括自动剪断线、清除微短弧段、清除重叠弧段、结点平差、重建拓扑等步骤每一步都有独立的功能入口也有对应的操作顺序。我的标准流程是先用“自动剪断线”把弧段在交叉点处全部断开然后“清除微短弧段”把小于容差的短小弧段合并或删除接着“结点平差”把理论上应该连接在一起、但因为数字化误差而没有完全相接的结点吸附到一起最后重建拓扑形成多边形并检查拓扑错误。这一步最容易出现的问题有两个。一个是容差设置不合理。容差太小微短弧段清不掉容差太大会把本来应该分开的细小地质体合并掉。我通常根据扫描图的分辨率和矢量化节点密度来定一般设置在图上0.1到0.5毫米之间换算到实际距离再填入参数。另一个问题是地质图和普通地形图不一样断层和地质界线之间在自然状态下就是交叉的、穿切的这种“合理的相交”不能被拓扑检查当成错误处理。所以拓扑检查的时候分图层分规则地查断层线层和地质界线层分开做逻辑检查不能一把梭子全查。质检环节建议采用人工检查与软件检查双线并行。软件负责检查几何问题人工负责检查地质语义问题比如某个多边形填的是不是和原图一致的花纹、断层的性质属性有没有张冠李戴。每一幅图检查完成后质检人员在属性表里标记检查状态形成可追溯的质检记录。4. 从矢量文件到空间数据库4.1 数据入库的两种方式MapGIS原始格式的矢量数据可以长期保存和使用但它本质上是文件型数据多用户并发访问、跨平台共享、复杂查询统计都比较吃力。所以如果要建真正的“岩性断层数据库”把矢量数据导入空间数据库是更稳妥的选择。入库路线主要有两条。一条是在MapGIS平台内部使用其空间数据库引擎把点线面数据导入到统一的数据库中这样可以最大程度保留图例符号信息出图时仍然调用MapGIS渲染。另一条是先通过中间格式把数据转出来再导入通用的空间数据库比如PostgreSQL/PostGIS、SQL Server Spatial或者达梦数据库的空间模块后续由WebGIS平台调用。两条路线没有绝对优劣看单位的技术栈。如果单位长期使用中地系列软件建议走第一条如果后续要做互联网发布、移动端调用走第二条更灵活。我自己做过的一个折中方案是MapGIS负责矢量化编辑和制图输出导出的成果数据统一进PostGIS再通过GeoServer发布WMS/WFS服务效果非常好查询统计能力比文件型数据强太多。注意数据导出时MapGIS的注释、子图、线型在通用GIS里大概率无法100%还原。如果有制图输出需求务必保留一份MapGIS工程文件如果只是分析建库可以放心转换属性才是重点。4.2 数据库里的查询与分析数据进了数据库才真正发挥出“库”的威力。以PostGIS为例按岩性查询所有灰岩地层分布区域一句SQL就能搞定SELECT str_name, litology, ST_Area(geom) AS area_m2 FROM stratum_region WHERE lithology LIKE %灰岩% AND sheet_no K50C001001;统计某个省域内各时代地层的出露面积可以做空间裁剪和聚合这在实际项目中特别常用。分析断层和矿点之间的关系则可以对断层线做缓冲区分析再和矿化点图层做空间连接快速找出哪些矿点落在断层影响带内。这些分析在文件型数据里操作起来往往非常吃力尤其是跨图幅查询时要在几十个文件之间来回切换。入库之后一次SQL就搞定效率和体验完全不同。我在项目中还专门建了一套视图把常用的图层连接和字段计算都封装好业务人员不需要写SQL也能通过前端界面做查询。4.3 跨幅接边这个硬骨头分幅建库必然面临接边问题这是整个项目里最琐碎、最考验耐心、也最容易决定成果质量的部分。相邻图幅矢量化时由于作业人员不同、扫描图变形程度不同同一条断层或地层界线在接边处常常错开几十米甚至上百米。我的接边策略是“逐层接、先线后面”。先把相邻图幅按理论坐标叠加在一起检查断层线的接边偏差偏差在设计容差内的直接吸附衔接偏差超标的回到原始图件重新确认是配准问题就补控制点重配是矢量化问题就重画。断层线全部接好之后再处理地质体多边形确保同一个地质体在两幅图里的岩性、代号属性一致。接边工作千万不能攒到最后集中做而是每完成一批图幅就立即接一批这样可以及时暴露配准和矢量化中的系统性问题避免大批量返工。并且接边记录要存档哪个图幅和哪个图幅在什么时间接边、偏差多少、如何处理全部留痕这对验收和后续维护都极为重要。5. 常见问题与排查心得5.1 坐标套合不上图幅之间错位这是咨询量最大的问题几乎每个做地质图数字化的人都遇到过。图幅之间错位绝大多数原因出在配准环节。排查思路是这样的先检查两个图幅的坐标系和投影参数是否一致中央经线有没有搞错再检查配准控制点的分布很多错位是控制点只布在图的同一侧导致的图幅边缘变形没有被纠正最后检查控制点的残差如果某个控制点的残差明显大于其他点它很可能选错了位置或者原始图廓点本身误差就大需要剔掉重选。如果是图幅自身变形严重一次整体配准很难兼顾全部区域这时可以考虑分块配准。把一个图幅按网格切成若干区块每个区块单独选择控制点做局部校正再拼回完整图幅。这个方法能解决大多数老图的“肚子鼓”“边角翘”问题代价是操作量增加但数据质量明显提升。5.2 拓扑检查时错误一大堆拓扑错误多通常不是画图不仔细而是操作顺序不对。我见过很多团队在自动剪断线之前就做结点平差或者在重建拓扑之后还大量修改线文件这些都是坑。严格执行“剪断-清短弧-清重弧-平差-重建”的顺序大部分拓扑错误能在源头避免。还有一种情况是容差设置不合理导致拓扑错误。容差过小时肉眼看不出来的微小间隙会形成上百上千个错误多边形容差过大时许多细微地质体的边界被吞并。我建议通过一个测试图幅反复试算找到当前数据条件下的最佳容差再统一应用到全部图幅不要每幅图都临时拍脑袋。5.3 属性录完之后发现错位或丢失属性数据问题最隐蔽也最头疼。常见情况是MapGIS文件导入数据库后部分字段值变成了空或者乱码。这通常和字符编码有关系。MapGIS早期版本的属性编码和数据库默认编码不一致导出前要统一转换不要直接导。另一个大户是属性填错位置比如把A地质体的岩性填到了B地质体上。这类错误软件查不出来只能靠人工对照原图复核。我的经验是采用“双人互检”方式两个人交换图幅检查比一个人反复检查自己的图高效得多发现问题后登记到问题清单统一修改。5.4 老图件字迹模糊、注释难认六七十年代的老图图面字迹模糊、异体字繁简混用、地质代号标注不规范这些问题在矢量化过程中无法完全避免只能规范处理。我的处理原则是“忠实原图、翻译加以规范”原图能辨认的代号和名称照实录入辨认不清但能根据上下文推断的在备注字段里标注“推测”字样完全无法辨认的在属性里标记为“图面不清”。千万别做的一件事是靠猜填属性。一个地层属性和岩性猜错了数据库建成后做统计时产生的误导比缺一个属性严重得多。对于长期保存的老图件还可以结合区域地质调查报告、地质图说明书来辅助判读这些文字资料往往能解决很多图面认不清的问题。经验之谈这套项目做到后期我发现最影响质量的因素不是技术而是作业规范。谁负责什么图层、用什么图例、容差多少、属性字典用什么版本这些必须在开工前写成作业指导书。技术问题都可以排查解决但管理不规范造成的混乱往往会贯穿整个项目周期。我个人在实际操作中最深的体会是矢量化建库这类工作前20%的精力给了技术选型和数据处理后80%的精力几乎都消耗在接边、质检和属性整理上。任何一个环节想省事、走捷径最终都会在数据库应用阶段加倍返还。所以我的建议很简单动手之前把图层、字典、坐标系、质检流程全部定死动工之后用试点图幅跑通全流程再铺开批量推进时严格执行自检和互检。这套逻辑我用了很多年每做一个图幅数据库都能平稳落地希望对你也有用。