
1. 先把数据工厂这个词拆开看它到底想解决什么干空间数据这行十几年我最怕听到的一句话就是你先把数据导过去做个转换。这句话背后往往意味着半天到两天的纯体力劳动还伴随着属性丢失、图层对不上、坐标偏了几十米这些后遗症。测绘地理信息行业的生产流程长期是割裂的外业用一套采集工具内业用CAD画线属性靠Excel维护质检靠人眼翻最后建库再写一段脚本把前面所有的格式拼起来。每一道工序都在做同一件事——把别人产出的东西翻译成自己能认的样子。南方iData数据工厂这个名字里的工厂两个字其实是很有针对性的。传统作业模式更像手工作坊每个环节的师傅各干各的最后的成品靠人拼装而数据工厂的思路是流水线原料从一头进去中间经过统一的数据模型、统一的编码体系、统一的质检规则成品从另一头出来全程不换模具。一个平台一套数码一体化生产这句话的落点就在这里——数据在整个生命周期里只被定义一次之后所有环节读的都是同一份定义。我接触过不少团队规模从三五个人到几十个人都有他们遇到的问题高度雷同一名作业员一天能有效编辑的图斑数量很大程度上不取决于他手速多快而取决于他在切换软件、转换格式、核对属性上浪费了多少时间。空间数据生产的效率瓶颈往往不在画这件事本身而在搬和对。这类平台的价值就是把搬和对压缩到接近零。这篇内容适合谁看如果你是做基础测绘、地籍调查、不动产测绘、管线普查、自然资源调查监测的技术负责人或者是一线需要天天跟图斑打交道的作业员再或者你正在为团队选一套空间数据生产工具那下面这些拆解应该能帮你少走点弯路。我不会写成产品手册而是按一个实际项目的推进顺序来讲怎么想、怎么配、怎么录、怎么展、怎么查坑。2. 一体化生产为什么值得认真对待从作坊到流水线的逻辑2.1 传统空间数据生产的三个老毛病第一个毛病是软件栈割裂。画图用CAD建库用GIS属性用表格质检用另一套插件。这四套东西对一个要素的理解是不一样的。CAD里的一个多段线只是一个图形对象它没有要素类的概念转到GIS里它要变成一个带属性的面而属性表里那个面又只是一个ID。三个环节对同一块地的描述方式完全不同转换过程就是信息损耗的过程。第二个毛病是数据模型不统一。同一个图斑在外业记录里可能叫建设用地在内业图层里叫JSYD在建库表里叫DLMC_01。如果没有一套贯穿始终的编码映射每个环节都得重新猜一遍。更麻烦的是同一个几何体在不同环节可能被切成不同的粒度比如外业按地块采内业按权属单位合最后两边数量对不上核对时间比生产时间还长。第三个毛病是质检滞后。绝大多数团队的质检是放在流程末端的验收前集中查一遍。这时候发现一个拓扑错误可能要顺着修改链条回溯十几个环节因为它可能是最初外业采集时就带进来的。返工的成本不是线性的是滚雪球式的。数据工厂这种模式的核心理念之一就是把质检规则前置到录入那一刻——你输错的那一刻它就告诉你错了而不是等两周后验收时才告诉你。2.2 一体化生产的底层逻辑数据模型只定义一次这套模式的技术骨架可以用一句话概括要素类 编码 属性结构 几何规则四件东西在项目启动时一次性定义好之后全流程复用。定义这件事听起来简单但它是整个生产效率的分水岭。定义得清楚后面所有环节都是自动的定义得含糊后面每个环节都要人工介入。我习惯把这项工作叫做给数据立规矩。比如一块建设用地你要在模板里定死它属于哪个要素类、用什么分类编码、有哪几个必填属性字段、字段的类型和长度是多少、几何类型是面还是多部件面、最小上图面积是多少、和相邻要素之间必须满足什么拓扑关系。这些规矩一旦立起来录入的时候平台会拿它当尺子去卡质检的时候也拿它去卡输出的时候还拿它去卡。同一把尺子量三次结果自然一致。注意模板定义阶段最忌讳先随便配一个后面再改。因为模板一旦被大量数据引用了修改的成本会随着数据量指数级上升。我在一个项目里见过因为字段长度设短了两位导致后期需要重建整个属性表的情况几万条记录重录。2.3 这套方案更适合什么样的团队坦白讲不是所有任务都值得上数据工厂模式。如果你的任务就是画几张现状图出完图就结束数据不需要入库、不需要长期维护、不需要和别人对接那用轻量的制图工具反而更省事。数据工厂的收益来自于数据的复用——同一份数据要被反复查询、统计、更新、汇交这时候统一模型带来的收益才会体现出来。我认为最适合的场景有这么几类一是基础测绘和地理实体生产成果要进库、要更新、要按标准汇交二是地籍和不动产调查权属、坐落、面积、用途这些属性之间逻辑关系强特别适合用规则去卡三是管线普查管线点的连接关系是最典型的拓扑强约束场景人工核对几乎不可能四是自然资源调查监测年度变更、图斑比对、增量更新对版本管理要求高。反过来说如果你的团队只有一两个人任务是一次性的、交付物只是几张纸图硬上这套流程反而会让前期配置成本收不回来。工具的价值永远是和场景匹配的不是越重越好。3. 核心能力拆解模板、规则引擎、拓扑与脚本3.1 模板体系符号、属性、编码三件套很多人以为模板就是图例样式这是理解上的偏差。在一体化生产平台里模板至少包含三层含义而且是绑在一起的。符号化模板管的是长什么样。同样的要素类在不同比例尺下要有不同的符号表达1:500的房屋要画到檐廊1:2000可能就简化成一个面。符号模板要和比例尺、图层显示比例绑定这样同一份数据在不同视图下自动切换表达。属性模板管的是记什么。字段名、别名、类型、长度、精度、是否必填、取值范围这些都要定死。我通常会额外加两个东西一是默认值比如调查时间默认取系统日期二是继承规则比如新画的图斑自动继承所在行政区的行政区代码。编码模板管的是怎么对上。这是最容易被低估的一环。外业、内业、建库、汇交每个环节的编码体系很可能不同编码模板就是那张翻译对照表。它的作用是在导入导出的边界上自动完成映射避免人工改表。3.2 规则质检引擎把验收标准变成可执行的检查项质检规则按性质大致分四类我在项目里是这么组织的几何规则零长度线、重复点、自相交、极小面积、面不闭合、坐标超范围属性规则必填字段为空、字段值不在字典域内、数值越界、字符串含非法字符拓扑规则面之间不能重叠、面之间不能有缝隙、线必须在面内、点必须落在线端点、线不能有悬挂点和伪节点逻辑一致性规则面积与坐标计算值不符、地类与权属矛盾、父子要素数量不匹配。这四类规则里前两类是硬规则机器能百分百判定后两类需要设容差容差设得合不合理直接决定误报率。我的经验是容差不要一次设到最严先用宽松值跑一遍看误报量再逐步收紧。提示规则数量不是越多越好。我曾经配了两百多条规则结果一次质检报出上万条问题作业员直接放弃了。后来精简到六十条核心规则按严重程度分三级红色必须改、黄色建议改、蓝色仅提示通过率反而上去了。3.3 拓扑与自动构面让空间关系自己长出来自动构面是这类平台里最能省人力的功能之一也是最容易出问题的功能。它的原理其实不复杂把一堆线段当作墙平台去找所有被墙围起来的封闭区域然后在区域中心生成一个面要素。难点在于线段的打断质量。如果两条相交的线在交点处没有真正打断只是视觉上交叉构面算法就找不到封闭环。所以构面前必须做线打断和节点捕捉。我一般会按这个顺序处理先做重复线清理再做悬挂点检查然后按节点容差做自动捕捉最后才构面。节点容差这个参数很关键设大了会把本来不相连的线粘在一起设小了又捕不上。实测下来1:500的地形数据用0.001米到0.005米这个区间比较稳大比例尺可以适当放大。构面完成后还有一个容易被忽略的步骤面属性回填。原始线段上带的属性比如道路名称、地类编码需要按规则传递到新生成的面要素上。这一步如果不做构出来的面就是一堆空壳还得人工重新录一遍。3.4 脚本扩展把重复劳动交给代码平台自带的批量工具能覆盖大部分场景但总有一些一次性的、奇形怪状的需求比如把某个字段里的中文括号统一替换成英文括号按行政区代码批量重算图斑编号。这种需求用脚本处理最快。下面这段是属性批处理的大致思路具体 API 名称以平台实际提供的为准这里只用来说明处理逻辑# 属性批处理思路示意遍历选中的要素按规则重算编号并回填 def rebuild_code(features, prefix, width6): # 按行政区代码分组组内按几何中心从上到下、从左到右排序 features.sort(keylambda f: (-round(f.centroid.y, 3), round(f.centroid.x, 3))) groups {} for f in features: adcode f.get_attr(ADCODE) groups.setdefault(adcode, []).append(f) for adcode, items in groups.items(): for idx, f in enumerate(items, start1): new_code f{prefix}{adcode}{str(idx).zfill(width)} f.set_attr(YSDM, new_code) f.set_attr(UPDATE_TIME, today())这段代码背后的两个经验点值得说一下。第一排序要稳定。编号顺序一旦不稳定每次重跑结果都不一样后期核对就是灾难所以排序键里必须带上坐标这类稳定的物理量。第二批量写属性前先备份。脚本改属性是不走撤销栈的改错了只能靠备份回滚。我现在的习惯是每次跑脚本前先把当前成果另存一个副本命名带上时间戳。4. 数据录入实操多源数据怎么进来属性怎么挂上去4.1 数据源接入与预处理实际项目里数据来源往往五花八门外业采集的点线面、甲方给的历史CAD图、上一轮的GIS成果、无人机倾斜模型、扫描的权属资料、Excel 表格里的属性清单。平台的价值之一就是把这些格式尽量统一读进来。格式本身不是大问题DWG、DXF、SHP、GDB、MDB、GeoJSON 这些常见格式一般都能直接接。真正麻烦的是四件事坐标系是否一致、图层命名是否规范、属性字段是否对齐、几何质量是否达标。我会在导入前做一遍体检流程大致是确认每个数据源的坐标系701 的一组数据、CGCS2000 的一组数据千万不能混着导检查图层清单把不需要的图层辅助线、图框、注记先剔除抽查几何质量看看有没有重复对象、零长度线、闭合面未闭合检查属性字段名确认和模板里的字段对得上或者能通过映射表对得上。这一步做完大概要花半天到一天但它能省下后面几天的返工时间。我见过最夸张的案例是没做坐标系检查两个标段的数据差了将近二十米等到汇交前才发现只能整体重投影加重新接边。4.2 图层与编码映射把不同来源的东西装进同一个抽屉映射这件事本质上是给每个外来图层指定它在本项目里的户口。我一般会维护一张映射表形式大致如下原始来源原始图层/编码目标要素类目标编码属性处理方式外业手簿DLMC建设用地建设用地201直接映射补默认值历史CAD房屋层房屋面301编码重写面积重算上轮GISJZD界址点401保留原编号补调查时间甲方Excel宗地清单宗地面402按宗地号关联几何这张表看起来简单但它是整个项目里最需要反复确认的东西。因为它一旦定错后面所有数据的归属都会错而且要改的话得从头再来。我的做法是让甲方或者项目负责人书面确认一遍这张表哪怕只是一封邮件也比口头说一句你看着办强得多。注意映射表要覆盖未匹配的情况。一定会有一部分对象找不到对应的目标要素类这时候不能让平台静默丢弃而要输出到一张异常清单里人工过一遍再决定是丢弃还是补充映射。4.3 属性批量录入与字典约束属性录入最怕两件事一是漏填二是填错格式。字典约束就是专门治这个的。比如地类编码这个字段如果可以自由输入那就会出现2010201建设用地三种写法混在一起的情况统计的时候你自己都不知道该算几类。字典约束的用法有这么几种按严格程度递增下拉列表只能选、范围校验数值必须落在区间内、正则校验字符串必须匹配某种模式、关联校验该字段的值必须在另一张表里存在。我一般对地类编码权属性质行政区代码这几个字段用下拉列表对面积高程用范围校验对宗地号图斑编号用正则校验。批量录入还有两个高频场景值得说。一是同值填充选中一堆图斑把某个属性统一填成同一个值比如整片区域都属于同一个行政区。二是按位置赋值叠加一个行政区图层把每个图斑落在哪个区自动写进属性。第二种比第一种可靠得多因为它不依赖人工判断。4.4 外业采集数据回流最容易出问题的交接点外业数据回流到内业是整个流程里最容易掉链子的环节。原因很简单外业设备和内业软件的坐标系、单位、字段定义往往不是同一套。我总结过回流的三个必查项第一坐标系统。外业手簿里存的可能是经纬度也可能是平面坐标还可能是带带号的平面坐标。带号这件事特别容易出错。举个例子经度 113.5 度附近按3度带投影带号是 round(113.5/3)38中央子午线是 3×38114 度如果作业员误用了39带中央子午线117度坐标就会偏移几百公里。所以导入前一定要核对带号和中央子午线。第二高程基准。高程是1985国家高程基准还是地方独立基准这两个混了管线埋深这类数据就彻底废了。我一般要求外业提交时带上至少三个已知点的检查点数据内业接手后先做一次反算确认偏差在允许范围内再批量导入。第三字段完整性。外业采集时因为屏幕小、打字慢属性经常是简写或者空着。回流后需要在平台上做一轮补全这时候默认值和继承规则就派上用场了。凡是能通过空间位置推导出来的属性行政区、图幅号、地类一律不靠人工填。4.5 录入阶段踩过的几个坑说几个我印象比较深的。有一次外业交回来的数据图层名带了个空格肉眼完全看不出来导入后属性全部为空排查了两个小时才发现是图层名的问题。还有一次某批数据的坐标是带带号的但带号被写进了 Y 坐标的前两位看起来数值正常实际位置整体偏移了三十多公里。再有一次是字符编码问题Excel 里的中文属性导进来变成了乱码原因是文件保存时用了非 UTF-8 编码。这类问题的共性是导入时不报错导入后才发现不对。所以我现在的习惯是任何批量导入之后第一件事不是继续往下做而是随机抽十个要素把坐标、属性、几何类型都核一遍。5. 数据展示与成果输出从屏幕渲染到交付包5.1 符号化渲染与图层控制数据展示这件事看起来是给领导看的实际上是给自己看的。符号渲染配置得好作业员在屏幕上一眼就能看出哪个图斑属性缺失、哪条线拓扑有问题配置得差屏幕上一片花花绿绿什么问题都发现不了。我配置渲染时会做三件事。第一件是按错误状态上色把有质检问题的要素统一标成醒目的颜色和描边其他要素用常规符号这样错误要素会自己跳出来。第二件是按比例尺分级显示小比例尺下隐藏细碎要素避免屏幕糊成一片。第三件是加标注避让把关键属性比如图斑编号、地类名称直接标在图上但要有避让规则否则标注会挤成一团。图层控制方面我建议把图层分成三组底图组影像、地形、业务组各类要素、辅助组检查线、范围框。这三组分别控制开关作业时只打开需要看的能显著减少视觉干扰。5.2 专题图与图幅整饰输出出图这个环节很多团队是用另一套制图软件做的中间又得导一次格式。一体化平台的好处是制图模板可以直接复用生产数据的符号定义不用重新配一遍图例。图幅整饰要处理的主要是四件事图框、图例、比例尺、图签。这四样东西我建议全部做成模板按图幅号自动填充。特别提醒一点图例要自动生成让平台去扫描当前图幅里实际出现了哪些要素类动态生成图例。手工维护图例是出图环节最容易出错的地方经常出现图上有但图例没有或者图例有但图上没有的情况。5.3 三维与实景成果的叠加展示现在越来越多的项目要求三维展示比如把二维的宗地面叠到倾斜摄影模型上看权属边界和实际情况的对应关系。这类叠加展示要注意三个技术点一是坐标一致性。倾斜模型的坐标系往往是投影坐标加高程二维数据也是投影坐标理论上能对上但实际经常有偏移需要做一次配准。二是高程贴合。二维面本身没有高程直接叠上去会平铺在一个平面上要给它赋上模型表面的高程才能贴合地形。三是渲染顺序。三维场景里透明面的绘制顺序会影响观感边界线要设成始终显示在最上层否则会被地形遮挡。5.4 成果输出格式怎么选不同用途对应不同格式选错了轻则麻烦重则返工。我把常用的几种整理成表输出格式典型用途优点注意点SHP对外汇交、通用交换兼容性最好字段名长度受限、编码易乱GDB内部建库、复杂要素支持拓扑和域部分老软件不认DWG/DXF出图、给设计单位CAD 通用不带属性结构MDB传统建库汇交结构清晰单文件大小有限制GeoJSON系统对接、Web 展示轻量、易解析坐标只能是经纬度报表/Excel统计汇总便于人工核对不含几何我的一般做法是一套数据多种出口源数据始终保存在平台的工程里需要哪种格式就导哪种不做二次编辑。这样能保证所有出口的数据都是同一份源头不会出现这个版本和那个版本不一样的情况。6. 常见问题与排查技巧实录6.1 坐标与投影类问题坐标类问题最典型的表现是图形看起来对位置就是不对。排查顺序建议这样走先看数据的坐标数值范围判断是经纬度还是平面坐标再看平面坐标的整数位数判断是否带带号然后核对带号对应的中央子午线是否和项目要求一致最后叠加一张已知的底图做视觉验证。有个小技巧把坐标范围当作指纹来用。CGCS2000 下我国大部分地区的3度带平面坐标X北向一般在 200 万到 600 万之间Y东向带带号的话在 3 亿到 4 亿之间不带带号在 10 万到 90 万之间。看一眼数值范围基本就能判断出问题出在哪。6.2 拓扑与几何类问题拓扑检查报出来最多的三类问题是面重叠、面缝隙、线悬挂。面重叠常见于两个作业员各画了一块相邻的图斑边界没对齐面缝隙常见于接边处两块面之间留了很细的缝线悬挂常见于道路、管线这类线状要素的端点没有连上。这三类问题的处理策略不一样。面重叠必须消除因为是逻辑错误面缝隙要看大小小于容差的可以自动合并大的要人工判断线悬挂要看语义有些悬挂是合理的比如道路到头了有些是错误比如管线断头了。所以拓扑检查结果不能全部自动处理要分级。6.3 属性与编码类问题属性问题里最隐蔽的是格式正确但语义错误。比如行政区代码填了六位数字格式没问题但那个代码根本不存在再比如地类编码填了合法值但和该地块的实际用途矛盾。这类问题靠格式校验查不出来必须靠关联校验和逻辑规则。我的做法是建两张参照表一张行政区代码表一张地类代码表。所有涉及这两个字段的地方都做一次存在性校验然后再配几条逻辑规则比如建设用地不允许出现在水域范围内宗地面积必须大于零且不超过行政区总面积。6.4 性能与批量处理类问题数据量上来之后卡顿是必然的。几万个要素还好几十万个要素时如果全量加载软件基本就动不了了。我常用的几个缓解手段按图幅分批加载一次只处理一个图幅关闭实时符号化编辑阶段用简单线框显示只在出图时开符号分块质检不要一次性对全部数据跑规则。还有一个容易被忽视的点索引。空间数据做叠加分析、范围查询时如果没有空间索引查询会退化成全表遍历。大多数平台会在导入时自动建索引但如果你是手工修改过数据结构最好确认一下索引还在不在。6.5 常见问题速查表现象可能原因排查动作处理方式导入后属性全空图层名不匹配、字段名不一致对比图层与字段清单补映射表后重新导入图形整体偏移带号错误、坐标系混用看坐标范围、核带号按正确带号重投影中文显示乱码文件编码不是 UTF-8查看源文件编码转码后重新导入构面不成功线未打断、节点未捕捉查悬挂点和伪节点先打断捕捉再构面质检误报多容差设置过严统计误报比例分档放松容差保存后卡顿数据量大、索引缺失查要素数量与索引分幅处理、重建索引导出后字段丢失目标格式字段限制核对字段名长度导出前改短字段名7. 团队协作与流程管理流程设计比工具更重要7.1 作业拆分按图幅还是按要素一个项目几个人一起做怎么拆活是个大学问。按图幅拆是最常见的优点是边界清楚缺点是接边处容易出问题。按要素类拆一个人负责所有房屋、一个人负责所有道路的优点是同类要素风格统一缺点是空间上重叠容易互相打架。我的经验是优先按图幅拆接边问题用标准化的接边流程解决。具体做法是相邻图幅之间预留一条重叠带比如 5 米宽作业员在重叠带内可以自由编辑最后统一做一次接边处理把重叠带内的要素按规则合并。接边的规则要提前定死比如以编号小的图幅为主以数据更新的一方为主不能每次靠商量。7.2 版本管理中间成果怎么存数据生产是个反复迭代的过程今天改了明天又改回来是常态。如果没有版本管理出了问题就只能从头再来。我的建议是设置关键节点存档导入完成、图形编辑完成、属性录入完成、质检通过、成果输出这五个节点各存一份。存档命名带上日期和节点名比如20240315_属性录入完成。版本管理还有一个容易被忽略的作用追责和复盘。出了问题的时候能快速定位是哪一步引入的下次就能针对性地改进流程。7.3 质检关口怎么设三道关比一道关好我现在的做法是设三道质检关而不是像以前一样只在最后查一次。第一道在录入时靠模板和字典做实时校验错了当场改成本最低。第二道在阶段完成时跑一遍完整的规则质检这次要出问题清单逐条处理。第三道在输出前按交付标准做一次针对性检查重点看格式、编码、完整性这些和交付直接相关的项。三道关听起来费时间实际上总时间比最后集中查一次要短得多。因为早期的问题修改成本极低晚期的问题修改成本极高把问题尽量往前赶是提升效率最直接的办法。最后分享一个我个人的体会。这么多年下来我越来越觉得空间数据生产的效率差异工具占三成流程占七成。同一套平台流程设计得好的团队能比流程混乱的团队快一倍以上。所以每次上新项目我都会花一两天时间先把要素类、编码、字段、规则、拆分方式、质检关口这些定清楚写成一份简短的作业手册让每个人手上都有一份。这份手册看起来不起眼但它决定了这个项目后面几个月是顺顺当当还是鸡飞狗跳。