iD学习 - 要素及属性
Presets and Fields
- Presets
- Preset文件
- Preset结构
- Preset属性
- name
- geometry
- tags
- addTags
- removeTags
- Fields / moreFields
- icon
- imageURL
- searchable
- matchSorce
- countryCodes
- notCountryCodes
- replacement
- reference
- Fields
- Field文件
- Field结构
- Field属性
- type
- key / keys
- universal
- geometry
- default
- options
- string
- snake_case
- caseSensitive
- min_value
- max_value
- prerequisiteTag
- countryCodes
- notCountryCodes
- urlFormat
- pattern
- 编译
- 自定义preset
Presets
Preset是iD编辑器预设的要素,Field是Preset的属性,定义文件为JSON类型,存在放在目录data/presets
中。
Preset文件
Presets定义文件为JSON类型,存在data/presets/presets
目录下。他们有组织的存放于基于k/v结构的目录层次中。
例如, preset的tag为leisure=park,定义文件为 data/presets/presets/leisure/park.json
Preset结构
一个简单的preset结构
{// 图标."icon": "maki-park",// fields中的属性默认显示在编辑器左侧的属性栏中.// 查看fields详细文档了解什么可以写在这里."fields": ["address"],// moreFields中的属性可以手动添加到属性栏. // 如果属性存在默认会显示在属性栏中."moreFields": ["phone","website"],// preset合法的几何类型.// 可选类型包括 point, area, line, and vertex.// vertexes是line中的point, 比如道路中的形状点.// lines是不闭合的ways, areas是闭合的ways."geometry": ["point", "area"],// Terms是preset的同义词// 他们会被添加到检索功能. // 查找woodland会返回park要素."terms": ["esplanade","village green","woodland"],// 当要素被选中时Tags会被默认添加,// 同时也用于匹配要素属于哪种类型.// 可以使用 "*" 匹配所有类型."tags": {"leisure": "park"},// 这个要素显示的英文名称."name": "Park"
}
完整的要素 JSON 定义可以参考文件 data/presets/schema/preset.json
Preset属性
name
要素的英文名称,它被发送到Transifex,以便转换成本地化语言。
此属性为必须,无默认值。
geometry
要素允许的几何类型数组,要素按顺序进行匹配。
- point:不属于任何道路的点
- vertex:属于一条或者多条道路的点
- line:线状要素
- area:一个闭合的线(首节点和尾节点相同)或者是一个
type=multipolygon
的关系 - relation:关系
闭合的路既可以是line也可以是area。如果要素可以是两种类型,当选择area类型是,编辑器会自动添加area=yes
标签。
应按优先顺序列出几何类型。例如,要素leisure=swimming_pool
中area在point之前。
此属性为必须,无默认值。
tags
一个拥有"key": "value"
标签的对象必须匹配到一个要素类型。通配符"*"
可以匹配这个key的任何value。
一个对象只能匹配到一个要素类型,如果匹配到多个类型,iD会根据matchScore、匹配的标签数量、使用的通配符
找到最佳匹配结果。
此属性为必须,无默认值。
addTags
当选择这个要素时可以选择添加的标签。默认值为tags
。如果需要,这个属性通常是tags
的超集。
iD的validator会建议用户从addTags
中添加缺失的标签来匹配要素。例如,Bridge要素有如下属性:
"tags": {"man_made": "bridge"},"addTags": {"man_made": "bridge","layer": "1"}
当添加一个Bridge要素,会默认给出man_made=bridge
和layer=1
标签,用户可以将layer
改为3
,要素仍然匹配,因为仍然拥有man_made=bridge
标签。如果用户删除了layer
标签,iD会建议添加回值1
。
removeTags
当要素变为其他类型时被删除的属性。默认值为addTags
,如果没有定义,默认值则为tags
。
Fields / moreFields
这两个属性都是属性路径的数组(例如:description 或者 generator/type),fields默认显示,moreFields在用户手动添加时显示或者有匹配的标签时显示。注意,一些属性的显示有先决条件prerequisiteTag
才会显示。
一个要素可以通过中括号引用另一个要素的属性,就像{preset},例如shop/books
引用了shop
的属性:
"fields": ["{shop}","internet_access"
],
"moreFields": ["{shop}","internet_access/fee","internet_access/ssid"
],
"tags": {"shop": "books"
}
如果fields
和moreFields
没有定义,则使用父要素的值。例如,shop/cooonvenience
自动使用shop
相同的属性。
在显式继承和隐式继承中,有属性定义的要素通常不会继承父要素属性。
icon
本地SVG文件名称。你可以使用下面任何一组图标。使用图标时使用前缀版本名称,例如"icon": "maki-park"
或者"icon": "tnp-2009223"
。
- iD’s spritesheet (
iD-
) - Maki (
maki-
),Mapbox地图图标 - Temaki (
temaki-
),一个maki的扩展包- 如果你要提交一个图标,这里是最好的位置。
- Font Awesome,上千的常用图标
- 分为免费版和专业版。你可以使用免费版如下样式:
- Solid (
fas-
) - Regular (
far-
) - Brands (
fab-
)
- Solid (
- 分为免费版和专业版。你可以使用免费版如下样式:
- The Noun Project (
tnp-
),上百万的常用图标。- 根据许可不同。你只能在iD使用public-domain图标。
- 根据样式不同。避免使用太细或者太细致的图标,他们不适合在小尺寸下使用。
- 使用图标的数字ID(例如,2009223)。当你在网站中选中图标链接时显示。
- 不幸的是,需要注册免费的API Key下载图标,即使是public-domain图标。添加一个文件
the_noun_project.auth
到iD的本地根目录,包含你的认证信息,例如{"consumer_key": "xxxxxx", "consumer_secret": "xxxxxx"}
。此文件不受版本控制。
imageURL
远程图片文件URL。并不能完全替换图标,两个图标都可能显示在用户界面中。
例如,imageURL用于从name-suggestion-index中指定品牌预设的logo。
图像至少为100100px以便在高分辨率屏幕上显示5050pt。
searchable
不推荐使用或者通用的要素可设置为"searchable": false
,这意味着在编辑现有数据时会使用他们,但在添加新要素时不能作为选项使用。
按照惯例,不可搜索的要素文件名以下划线开头。(例如,data/presets/presets/landuse/_farm.json
)
matchSorce
一个要素匹配的排序数字。
例如,一个要素有amenity=cafe
和building=commercial
标签,会匹配Cafe要素而不是Commercial Building要素,因为Commercial Building的matchSorce
比较低。
默认值为1.0。
countryCodes
一个两个字母字符数组,小写城市代码(ISO 3166-1 alpha-2
)。要素只有当用户在编辑指定的白名单国家时才能被搜索。不是用户位置或者语言设置,而是编辑的地图位置。
默认所有位置都可编辑
notCountryCodes
一个两个字母字符数组,小写城市代码(ISO 3166-1 alpha-2
)。与countryCodes
类似的黑名单。
replacement
一个更推荐的要素ID。iD验证器会与此要素设置匹配,推荐用户升级标签。
如果可能,请使用deprecated.json来指定旧标记的升级路径。此属性用于特殊情况,例如具有几何要求的升级。
reference
一个链接到wiki文档的要素的键值。只要要素包含多个标签时才需要。
例如:
"reference": {"key": "tower:type","value": "communication"
}
Fields
Fields是可以在要素中复用的元素。
Field文件
Fields定义文件为JSON类型,存在data/presets/fields
目录下。
field文件通常根据关联的key命名。例如,标签sport=*
存放在文件data/presets/fields/sport.json
中。当一个属性有多个版本时,我们在文件名中添加一个后缀:(sport.json, sport_ice.json, sport_racing_moter.json
)。
某些key使用冒号(’:’)命名。命名的属性根据其标签嵌套在文件夹中。例如,标签piste:difficulty=*
存放在文件data/presets/fields/piste/difficulty.json
中。
Field结构
{"key": "cuisine","type": "combo","label": "Cuisine"
}
完整的属性 JSON 定义可以参考文件 data/presets/schema/field.json
Field属性
type
指定属性的界面和行为的字符串。必须是以下值之一。
- Text属性
- text - 简单的单行文本属性
- number - 拥有上下键的数字输入文本属性(例如
width=*
) - localized - 具有本地化功能的文本字段(例如
name=*, name:es=*, etc.
) - tel - 电话号码输入文本属性(根据位置本地化)
- email - 邮箱地址输入文本属性
- url - URLs输入文本属性
- identifier - 身份证输入文本属性(例如
gnis:feature_id
) - textarea - 多行文本属性(例如
description=*
)
- Combo/Dropdown属性
- combo - 从多个选项选择一个选项的下拉框(例如
surface=*
) - typeCombo - 从泛型类别关键字中选择特定类型的下拉框(例如
waterway=*
,如果未设置,则标记将为waterway=yes
,但下拉列表中包含stream
、ditch
、river
等选项) - multiCombo - 用于向公用多建添加
yes
值的下拉框(例如recycling:*
->recycling:glass=yes
,recycling:paper=yes
,etc) - networkCombo - 帮助用户选择路由网络标签的下拉框(根据位置本地化)
- semiCombo - 用于向分号分隔的列表中添加多个值的下拉框(例如
sport=*
->soccer;lacrosse;athletics;field_hockey
)
- combo - 从多个选项选择一个选项的下拉框(例如
- Checkboxes
- check - 3个状态的checkbox:
yes
,no
,no tag
- defaultCheck - 2个状态的checkbox。选中为
yes
,未选中为no tag
- onewayCheck - 3个状态的checkbox,用于
oneway
属性。带有方向转换按钮。
- check - 3个状态的checkbox:
- Radio Buttons
- radio - 多选radio按钮属性
- structureRadio - 多选结构按钮属性。道路桥梁有扩展输入。
- Special
- access - 用于定义高速上的
access=*
的标签 - address - 用于输入地址信息的文本和下拉框(根据位置本地化)
- cycleway - 用于在高速上添加
cycleway:left
和cycleway:right
标签的下拉框 - maxspeed - 用于输入速度的数字文本属性和"mph/kph"的下拉框
- restrictions - 用于编辑转向限制的图形属性
- wikidata - 用于选择Wikidata实体的搜索属性
- wikipedia - 用于选择wiki语言和Wikipedia页面的属性
- access - 用于定义高速上的
key / keys
将要编辑的属性的属性名称。像address这样的复合属性在keys属性中需要一个key数组。
universal
如果属性定义中包含"universal": true
,则这个属性出现在所有要素的添加属性列表中。
geometry
如果指定,则仅显示此类几何。point
, vertex
, line
, area
。
default
属性的默认值。例如,building_area.json
会自动添加属性building=yes
到当前选择的building要素(仅当要素为闭合区域)
{"key": "building","type": "combo","default": "yes","geometry": "area","label": "Building"
}
options
Combo类型属性可以通过options
数组提供下拉框值域。用户可以从下拉框选择也可以自己输入。
{"key": "diaper","type": "combo","label": "Diaper Changing Available","options": ["yes", "no", "room", "1", "2", "3", "4", "5"]
}
string
Combo类型属性可以在string
属性使用name-value对。当属性有固定数量的选项,并且你想提供翻译描述时,这将非常有用。使用string
属性时,用户不能输入自己的值,必须从选项中选择。
{"key": "smoothness","type": "combo","label": "Smoothness","placeholder": "Thin Rollers, Wheels, Off-Road...","strings": {"options": {"excellent": "Thin Rollers: rollerblade, skateboard","good": "Thin Wheels: racing bike","intermediate": "Wheels: city bike, wheelchair, scooter","bad": "Robust Wheels: trekking bike, car, rickshaw","very_bad": "High Clearance: light duty off-road vehicle","horrible": "Off-Road: heavy duty off-road vehicle","very_horrible": "Specialized off-road: tractor, ATV","impassable": "Impassable / No wheeled vehicle"}}
}
如果Combo属性没有指定options
或者strings
,该属性将从Taginfo服务获取公共标签值用作下拉框。
snake_case
用于Combo属性,如果snake_case
为true
则标签中的空格
替换为下划线
。
默认值为true
caseSensitive
用于Combo属性,如果caseSensitive
为true
,则允许大小写敏感。
默认值为false
min_value
用于number属性,最小有效值。
无默认值
max_value
用于number属性,最大有效值。
无默认值
prerequisiteTag
先决条件标签。一些标签达到先决条件才会显示。
应包含如下属性:
- key:必须的标签key
可以选择性的选择如下属性之一: - value:key必须含有的值
- valueNot:key必须不含有的值
或者,对象可以包含单个属性: - keyNot:不能出现的key
例如,只有当internet_access
属性不是no
的时候,显示Internet Access Fee
属性。
"prerequisiteTag": {"key": "internet_access","valueNot": "no"
}
如果某个要素具有此属性的一个或多个key的值,则无论prerequisiteTag属性如何,都将显示属性。
countryCodes
一个两个字母字符数组,小写城市代码(ISO 3166-1 alpha-2
)。属性只有当用户在编辑指定的白名单国家时才能被使用。不是用户位置或者语言设置,而是编辑的地图位置。
默认所有位置都可使用
notCountryCodes
一个两个字母字符数组,小写城市代码(ISO 3166-1 alpha-2
)。与countryCodes
类似的黑名单。
urlFormat
用于identifier
属性,外部记录的永久链接URL。必须包含一个{value}
占位符用于替换标签值。
pattern
用于identifier
属性,正则表达式匹配有效值。
编译
编译presets,只需要执行npm run build
。
下列文件将自动生成,重新编译时被替换:
- data/presets/categories.json
- data/presets/fields.json
- data/presets/presets.json
- data/presets.yaml
- data/taginfo.json
- dist/locales/en.json
自定义preset
iD支持部署自定义preset集合,你可以通过preset访问器提供presets。
var id = iD.coreContext().presets({presets: { ... },fields: { ... },defaults: { ... },categories: { ... }
});
必须提供所有四个部分(presets、fields、defaults和categories)。此外,必须包括几个基本presets和fields。
必须包含基本的几何,以便每个要素至少能匹配到一个preset,例如:
"area": {"name": "Area","tags": {},"geometry": ["area"],"matchScore": 0.1
},
"line": {"name": "Line","tags": {},"geometry": ["line"],"matchScore": 0.1
},
"point": {"name": "Point","tags": {},"geometry": ["point", "vertex"],"matchScore": 0.1
},
"relation": {"name": "Relation","tags": {},"geometry": ["relation"],"matchScore": 0.1
}
必须包含一个name
属性:
"name": {"key": "name","type": "localized","label": "Name","placeholder": "Common name (if any)"
}
iD学习 - 要素及属性相关推荐
- 如何绘制逻辑图 — 6.要素的属性:内聚与解耦
在上一篇文中介绍了描述要素归集名称的属性(系统与模块),这一篇要说明描述要素归属的原则属性. 松耦合和高内聚,是决定最终完成系统是否具有应变性.复用性的重要设计原则,作为在分析和设计一线的需求工程师也 ...
- 如何绘制逻辑图 — 3.要素的属性:粒度与分层
在上一篇文中已经介绍过了,要想绘制出正确的逻辑图,就要掌握绘制逻辑图的三元素,三元素中的第一位是"要素".从本篇开始用4个篇幅介绍表达要素的属性. 不论从事软件工程上的那个岗位,& ...
- 如何绘制逻辑图 — 2.要素的属性
按照逻辑图的三元素原理(要素.逻辑.模型),已经知道要素是构成逻辑图的主体,那么构成逻辑图的要素有哪些特点.规律及标准,如何表达它们的这些特点.规律和标准呢?理解这些内容是正确绘制逻辑图的基础.我在培 ...
- 【029】获取选择要素的属性
---------------------------------------------------------------------------------------------------- ...
- 原生js获取以固定字符开头的控件id,并设置属性
原生js获取以固定字符开头的控件id,并设置属性 还在用JQ加CSS选择器获取指定id开头的DOM嘛? 现在试试 JavaScript提供的querySelectorAll函数 目前几乎主流浏览器均支 ...
- Owl 学习笔记之四---属性
Owl 学习笔记之四---属性 内容 概述
- Vue学习之ref属性
简介 主要讲解vue中的ref属性. 直接先说结论: 专门被用来给html元素和子组件注册引用信息的(id属性的替代者). 该属性应用在html元素时,获取的是dom元素对象,如果应用在组件标签上,那 ...
- Html学习:基础属性和控件
Html学习:第一课 html基础属性和控件 HTML代表超文本标记语言 HTML 是用于创建网页的标准标记语言 HTML 描述网页的结构 HTML由一系列元素组成 HTML 元素告诉浏览器如何显示内 ...
- CSS3学习之 animation 属性
发现animation这个新属性很有趣,在此学习,并整理下! 浏览器支持: Internet Explorer 10.Firefox 以及 Opera 支持 animation 属性: Safari ...
最新文章
- RandomRooms:用于3D目标检测的无监督预训练方法(ICCV2021)
- Serial Old收集器
- 现代化历险记:策略+将COBOL转换为Java的示例
- Qt工作笔记-图形视图框架中的分组,以及添加平行拖动图元
- ASP.Net数据库如何存取图片
- java jquery ajax_[Java教程]jquery ajax 使用
- [笔记].Nios II 软核性能基准
- MySQL经典50题目,必须拿下!
- 高频量化交易之王--李庆在华尔街
- vdbench(一)
- 威纶触摸屏如何设置数值输入元件的上下限和用户密码登录?
- 2019最新第三方支付牌照公司名单「完整」
- 【汇编语言】第三章 寄存器(内存访问)
- 盲盒小程序的开发功能介绍,优势有哪些
- linux中时间转换date
- slice、splic、splite相互间的区别
- 《Python绝技:运用Python成为顶级黑客》python3实践记录
- 数据外泄保护与国土安全部
- windows下载安装配置Geany
- 开启mongodb数据库命令行_MongoDB服务启动命令及DB创建
热门文章
- e3.exe的逆向分析
- bm25算法Java代码_BM25算法在Lucene中的应用
- MBG(mybatis逆向工程)+通用mapper+lombok
- 手机计算机那个简单好用,手机计算器隐藏的2个功能,只需要简单划一划,越早知道越好...
- BLE基础知识(一)
- 工作流引擎设计之子流程功能实现
- 制作ppt中几个比较实用好玩的技巧
- 计算机音乐奔跑,十首适合跑步的音乐 跑出节奏感
- 高斯-赛德尔(Gauss-Seidel)迭代法求解线性方程组matlab程序设计
- 7.31 计算器基本完工