一键把“纯色区划地图”数字化为 GIS 面要素:Map Digitizer Pro

文章发布时间:

最后更新时间:

一键把“纯色区划地图”数字化为 GIS 面要素:Map Digitizer Pro

做专题制图/论文配图/数据复现时,经常遇到这种情况:
你手里只有一张经过处理的地图图片(已经去掉地名、河流、行政区边界、图例),图面就是一块块纯色分区。你想要的不是“看起来
像”,而是 真正可在 ArcGIS/QGIS 里编辑/统计/叠加分析的矢量面数据。

我做了一个小工具:Map Digitizer Pro
输入图片 + 输入(或取色)图例颜色 → 一键输出 Shapefile/GeoPackage/GeoJSON,并且支持 小斑点自动并入临近面、实时预览、参
数调节、EXE 打包发布。

PixPin_2026-03-12_15-53-47
image-20260312155440911

1)这个工具解决了什么痛点?

传统手工数字化(ArcGIS 里一块块描)的问题大家都懂:慢、累、不可复现、还容易描错。
而很多“从图片转矢量”的工具要么只输出边界线、要么对颜色混合/抗锯齿很敏感、要么导出的格式 ArcGIS 不友好。

我这个工具的定位很明确:

  • 你的输入是“经过大模型/人工清理后的纯色分区图”(png/jpg 都行)
  • 你知道每一类的大致颜色(HEX/RGB),或者你希望直接在图上用取色笔点一下
  • 你要的是 矢量面要素,并且 ArcGIS 能打开(优先 Shapefile)

2)它能做什么(功能清单)

输入

  • 常见图片格式:PNG/JPG/JPEG/TIF…(自动转 RGB)

图例颜色(K 类可变)

  • 支持 HEX:b31e22 或 #b31e22
  • 支持 RGB:179,30,34 或 179 30 34
  • 色板显示:输入后自动显示色块对比
  • 取色笔:导入图片后直接点击取色
    • auto:有空行先填空行,否则替换当前行
    • replace:替换当前选中行
    • add:新增一行

数字化处理

  • 颜色容差(tol)可调:解决抗锯齿、轻微颜色混合
  • 白背景阈值可调:背景不够白也能处理
  • “未知像素回填”可选:把文字/线条/噪声点归到最近的类别
  • 小斑点处理:
    • drop:删掉小面(变背景)
    • merge:小面并入临近面(推荐)
    • 阈值(min_pixels)可调:你想“合并更狠”,就把阈值拉高

输出

  • Shapefile(.shp,ArcGIS 兼容性最好)
  • GeoPackage(.gpkg)
  • GeoJSON(.geojson)
  • 同时输出预览与中间结果:

预览交互

  • 缩放:鼠标滚轮
  • 拖动:中键/右键拖动平移

3)适用场景与输入要求(很重要)

这个工具最适合的输入是:

  • 颜色种类有限(例如 8 类/10 类/20 类都可以)
  • 图面是大片纯色块
  • 地名、河流、边界线、图例等尽量已经去掉(越干净越好)
  • 背景尽量接近白色(不白也能调 white_thresh)

如果你的图存在明显渐变、阴影、纹理底图,那就不是这个工具的目标输入了(会天然更难“按颜色分类”)。

4)上手流程(GUI)

Step 1:导入图片
点击“选择…”导入 PNG/JPG。

Step 2:录入图例颜色

  • 你可以手动输入 HEX/RGB
  • 或勾选“取色笔”,在原图上点击取色
  • 颜色行数可增删,左侧色板区域带滚动条,颜色再多也不挤

Step 3:调参数(建议先调这三个)

  • tol(颜色容差):边缘混合明显 → 调大(例如 14~24)
  • min_pixels(小斑点阈值):想合并更彻底 → 调大(例如 1000/3000/10000,取决于分辨率)
  • small_action=merge:推荐,直接把小斑点并入临近面

Step 4:Run Preview 预览 → Export 导出
导出时建议先选 SHP,ArcGIS 打开最稳。

【截图占位:参数区域与预览对比】

5)导出数据“有坐标”还是“像素坐标”?(很多人会踩坑)

这里要讲清楚:
图片本身没有地理参考,导出的矢量默认就是“像素坐标系”(也就是一个平面坐标)。

如果你希望导出矢量直接落在真实经纬度/投影坐标上,你需要提供一张与输入图片同宽同高的参考栅格(GeoTIFF 等),在工具里选
择 ref_raster:

  • 程序会拷贝参考栅格的 transform/CRS
  • 这样输出的矢量就能在 ArcGIS/QGIS 里正确叠加

一句话总结:

  • 有 ref_raster → 真 GIS 坐标
  • 无 ref_raster → 像素坐标(仍可做拓扑/面积相对统计,但不是真实地理位置)

6)为什么 ArcGIS 打不开 GPKG?我怎么保证可打开?

经验建议很简单:

  • 优先输出 .shp(兼容性最好)
  • .gpkg 更推荐 ArcGIS Pro / QGIS 使用;ArcMap 不支持 GeoPackage

所以我在工具里把 SHP 放在最显眼的位置,就是为了尽量减少“导出后打不开”的问题。

7)开源说明与获取方式

本项目采用 MIT License,你可以自由使用/修改/二次开发。
仓库我会持续更新(欢迎 Issue / PR)。

把你的仓库链接放这里(建议同时放 CSDN 与知乎置顶):

https://github.com/QD127/map-digitization

如果你觉得这个工具帮你省了时间:

  • 点个 Star / 收藏
  • 转发给需要“论文图 → GIS 面数据”的朋友
  • 也欢迎你把处理失败的样例图发我,我会优先优化鲁棒性

8)参数经验:怎么调得又准又干净?

给你一套“从快到稳”的调参顺序:

  1. 先保证颜色中心值靠谱
    • 用取色笔在每一类“最纯净的区域”点一下
  2. tol 从 10~14 起步
    • 边缘漏分/断裂 → 往上加
    • 误把别的颜色吞进来 → 往下减
  3. min_pixels 逐步加大 + merge
    • 你想“更牛逼的整洁面” → 就把小斑点阈值加大(分辨率越高阈值越大)
  4. 仍有碎边、锯齿感明显时,再考虑:
    • simplify(适度简化几何)
    • dissolve(按类别融合)

9)结尾:我为什么做这个?

数字化,狗都不做。

所以我把流程做成:输入图 + 输入颜色 → 预览 → 一键输出 GIS 面要素。
如果你也在做类似工作,希望它能真的帮你节省时间。