一、 iD编辑器介绍
iD编辑器是基于浏览器的事实标准OpenStreetMap编辑器。iD编辑器快速、易用,可以借助来自诸如卫星或航空影像、GPS、Field Papers或Mapillary等多种数据源的数据绘图。
在OpenStreetMap中用个人账号登陆,在编辑下拉框中选择使用iD编辑器。

二、 iD编辑器的重要模块
Core Module
这个模块为iD的核心模块,分为以下内容:
- iD.coreContext:包含了所有全剧对象和引导代码
- iD.coreGraph:包含当前图层的所有实体以及遍历他们间的关系
- iD.coreHistory :在编辑时的撤销/重做的历史记录
- iD.coreDifference:在两个图层(graph)间比较不同
- iD.coreTree:对加载的对象快速执行空间索引
数据编辑
主要利用iD.coreGrap,graph图层最主要的就是将实体的唯一id和实体联系在一起。这样的好处是,当我们添加、删除实体时,生成一个新的graph,然后它直接引用旧的graph上的未改变的实体就可以了(只需取得未改变实体的id)
历史管理
利用iD.coreHistory:这个history就是一个存储历史版本的栈,只需要渲染这个栈的最顶层(当前版本)就可以了。假设现在有三个版本:his2、his1、current。那么栈就是这样的:current -> his1 -> his2 。想要撤销,只需要回到上一个版本,即弹出current,那么当前的页面渲染的就是his1
OSM Module
在iD中有三种实体类型(iD.osmEntity):点(Node)、线(Way)、区域(Relation)。

1. Node
点元素是空间中的一个点,由id、latitude和longitude定义,至少带有一个标签。且点是单独的,不构成任何一条线的组成,
以下就是一个点元素:

一个点元素的例子:
<node id = “ 25496583” lat = “ 51.5173639” lon = “ -0.140043” >
<标记 k = ”高速公路“ v = ”交通信号“ />
</ node>
2. Way
Way为点的有序集合,至少带有一个标签或者被包含在Relation中。一个Way可以是闭合的,也可以是不闭合的。
以下就是一条线(路):

- open way
非闭合的道路不共享第一个节点和最后一个节点,例如高速公路。在道路的绘制中使用forward
, backward
, left
和right
来描述道路方向。
- close way
闭合的道路共享第一个节点和最后一个节点
- area
一个闭合的道路带有area=yes
的标签被解释为一个区域
这是一个Clipstone Stree住宅单向高速公路的栗子:
<way id = “ 5090250” >
<tag k = “ Highway” v = “ residential” />
<tag k = “ name” v = “ Clipstone Street” />
<tag k = “ oneway” v = “yes” />
</ way>
3. Relation
实现更复杂的区域,比如湖中环岛公路。
以下就是一个区域:

实体会被保存在OSM数据库中
为了在地图上修改数据(增加点,删除线),我们就需要修改实体来达到预期目的,但是我们无法直接操作这些数据库中的实体,只能通过拷贝出一个副本,然后在这个副本上进行编辑操作,然后在新旧graph间通过对比,引用未改变的旧graph上的实体id,以及修改后的新graph上的实体id,形成一个新的history,压入历史栈中。
Actions Module

添加点,鼠标指针变成一个(+)号,点击想要添加的地点标出,左侧出现一个表单,在表单中选择这个点的属性,以及要素的编辑

如果想要删除这个点,iD也提供了删除功能

添加线,鼠标指针将变成加(+)号,在路段开始的地方点击鼠标画一个点,移动鼠标并通过点击添加其他关键点,通过双击结束画线

左侧有选择属性的表单

对线的操作提供以下功能:
- 分离
- 移动
- 反转
- 旋转
- 删除

添加区域,鼠标指针会变成一个加(+)号,以影像为参照勾绘一栋建筑

左侧有选择属性的表单

且提供了对区域的操作

Behavior Module
有一些模式共有的方法(例如鼠标悬停在某个实体时,实体周围有红色光晕),但不是所有模块都需要这个方法,所以设置了off来卸载不需要的方法
以下道路被选中,出现高亮:

Operations Module
对区域实行一些图形化处理
