iD-editor 详解|OSM官方在线编辑器,基于D3.js的轻量地图编辑器

iD-editor 详解|OSM官方在线编辑器,基于D3.js的轻量地图编辑器

前言

上一篇我们介绍了OSM(OpenStreetMap)开放街图数据库。OSM只是一份地理数据,想要新增、修改道路、建筑、POI,就需要编辑器。iD-editor 就是OSM默认自带、新手最常用的在线编辑器,也是很多人入门矢量地图编辑、学习D3地图渲染的标杆项目。

区分:iD 只是编辑器,不存储地图数据,所有修改提交后,才会同步到OSM全球数据库。

一、iD-editor 是什么

iD 是一款纯前端、浏览器直接运行的开源OSM编辑器,由OSM官方维护。

访问入口:登录OSM官网 openstreetmap.org,点击顶部【编辑】,默认打开的就是 iD。

和桌面端 JOSM 并称为OSM两大主流编辑器:

  • iD:轻量、网页版、D3+SVG、适合小范围精细编辑、新手友好
  • JOSM:桌面客户端、Java开发、适合批量修改、复杂关系编辑

二、核心技术栈(GIS前端重点)

这也是很多WebGIS开发者专门研究iD的原因:

✅ 核心渲染:D3.js + SVG

D3 在 iD 里面承担这些核心工作:

  1. 经纬度投影转换(WGS84 → 画布屏幕坐标)
  2. 把OSM三大要素 Node / Way / Relation 渲染成SVG点、线、面
  3. 地图平移、缩放、框选、拖拽顶点、高亮交互
  4. 要素标签、文字标注绘制

✅ 配套技术:原生JS、模块化打包、可独立部署

iD 可以脱离OSM官网单独部署,私有化搭建自己的矢量地图编辑器,这也是很多公司二次开发它的理由。

✅ 协议:ISC开源协议,宽松友好,学习二次开发很合适

三、iD 可以做哪些操作

面向地图贡献者:

  • 添加POI:便利店、公厕、充电桩、公交站牌
  • 绘制、修改建筑轮廓、道路、人行道、台阶
  • 补充标签tag:wheelchair=yes、楼层、门牌号、限速
  • 修正错误的道路走向、闭合面、地名

面向开发者:

  • 学习"矢量要素编辑"整套交互逻辑:拖拽顶点、分割线、合并面、撤销重做
  • 参考D3-SVG地图渲染方案,自研简易地图编辑器
  • 私有化部署,对接自有地理数据库(改造后不提交到公网OSM)

四、iD 的优点

  1. 零安装,浏览器直接打开使用,不需要装客户端
  2. 界面简洁,自带标签提示,新手不用死记OSM的key/value规范
  3. 基于D3+SVG,代码结构清晰,非常适合前端学习矢量地图交互
  4. 官方持续维护,迭代稳定

五、iD 的局限(客观避坑)

  1. 大批量要素编辑性能差,一次性改上百个要素容易卡顿,批量场景优先JOSM
  2. 复杂Relation(复杂公交线路、带空洞多边形)编辑体验不如JOSM顺手
  3. 原生默认提交数据到公网OSM,私有化对接需要二次改造源码
  4. 国内访问OSM官网的iD经常有网络卡顿问题

六、源码获取入口

官方仓库:https://github.com/openstreetmap/iD

很多小伙伴反馈 GitHub clone / 下载源码速度很慢,这里准备备用渠道:

如果 GitHub 下载源码速度不理想,也可以关注公众号,发送 iD-editor,免费获取 v1.9.2 和 v2.38.0 版本源码。
💡版本说明:

  • v1.9.2:老版本,结构简单,适合新手读源码、学习D3渲染逻辑
  • v2.38.0:较新稳定版,功能完善,适合二次改造、私有化部署

七、适合哪些人阅读学习

  1. OSM爱好者,想要上手给开放地图贡献数据
  2. GIS前端,想自研矢量要素编辑器、学习D3地图交互
  3. 需要私有化搭建简易地图标注工具,寻找开源参考模板

小结

iD-editor 不只是一个用来改OSM地图的工具,它更是一个教科书级别的 D3+SVG矢量地图编辑项目。

  • 普通使用者:拿来完善OSM地图
  • 开发者:阅读源码,学习要素拾取、顶点拖拽、投影变换、地图编辑整套前端逻辑

配套文章:

👉 上一篇:OSM是什么?OpenStreetMap开放街图通俗入门讲解

👉 下一篇:OpenStreetMap iD‑editor:v1.9.2 与 v2.38.0 版本深度对比

相关推荐
小熊恋旧2 小时前
Python 面向对象编程:方法、属性、继承与多态详解
开发语言·python
云边云科技_云网融合2 小时前
面向汽车零部件制造业场景的解决方案 | 70 秒:一台车下线的时间里,藏着五张网
开发语言·汽车·php
Evand J2 小时前
【PMSM滤波例程2】PMSM未知负载转矩观测EKF。MATLAB例程(负载增广EKF与实际仿真结果)。附下载链接
开发语言·matlab·电机
will_net2 小时前
apollo 站点部署&C#接入
开发语言·c#·apollo
晗夜未央3 小时前
任务队列反复失败,先分清重试、阻塞和结果待核对
开发语言·javascript
熊猫钓鱼>_>3 小时前
四种书签,一条时间线:一个读书 App 的记忆颗粒与它的边界案例【鸿蒙心迹】
开发语言·华为·ai编程·harmonyos·鸿蒙·openharmony·鸿蒙pc
努力努力再努力wz3 小时前
【Lua 入门系列】Lua 函数深入理解:函数对象、多返回值、可变参数、闭包、递归与尾调用优化
开发语言·lua
jktantan3 小时前
每个节点 41 字节:把一棵百万节点树拆进 14 个 typed array
前端·javascript·vue.js·算法·typescript
飞浪纪元[FWC–FE]4 小时前
从零到一键绿:Qt 5.14.2 + VS2019 开发环境搭建、Kit 套件配置与构建错误修复完全手册
开发语言·qt