Merge branch 'master' into Psigio-3375

This commit is contained in:
Bryan Housel
2016-12-14 11:30:53 -05:00
250 changed files with 19027 additions and 4204 deletions

7
.gitignore vendored
View File

@@ -8,3 +8,10 @@ dist/mapillary-js/
node_modules/
npm-debug.log
transifex.auth
# autogenerated symlinks
land.html
img
css/img
test/css
test/img

View File

@@ -2,4 +2,5 @@ language: node_js
node_js:
- "4"
- "6"
- "7"
sudo: false

147
API.md
View File

@@ -8,8 +8,8 @@ iD supports several URL parameters. When constructing a URL to a standalone inst
of iD (e.g. `http://openstreetmap.us/iD/release/`), the following parameters are available
in the hash portion of the URL:
* `map` - A slash separated `zoom/longitude/latitude`. Example:
`map=20.00/-77.02271/38.90085`
* `map` - A slash separated `zoom/latitude/longitude`. Example:
`map=20.00/38.90085/-77.02271`
* `id` - The character 'n', 'w', or 'r', followed by the OSM ID of a node,
way or relation, respectively. Selects the specified entity, and, unless
a `map` parameter is also provided, centers the map on it.
@@ -35,8 +35,7 @@ When constructing a URL to an instance of iD embedded in the OpenStreetMap Rails
Port (e.g. `http://www.openstreetmap.org/edit?editor=id`), the following parameters
are available as regular URL query parameters:
* `map` - slash separated `zoom/latitude/longitude`. Example:
`map=20.00/38.90085/-77.02271`.
* `map` - same as standalone
* `lat`, `lon`, `zoom` - Self-explanatory.
* `node`, `way`, `relation` - Select the specified entity.
* `background` - same as standalone
@@ -138,37 +137,137 @@ class.
Elements that are currently selected shall have the `.selected` class.
## Customized Deployments
iD is used to edit data outside of the OpenStreetMap environment. There are some basic configuration steps to introduce custom presets, imagery and tag information.
iD may be used to edit maps in a non-OpenStreetMap environment. This requires
certain parts of the iD code to be replaced at runtime by custom code or data.
iD is written in a modular style and bundled with [rollup.js](http://rollupjs.org/),
which makes hot code replacement tricky. (ES6 module exports are
[immutable live bindings](http://www.2ality.com/2015/07/es6-module-exports.html)).
Because of this, the parts of iD which are designed for customization are exported
as live bound objects that can be overriden at runtime _before initializing the iD context_.
### Services
The `iD.services` object includes code that talks to other web services.
To replace the OSM service with a custom service that exactly mimics the default OSM service:
```js
iD.services.osm = serviceMyOSM;
```
Some services may be removed entirely. For example, to remove the Mapillary service:
```js
iD.services.mapillary = undefined;
// or
delete iD.services.mapillary;
```
### Background Imagery
iD's background imagery database is stored in the `iD.data.imagery` array and can be
overridden or modified prior to creating the iD context.
Note that the "None" and "Custom" options will always be shown in the list.
To remove all imagery from iD:
```js
iD.data.imagery = [];
```
To replace all imagery with a single source:
```js
iD.data.imagery = [{
"id": "ExampleImagery",
"name": "My Imagery",
"type": "tms",
"template": "http://{switch:a,b,c}.tiles.example.com/{z}/{x}/{y}.png"
}];
```
Each imagery source should have the following properties:
* `id` - Unique identifier for this source (also used as a url paramater)
* `name` - Display name for the source
* `type` - Source type, currently only `tms` is supported
* `template` - Url template, valid replacement tokens include:
* `{z}`, `{x}`, `{y}` - for Z/X/Y scheme
* `{-y}` or `{ty}` - for flipped Y
* `{u}` - for quadtile scheme
* `{switch:a,b,c}` - for parts of the url that can be cycled for connection parallelization
Optional properties:
* `description` - A longer source description which, if included, will be displayed in a popup when viewing the background imagery list
* `overlay` - If `true`, this is an overlay layer (a transparent layer rendered above base imagery layer). Defaults to `false`
* `scaleExtent` - Allowable min and max zoom levels, defaults to `[0, 20]`
* `polygon` - Array of coordinate rings within which imagery is valid. If omitted, imagery is assumed to be valid worldwide
* `overzoom` - Can this imagery be scaled up when zooming in beyond the max zoom? Defaults to `true`
* `terms_url` - Url to link to when displaying the imagery terms
* `terms_html` - Html content to display in the imagery terms
* `terms_text` - Text content to display in the imagery terms
* `best` - If set to `true`, this imagery is considered "better than Bing" and may be chosen by default when iD starts. Will display with a star in the background imagery list. Defaults to `false`
For more details about the `iD.data.imagery` structure, see
[`update_imagery.js`](https://github.com/openstreetmap/iD/blob/master/data/update_imagery.js).
### Presets
iD can use external presets exclusively or along with the default OpenStreetMap presets. This is configured using the `context.presets` accessor. To use external presets alone, initialize the iD context with a custom `Presets` object:
iD's preset database is stored in the `iD.data.presets` object and can be overridden
or modified prior to creating the iD context.
The format of the `presets` object is
[documented here](https://github.com/openstreetmap/iD/tree/master/data/presets#custom-presets).
To add a new preset to iD's existing preset database.
```js
var id = iD.Context(window)
.presets(customPresets)
.imagery(iD.dataImagery);
iD.data.presets.presets["aerialway/zipline"] = {
geometry: ["line"],
fields: ["incline"],
tags: { "aerialway": "zip_line" },
name: "Zipline"
};
```
The format of the Preset object is [documented here](https://github.com/openstreetmap/iD/tree/master/data/presets#custom-presets).
### Imagery
Just like Presets, Imagery can be configured using the `context.imagery` accessor:
To completely replace iD's default presets with your own:
```js
var id = iD.Context(window)
.presets(customPresets)
.imagery(customImagery);
iD.data.presets = myPresets;
```
The Imagery object should follow the structure defined by [editor-layer-index](https://github.com/osmlab/editor-layer-index/blob/gh-pages/schema.json)
To run iD with the minimal set of presets that only match basic geometry types:
```js
iD.data.presets = {
presets: {
"area": {
"name": "Area",
"tags": {},
"geometry": ["area"]
},
"line": {
"name": "Line",
"tags": {},
"geometry": ["line"]
},
"point": {
"name": "Point",
"tags": {},
"geometry": ["point"]
},
"vertex": {
"name": "Vertex",
"tags": {},
"geometry": ["vertex"]
},
"relation": {
"name": "Relation",
"tags": {},
"geometry": ["relation"]
}
}
};
```
### Minimum Editable Zoom
@@ -177,7 +276,7 @@ The minimum zoom at which iD enters the edit mode is configured using the `conte
```js
var id = iD.Context(window).
var id = iD.Context()
.minEditableZoom(zoom_level)
```

View File

@@ -1,59 +1,74 @@
## d3
## iD Architecture
iD is written in a modular code style using ES6 modules. The modules are bundled
with [rollup.js](http://rollupjs.org/). iD eventually aims to be a reusable,
modular library to kickstart other JavaScript-based tools for OpenStreetMap.
### d3
[d3](http://d3js.org/) is the primary library used by iD. It is used for
rendering the map data as well as many sorts of general DOM manipulation tasks
for which jQuery would often be used.
Notable features of d3 that are used by iD include
[d3.xhr](https://github.com/mbostock/d3/wiki/Requests#wiki-d3_xhr), which is
[d3.request](https://github.com/d3/d3/blob/master/API.md#requests-d3-request), which is
used to make the API requests to download data from openstreetmap.org and save
changes;
[d3.dispatch](https://github.com/mbostock/d3/wiki/Internals#wiki-d3_dispatch),
[d3.dispatch](https://github.com/d3/d3/blob/master/API.md#dispatches-d3-dispatch),
which provides a callback-based [Observer
pattern](http://en.wikipedia.org/wiki/Observer_pattern) between different
parts of iD;
[d3.geoPath](https://github.com/mbostock/d3/wiki/Geo-Paths#wiki-path), which
[d3.geoPath](https://github.com/d3/d3/blob/master/API.md#paths), which
generates SVG paths for lines and areas; and
[d3.behavior.zoom](https://github.com/mbostock/d3/wiki/Zoom-Behavior#wiki-zoom),
[d3.zoom](https://github.com/d3/d3/blob/master/API.md#zooming-d3-zoom),
which implements map panning and zooming.
## Core
The iD *core* implements OSM data types, a graph of OSM objects'
relationships to one another, an undo/redo history for changes made during
editing, and a couple of important auxiliary classes. It eventually aims
to be a reusable, modular library to kickstart other JavaScript-based
tools for OpenStreetMap.
### Core Module
The OSM data model includes three basic data types: nodes, ways, and
relations.
The iD *core* module implements the basic datastructures needed to support
browser-based editing:
* A _node_ is a point type, having a single geographic coordinate.
* A _way_ is an ordered list of nodes.
* A _relation_ groups together nodes, ways, and other relations to provide
* `iD.coreContext` - container for all iD "global" objects and bootstrap code
* `iD.coreGraph` - graph of objects and their relationships to one another
* `iD.coreHistory` - undo/redo history for changes made during editing
* `iD.coreDifference` - efficiently determine the difference between two graphs
* `iD.coreTree` - performs fast spatial indexing of the loaded objects
### OSM Module
The iD *osm* module includes classes which represent the basic OpenStreetMap
objects: nodes, ways, and relations.
* `iD.osmNode` - a _node_ is a point type, having a single geographic coordinate
* `iD.osmWay` - a _way_ is an ordered list of nodes
* `iD.osmRelation` - a _relation_ groups together nodes, ways, and other relations to provide
free-form higher-level structures.
Each of these three types has _tags_: an associative array of key-value pairs which
Each of these three types has _tags_: an associative array of key-value pairs which
describe the object.
In iD, these three types are implemented by `iD.Node`, `iD.Way` and
`iD.Relation`. These three classes inherit from a common base, `iD.Entity`.
* `iD.osmEntity` - common base class for `iD.osmNode`, `iD.osmWay`, `iD.osmRelation`
These three classes inherit from a common base, `iD.osmEntity`.
This is the only use of classical inheritance in iD, but it's justified
by the common functionality of the types. Generically, we refer to a
by the common functionality of the types. Generically, we refer to a
node, way or relation as an _entity_.
Every entity has an _ID_ either assigned by the OSM database or
a negative, local identifier assigned by iD for newly-created objects.
IDs from the OSM database as treated as opaque strings; no
Every entity has a unique numeric `id`. By convention, positive numbers are
assigned by the OSM database for saved features, and negative numbers are
assigned by the iD editor for local newly-created objects.
`id` values from the OSM database as treated as opaque strings; no
[assumptions](http://lists.openstreetmap.org/pipermail/dev/2013-February/026495.html)
are made of them other than that they can be compared for identity and do not
begin with a minus sign (and thus will not conflict with proxy IDs). The three
types of entities have separate ID spaces: a
node can have the same numeric ID as a way or a relation. Instead of segregating
ways, nodes, and other entities into different datastructures,
iD internally uses fully-unique IDs generated by prefixing
each OSM ID with the first letter of the entity type. For example, a way
with OSM ID 123456 is represented as 'w123456' within iD.
begin with a minus sign (and thus will not conflict with local `id` values).
The three types of entities have separate `id` spaces: a node can have the
same numeric `id` as a way or a relation. Instead of segregating ways, nodes,
and other entities into different datastructures, iD internally uses fully-unique
`id` values generated by prefixing each OSM ID with the first letter of the entity
type. For example, a way with OSM `id` `123456` is represented as `w123456`
within iD.
iD entities are *immutable*: once constructed, an `Entity` object cannot
change. Tags cannot be updated; nodes cannot be added or removed from ways,
@@ -66,19 +81,30 @@ structure](http://en.wikipedia.org/wiki/Persistent_data_structure).
Since iD is an editor, it must allow for new versions of entities. The
solution is that all edits produce new copies of anything that changes. At the
entity level, this takes the form of methods such as `iD.Node#move`, which
returns a new node object that has the same ID and tags as the original, but a
different coordinate. More generically, `iD.Entity#update` returns a new
entity of the same type and ID as the original but with specified properties
entity level, this takes the form of methods such as `iD.osmNode#move`, which
returns a new node object that has the same `id` and `tags` as the original, but a
different `loc` coordinate. More generically, `iD.osmEntity#update` returns
a new entity of the same type and `id` as the original but with specified properties
such as `nodes`, `tags`, or `members` replaced.
![](http://farm9.staticflickr.com/8087/8508309757_ccf5b6f09b_o.png)
Entities are related to one another: ways have many nodes and relations have
many members. To render a map of a certain area, iD needs a
many members.
The osm module also includes code related to special kinds of objects in OpenStreetMap.
* `iD.osmIntersection` - code for working with turn restrictions
* `iD.osmLanes` - code for working with traffic and turn lanes
* `iD.osmMultipolygon` - code for working with multipolygon relations
### Editing OSM
To render a map of a certain area, iD needs a
datastructure to hold all the entities in that area and traverse these
relationships. `iD.Graph` provides this functionality. The core of a graph is
a map between IDs and the associated entities; given an ID, the graph can give
relationships. `iD.coreGraph` provides this functionality. The core of a graph is
a map between `id`s and the associated entities; given an `id`, the graph can give
you the entity. Like entities, a graph is immutable: adding, replacing, or
removing an entity produces a new graph, and the original is unchanged.
Because entities are immutable, the original and new graphs can minimize
@@ -87,7 +113,7 @@ copying the entire graph.
This persistent data structure approach is similar to the internals of
the [git](http://git-scm.com/) revision control system.
The final major component of the core is `iD.History`, which tracks the changes
The final major component of the core is `iD.coreHistory`, which tracks the changes
made in an editing session and provides undo/redo capabilities. Here, the
immutable nature of the core types really pays off: the history is a simple
stack of graphs, each representing the state of the data at a particular point
@@ -102,41 +128,41 @@ Instead of changing a single copy of local data and having to implement
an 'undo' for each specific action, actions in iD do not need to be aware
of history and the undo system.
Finally, we have the auxiliary classes `iD.Difference` and `iD.Tree`.
Finally, we have the auxiliary classes `iD.coreDifference` and `iD.coreTree`.
`iD.Difference` encapsulates the difference between two graphs, and knows how to calculate the
`iD.coreDifference` encapsulates the difference between two graphs, and knows how to calculate the
set of entities that were created, modified, or deleted, and need to be redrawn.
```js
var a = iD.Graph(), b = iD.Graph();
var a = iD.coreGraph(), b = iD.coreGraph();
// (fill a & b with data)
var difference = iD.Difference(a, b);
var difference = iD.coreDifference(a, b);
// returns entities created between and b
// returns entities created between a and b
difference.created();
```
`iD.Tree` calculates the set of downloaded entities that are visible in the
`iD.coreTree` calculates the set of downloaded entities that are visible in the
current map view. To calculate this quickly during map
interaction, it uses an [R-tree](http://en.wikipedia.org/wiki/R-tree).
```js
var graph = iD.Graph();
var graph = iD.coreGraph();
// (load OSM data into graph)
// this tree indexes the contents of the graph
var tree = iD.Tree(graph);
var tree = iD.coreTree(graph);
// quickly pull all features that intersect with an extent
var features = tree.intersects(
iD.geoExtent([0, 0], [2, 2]), tree.graph());
```
## Actions
### Actions Module
In iD, an _action_ is a function that accepts a graph as input and returns a
new, modified graph as output. Actions typically need other inputs as well; for
example, `iD.actionDeleteNode` also requires the ID of a node to delete. The
example, `iD.actionDeleteNode` also requires the `id` of a node to delete. The
additional input is passed to the action's constructor:
```js
@@ -165,10 +191,10 @@ knowledge of the OpenStreetMap data model. It is our hope that JavaScript
based tools for OpenStreetMap can reuse the iD's core implementation,
significantly reducing the work necessary to create a robust tool.
## Modes
### Modes Module
With _modes_, we shift gears from abstract data types and algorithms to the
parts of the architecture that implement the user interface for iD. Modes are
parts of the architecture that implement the user interface for iD. Modes are
manifested in the interface by the three buttons at the top left:
![Mode buttons](docs/img/modes.png)
@@ -199,7 +225,7 @@ The `exit` mode does the opposite, removing the behavior installed by the
and exclusive: each mode knows exactly the behavior that is specific to that
mode, and exactly one mode's behavior is active at any time.
## Behavior
### Behavior Module
Certain behaviors are common to more than one mode. For example, iD indicates
interactive map elements by drawing a halo around them when you hover over
@@ -208,7 +234,7 @@ of duplicating the code to implement this behavior in all these modes, we
extract it to `iD.behaviorHover`.
_Behaviors_ take their inspiration from [d3's
behaviors](https://github.com/mbostock/d3/wiki/Behaviors). Like d3's `zoom`
behaviors](https://github.com/d3/d3/blob/master/API.md). Like d3's `zoom`
and `drag`, each iD behavior is a function that takes as input a d3 selection
(assumed to consist of a single element) and installs the DOM event bindings
necessary to implement the behavior. The `Hover` behavior, for example,
@@ -223,12 +249,12 @@ Each behavior implements an `off` function that "uninstalls" the behavior.
This is very similar to the `exit` method of a mode, and in fact many modes do
little else but uninstall behaviors in their `exit` methods.
## Operations
### Operations Module
_Operations_ wrap actions, providing their user-interface: tooltips, key
bindings, and the logic that determines whether an action can be validly
performed given the current map state and selection. Each operation is
constructed with the list of IDs which are currently selected and a `context`
constructed with the list of `id`s which are currently selected and a `context`
object which provides access to the history and other important parts of iD's
internal state. After being constructed, an operation can be queried as to
whether or not it should be made available (i.e., show up in the context menu)
@@ -250,11 +276,11 @@ the history, and then enter the appropriate mode. For example,
`iD.operationSplit` performs `iD.actionSplit`, then enters
`iD.modeSelect` with the resulting ways selected.
## Map Rendering
### Renderer and SVG Modules
Finally, we get to the parts of iD that actually draw and manipulate the map
entities on screen. The rendering is coordinated by `iD.Map`, which takes care
of setting up a [Spherical Mercator](http://bl.ocks.org/mbostock/3757132)
entities on screen. The rendering is coordinated by `iD.rendererMap`, which
takes care of setting up a [Spherical Mercator](http://bl.ocks.org/mbostock/3757132)
projection and the [zoom
behavior](https://github.com/mbostock/d3/wiki/Zoom-Behavior), and provides
accessors for such things as the current zoom level and map center.
@@ -271,7 +297,7 @@ entity types of the OSM data model:
For each of these geometric types, `iD.svg` has a corresponding module:
`iD.svgPoints`, `iD.svgVertices`, `iD.svgLines`, and `iD.svgAreas`. To
render entities on screen, `iD.Map` delegates to these modules. Internally,
render entities on screen, `iD.rendererMap` delegates to these modules. Internally,
they make heavy use of [d3 joins](http://bost.ocks.org/mike/join/) to
manipulate the SVG elements that visually represent the map entities. When an
entity is rendered for the first time, it is part of the _enter_ selection,
@@ -289,53 +315,44 @@ via CSS at either the key or key-value levels. SVG elements also receive a
class corresponding to their entity type (`node`, `way`, or `relation`) and
one corresponding to their geometry type (`point`, `line`, or `area`).
The `iD.svg` namespace has a few other modules that don't have a one-to-one
The `iD.svg` module has a few other submodules that don't have a one-to-one
correspondence with entities:
* `iD.svgMidpoints` renders the small "virtual node" at the midpoint between
* `iD.svgMidpoints` - draws the small "virtual node" at the midpoint between
two vertices.
* `iD.svgLabels` renders the textual
[labels](http://mapbox.com/osmdev/2013/02/12/labeling-id/).
* `iD.svgLayers` sets up a number of layers that ensure that map elements
* `iD.svgLabels` - draws textual labels
* `iD.svgLayers` - sets up a number of layers that ensure that map elements
appear in an appropriate z-order.
* `iD.svgOsm` - sets up the OSM-specific data layers
* `iD.svgGpx` - draws gpx traces
* `iD.svgDebug` - draws debugging information
## Other UI
### Other UI
iD provides a lot of user interface elements other than the core map component:
the page footer, the interface for saving changes, the splash screen you see
the first time you use iD, the geocoding and background layer controls, and the
tag/preset editor, for example.
the first time you use iD, the map controls, and the tag/preset editor, for example.
![Geocoder UI](docs/img/geocoder.png)
The implementations for all non-map UI components live in the `iD.ui` namespace.
Many of the modules in this namespace follow a pattern for reusable d3
The implementations for all non-map UI components live in the `iD.ui` module.
Many of the submodules under the `ui` module follow a pattern for reusable d3
components [originally suggested](http://bost.ocks.org/mike/chart/) by Mike
Bostock in the context of charts. The entry point to a UI element is a
constructor function, e.g. `iD.uiGeocoder()`. The constructor function may
Bostock in the context of charts. The entry point to a UI element is a
constructor function, e.g. `iD.uiViewOnOSM()`. The constructor function may
require a set of mandatory arguments; for most UI components exactly one
argument is required, a `context` object produced by the top-level `iD()`
function.
argument is required, a `context`.
A component needs some way to be rendered on screen by creating new DOM
elements or manipulating existing elements. This is done by calling the
component as a function, and passing a d3 selection where the component should
render itself:
The constructor function returns a draw function which accepts a d3 selection.
Drawing is then accomplished with
[d3.selection#call](https://github.com/d3/d3-selection/blob/master/README.md#selection_call):
```
var container = d3.select('body').append('div')
.attr('class', 'map-control geocode-control');
```js
footer = footer.enter()
.append('div')
.attr('class', 'footer')
.merge(footer);
var geocoder = iD.uiGeocoder(context)(container);
```
Alternatively, and more commonly, the same result is accomplished with
[d3.selection#call](https://github.com/mbostock/d3/wiki/Selections#wiki-call):
```
d3.select('body').append('div')
.attr('class', 'map-control geocode-control')
.call(iD.uiGeocoder(context));
footer
.call(uiViewOnOSM(context).entityID(entityID));
```
Some components are reconfigurable, and some provide functionality beyond

View File

@@ -1,18 +1,37 @@
:warning: = Breaking change, may affect downstream projects or sites that embed iD.
## 2.0.1
##### Nov 17, 2016
* Bugfixes:
* When starting iD with an object selected, the map should focus on that object (#3588, thanks @tyrasd)
* Fix for "Best" imagery not being automatically selected (#3586)
* Performance improvements:
* Adjust max Mapillary pages fetched per zoom, adjust min viewfield zoom
## 2.0.0
##### (coming soon)
##### Nov 15, 2016
* :warning: iD is now written in a modular code style using ES6 `import`/`export` and [rollup.js](http://rollupjs.org/) as a build tool (#3118, #3179, #3180)
* Many thanks to @tmcw, @kepta, @tyrasd, @beaugunderson, @davidchouse
* :warning: Flattened namespace means that all functions have changed names (#3479)
* e.g. `iD.actions.Move` -> `iD.actionMove`, `iD.geo.Extent` -> `iD.geoExtent`
* Many deprecated names are still exported as symbols, e.g. `iD.Context` - we will remove these eventually
* :warning: Customized iD deployments can manipulate live objects, rather than iD.Context accessors
* No longer need to call things like `presets()`, `imagery()`, `taginfo()` when creating `iD.Context`
* See [API.md](https://github.com/openstreetmap/iD/blob/master/API.md#customized-deployments) for details on customized deployments
* :warning: iD has upgraded to the latest released versions of d3, lodash, rbush, etc.
* d3 no longer adds itself to the global namespace, but can now be accessed via `iD.d3`
* :warning: iD now uses `npm` scripts for all build processes
* iD requires Node v4 or higher, but does not require `make` anymore
* Update install instructions and prerequisites (#3466, thanks @tyrasd)
* :warning: iD url hash map order has changed to `zoom/latitude/longitude` to match OSM and others (#3554)
* :warning: Authentication methods like `context.preauth`, `connection.switch`, `iD.uiSourceSwitch.keys` options have changed
* `url` option has been renamed to `urlroot`
* Many preset improvements:
* Add Construction and Tower Type fields to Mast and Tower presets (#3561, thanks @bkil)
* Add Turning Loop (Island) preset, adjust icons for traversable/nontraversable features (#3557)
* Add Internet Cafe preset (#3559)
* Improve styling of Farmyards (#3556, thanks @Thue)
* Add Guest Apartment / Condo preset (#3548)
* Add Waste Transfer preset (#3387)
* Add Billboard preset (#3386)
* Improve traffic calming presets (#3218)
@@ -45,6 +64,14 @@
* Add Ice Cream Shop preset (#3253, thanks @ankit-m)
* Add Taiwan address format to Address field (#3261, thanks @david082321)
* New Features:
* `ui()` initializer now accepts a callback that will be called when loadLocale is finished (#3550)
* Vertex keyboard navigation (#1917, #3539)
* `[` or `pageup` - jump to previous vertex
* `]` or `pagedown` - jump to next vertex
* `⌘[` or `home` - jump to first vertex
* `⌘]` or `end` - jump to last vertex
* `\` or `pause-break` - select next parent, if at intersection
* Address field improvements - eliminate duplicates, more dropdowns for address fields (#3553)
* OSM API calls are now authenticated for logged in users (helps with (#3519, #2262)
* When reversing a way, reverse tags on its child nodes (#3076, thanks @Psigio)
* Support Right to Left interface for some languages 'ar', 'fa', 'iw', 'dv' (#3007, #3087, thanks @mapmeld)
@@ -53,6 +80,7 @@
* Allow `Del` key as a without modifier as a Delete shortcut (#3455)
* Remove diacritics (accented chars) when doing fuzzy searches (#3159)
* Bugfixes:
* Prevent imagery offset nudging buttons from getting stuck if user clicks again (#3576)
* Don't include terms for non-searchable presets in translation source (#3323)
* Let user know if the documentation points to a redirect page (#3337)
* Fix line labeling placement for IE11, Edge (#3020)

2
FAQ.md
View File

@@ -53,7 +53,7 @@ and [configure](https://github.com/openstreetmap/openstreetmap-website/blob/mast
an instance of the Rails Port, the server that runs the OpenStreetMap website and API.
Once you have the Rails Port running, you may edit as normal using the version of iD that
is bundled with it. Your changes will be saved to your own database. To use a standalone iD with your own api, you may edit the [connection.js](https://github.com/openstreetmap/iD/blob/master/js/id/core/connection.js) file.
is bundled with it. Your changes will be saved to your own database. To use a standalone iD with your own api, you may edit the [osm.js](https://github.com/openstreetmap/iD/blob/master/modules/services/osm.js) file.
Depending on your requirements, you may also want to set up [cgimap](https://github.com/openstreetmap/cgimap)
and/or a tile rendering stack, but neither of these are required for editing with iD.

View File

@@ -41,13 +41,15 @@ Come on in, the water's lovely. More help? Ping `jfire` or `bhousel` on:
## Installation
Note: Windows users should run these steps in a shell started with "Run as administrator".
This is only necessary the first time so that the build process can create symbolic links.
To run the current development version of iD on your own computer:
1. Create a local `git clone` of the project, then `cd` into the project folder
2. (Windows Only) Run `fixWinSymlinks.bat`. This script will prompt for Administrator rights. see also: http://stackoverflow.com/questions/5917249/git-symlinks-in-windows
3. Run `npm install` (this will run the `prepublish` script that builds everything)
4. Run `npm start`
5. Open `http://localhost:8080/` in a web browser
2. Run `npm install` (this will run the `prepublish` script that builds everything)
3. Run `npm start`
4. Open `http://localhost:8080/` in a web browser
For guidance on building a packaged version, running tests, and contributing to
development, see [CONTRIBUTING.md](CONTRIBUTING.md).

View File

@@ -1,51 +1,60 @@
## Release Checklist
### Prerelease (several days prior)
- [ ] Notify translators of impending release
- Notify translators of impending release
(https://www.transifex.com/projects/p/id-editor/announcements/)
- [ ] Notify TomH
- Notify TomH
### Prep
- [ ] If you don't have a `transifex.auth` file in the root of your iD checkout,
you'll need to create a Transifex account, ask @bhousel for admin rights
on the iD project, and then create this file with contents
like `{"user": "yourusername", "password": "*******"}`
- If you don't have a `transifex.auth` file in the root of your iD checkout,
you'll need to create a Transifex account, ask @bhousel for admin rights
on the iD project, and then create this file with contents like<br><pre>
{"user": "yourusername", "password": "*******"}</pre>
### Update master branch
- [ ] git checkout master
- [ ] npm run translations
- [ ] git add . && git commit -m 'npm run translations'
- [ ] npm run imagery
- [ ] git add . && git commit -m 'npm run imagery'
- [ ] Update `CHANGELOG.md`
- [ ] Update version number in `modules/core/context.js`, `package.json`
- [ ] git add . && git commit -m 'A.B.C'
- [ ] git push origin master
```bash
$ git checkout master
$ npm run translations
$ git add . && git commit -m 'npm run translations'
$ rm -rf node_modules/editor-layer-index/
$ npm install
$ npm run imagery
$ npm run all
$ git add . && git commit -m 'npm run imagery'
$ Update `CHANGELOG.md`
$ Update version number in `modules/core/context.js`, `package.json`
$ git add . && git commit -m 'A.B.C'
$ git push origin master
```
### Update and tag release branch
- [ ] git checkout release
- [ ] git reset --hard master
- [ ] npm run all
- [ ] git add -f dist/*.css dist/*.js dist/img/*.svg dist/locales/*.json
- [ ] git commit -m 'Check in build'
- [ ] git tag vA.B.C
- [ ] git push origin -f release vA.B.C
```bash
$ git checkout release
$ git reset --hard master
$ npm run all
$ git add -f dist/*.css dist/*.js dist/img/*.svg dist/mapillary-js/
$ git commit -m 'Check in build'
$ git tag vA.B.C
$ git push origin -f release vA.B.C
```
### Update openstreetmap-website
#### Setup remotes (one time only)
- [ ] git remote add osmlab git@github.com:osmlab/openstreetmap-website.git
- [ ] git remote add upstream git@github.com:openstreetmap/openstreetmap-website.git
```bash
$ git remote add osmlab git@github.com:osmlab/openstreetmap-website.git
$ git remote add upstream git@github.com:openstreetmap/openstreetmap-website.git
```
#### Sync master and update iD (every time)
- [ ] git fetch --all
- [ ] git checkout master
- [ ] git reset --hard upstream/master
- [ ] git checkout -b iD-A.B.C
- [ ] bundle install
- [ ] rm -rf vendor/assets/iD/* && vendorer
- [ ] git add . && git commit -m 'Update to iD vA.B.C'
- [ ] git push osmlab
- [ ] Open pull request
```bash
$ git fetch --all
$ git checkout master
$ git reset --hard upstream/master
$ git checkout -b iD-A.B.C
$ bundle install
$ rm -rf vendor/assets/iD/* && vendorer
$ git add . && git commit -m 'Update to iD vA.B.C'
$ git push osmlab
$ Open pull request
```

View File

@@ -1,15 +1,34 @@
/* eslint-disable no-console */
var _ = require('lodash');
var fs = require('fs');
var path = require('path');
var glob = require('glob');
var YAML = require('js-yaml');
var jsonschema = require('jsonschema');
const _ = require('lodash');
const fs = require('fs');
const glob = require('glob');
const jsonschema = require('jsonschema');
const path = require('path');
const shell = require('shelljs');
const YAML = require('js-yaml');
const fieldSchema = require('./data/presets/schema/field.json');
const presetSchema = require('./data/presets/schema/preset.json');
const suggestions = require('name-suggestion-index/name-suggestions.json');
// Create symlinks if necessary.. { 'target': 'source' }
const symlinks = {
'land.html': 'dist/land.html',
'img': 'dist/img',
'css/img': '../dist/img',
'test/css': '../css',
'test/img': '../dist/img'
};
for (var target of Object.keys(symlinks)) {
if (!shell.test('-L', target)) {
console.log(`Creating symlink: ${target} -> ${symlinks[target]}`);
shell.ln('-sf', symlinks[target], target);
}
}
var fieldSchema = require('./data/presets/schema/field.json');
var presetSchema = require('./data/presets/schema/preset.json');
var suggestions = require('name-suggestion-index/name-suggestions.json');
// Translation strings
var tstrings = {
@@ -20,12 +39,14 @@ var tstrings = {
// Start clean
unlink('data/presets/categories.json');
unlink('data/presets/fields.json');
unlink('data/presets/presets.json');
unlink('data/presets.yaml');
unlink('data/taginfo.json');
unlink('dist/locales/en.json');
shell.rm('-f', [
'data/presets/categories.json',
'data/presets/fields.json',
'data/presets/presets.json',
'data/presets.yaml',
'data/taginfo.json',
'dist/locales/en.json'
]);
var categories = generateCategories();
var fields = generateFields();
@@ -54,10 +75,6 @@ fs.writeFileSync('dist/locales/en.json', JSON.stringify(en, null, 4));
process.exit();
function unlink(f) {
try { fs.unlinkSync(f); } catch (e) { /* noop */ }
}
function read(f) {
return JSON.parse(fs.readFileSync(f, 'utf8'));
}

View File

@@ -2601,12 +2601,20 @@ img.tile-removing {
text-align: right;
width: 100%;
padding: 0px 10px;
color: #eee;
}
.api-status.offline,
.api-status.readonly,
.api-status.error {
background: red;
background: #a22;
}
.api-status-login {
color: #aaf;
}
.api-status-login:hover {
color: #ccf;
}
/* Modals

View File

@@ -1 +0,0 @@
../dist/img/

View File

@@ -37,6 +37,7 @@ g.point .shadow {
stroke-opacity: 0;
}
g.point.related:not(.selected) .shadow,
g.point.hover:not(.selected) .shadow {
stroke-opacity: 0.5;
}
@@ -104,7 +105,9 @@ g.vertex.vertex-hover {
display: block;
}
g.vertex.related:not(.selected) .shadow,
g.vertex.hover:not(.selected) .shadow,
g.midpoint.related:not(.selected) .shadow,
g.midpoint.hover:not(.selected) .shadow {
fill-opacity: 0.5;
}
@@ -144,6 +147,7 @@ path.shadow {
stroke-opacity: 0;
}
path.shadow.related:not(.selected),
path.shadow.hover:not(.selected) {
stroke-opacity: 0.4;
}
@@ -408,6 +412,18 @@ path.stroke.tag-landuse-farmland {
background-color: rgba(140, 208, 95, 0.2);
}
path.stroke.tag-landuse-farmyard {
stroke: rgb(245, 220, 186);
}
path.fill.tag-landuse-farmyard {
stroke: rgba(245, 220, 186, 0.3);
fill: rgba(245, 220, 186, 0.3);
}
.preset-icon-fill-area.tag-landuse-farmyard {
border-color: rgb(245, 220, 186);
background: rgba(245, 220, 186, 0.3);
}
.pattern-color-cemetery,
.pattern-color-orchard {
fill: rgba(140, 208, 95, 0.2);
@@ -1600,6 +1616,7 @@ text.gpx {
stroke-width: 8;
}
.fill-wireframe path.shadow.related:not(.selected),
.fill-wireframe path.shadow.hover:not(.selected) {
stroke-opacity: 0.4;
}

View File

@@ -187,6 +187,7 @@ en:
localized_translation_language: Choose language
localized_translation_name: Name
zoom_in_edit: Zoom in to Edit
login: login
logout: logout
loading_auth: "Connecting to OpenStreetMap..."
report_a_bug: Report a bug
@@ -198,6 +199,7 @@ en:
error: Unable to connect to API.
offline: The API is offline. Please try editing later.
readonly: The API is read-only. You will need to wait to save your changes.
rateLimit: The API is limiting anonymous connections. You can fix this by logging in.
commit:
title: Save Changes
description_placeholder: Brief description of your contributions (required)
@@ -285,7 +287,7 @@ en:
switch: Switch back to this background
custom: Custom
custom_button: Edit custom background
custom_prompt: "Enter a tile URL template. Valid tokens are {z}, {x}, {y} for Z/X/Y scheme and {u} for quadtile scheme."
custom_prompt: "Enter a tile URL template. Valid tokens are {zoom}, {x}, {y} for Z/X/Y scheme and {u} for quadtile scheme."
fix_misalignment: Adjust imagery offset
imagery_source_faq: Where does this imagery come from?
reset: reset

File diff suppressed because it is too large Load Diff

View File

@@ -5,7 +5,6 @@ export { default as dataSuggestions } from 'name-suggestion-index/name-suggestio
export { dataAddressFormats } from './address-formats.json';
export { dataDeprecated } from './deprecated.json';
export { dataDiscarded } from './discarded.json';
export { dataImagery } from './imagery.json';
export { dataLocales } from './locales.json';
export { dataPhoneFormats } from './phone-formats.json';
@@ -13,14 +12,18 @@ export { default as dataImperial } from './imperial.json';
export { default as dataDriveLeft } from './drive-left.json';
export { en as dataEn } from '../dist/locales/en.json';
import { dataImagery } from './imagery.json';
import { presets } from './presets/presets.json';
import { defaults } from './presets/defaults.json';
import { categories } from './presets/categories.json';
import { fields } from './presets/fields.json';
export var dataPresets = {
presets: presets,
defaults: defaults,
categories: categories,
fields: fields
export var data = {
imagery: dataImagery,
presets: {
presets: presets,
defaults: defaults,
categories: categories,
fields: fields
}
};

View File

@@ -1,66 +1,190 @@
{
"dataLocales": [
"af",
"sq",
"ar",
"ar-AA",
"hy",
"ast",
"bn",
"bs",
"bg-BG",
"ca",
"zh",
"zh-CN",
"zh-HK",
"zh-TW",
"yue",
"hr",
"cs",
"da",
"nl",
"en-GB",
"eo",
"et",
"fi",
"fr",
"gl",
"de",
"el",
"gu",
"hi",
"hu",
"is",
"id",
"it",
"ja",
"kn",
"ko",
"ku",
"lv",
"lij",
"lt",
"ml",
"no",
"fa",
"pl",
"pt",
"pt-BR",
"ro",
"ru",
"sc",
"sr",
"si",
"sk",
"sl",
"es",
"sv",
"tl",
"ta",
"te",
"th",
"tr",
"uk",
"vi"
]
"dataLocales": {
"af": {
"rtl": false
},
"ar": {
"rtl": true
},
"ar-AA": {
"rtl": true
},
"ast": {
"rtl": false
},
"bg-BG": {
"rtl": false
},
"bn": {
"rtl": false
},
"bs": {
"rtl": false
},
"ca": {
"rtl": false
},
"cs": {
"rtl": false
},
"da": {
"rtl": false
},
"de": {
"rtl": false
},
"el": {
"rtl": false
},
"en-GB": {
"rtl": false
},
"eo": {
"rtl": false
},
"es": {
"rtl": false
},
"et": {
"rtl": false
},
"fa": {
"rtl": true
},
"fi": {
"rtl": false
},
"fr": {
"rtl": false
},
"gl": {
"rtl": false
},
"gu": {
"rtl": false
},
"hi": {
"rtl": false
},
"hr": {
"rtl": false
},
"hu": {
"rtl": false
},
"hy": {
"rtl": false
},
"id": {
"rtl": false
},
"is": {
"rtl": false
},
"it": {
"rtl": false
},
"ja": {
"rtl": false
},
"kn": {
"rtl": false
},
"ko": {
"rtl": false
},
"ku": {
"rtl": false
},
"lij": {
"rtl": false
},
"lt": {
"rtl": false
},
"lv": {
"rtl": false
},
"ml": {
"rtl": false
},
"nl": {
"rtl": false
},
"no": {
"rtl": false
},
"pl": {
"rtl": false
},
"pt": {
"rtl": false
},
"pt-BR": {
"rtl": false
},
"ro": {
"rtl": false
},
"ru": {
"rtl": false
},
"sc": {
"rtl": false
},
"si": {
"rtl": false
},
"sk": {
"rtl": false
},
"sl": {
"rtl": false
},
"sq": {
"rtl": false
},
"sr": {
"rtl": false
},
"sv": {
"rtl": false
},
"ta": {
"rtl": false
},
"te": {
"rtl": false
},
"th": {
"rtl": false
},
"tl": {
"rtl": false
},
"tr": {
"rtl": false
},
"uk": {
"rtl": false
},
"vi": {
"rtl": false
},
"yue": {
"rtl": false
},
"zh": {
"rtl": false
},
"zh-CN": {
"rtl": false
},
"zh-HK": {
"rtl": false
},
"zh-TW": {
"rtl": false
}
}
}

View File

@@ -167,6 +167,22 @@ en:
barrier:
# barrier=*
label: Type
bath/open_air:
# 'bath:open_air=*'
label: Open Air
bath/sand_bath:
# 'bath:sand_bath=*'
label: Sand Bath
bath/type:
# 'bath:type=*'
label: Specialty
options:
# 'bath:type=foot_bath'
foot_bath: Foot Bath
# 'bath:type=hot_spring'
hot_spring: Hot Spring
# 'bath:type=onsen'
onsen: Japanese Onsen
beauty:
# beauty=*
label: Shop Type
@@ -191,6 +207,9 @@ en:
stemcells: stem cell samples
# 'blood:=whole'
whole: whole blood
board_type:
# board_type=*
label: Type
boundary:
# boundary=*
label: Type
@@ -203,6 +222,24 @@ en:
building_area:
# building=*
label: Building
camera/direction:
# 'camera:direction=*'
label: Direction (Degrees Clockwise)
# camera/direction field placeholder
placeholder: '45, 90, 180, 270'
camera/mount:
# 'camera:mount=*'
label: Camera Mount
camera/type:
# 'camera:type=*'
label: Camera Type
options:
# 'camera:type=dome'
dome: Dome
# 'camera:type=fixed'
fixed: Fixed
# 'camera:type=panning'
panning: Panning
capacity:
# capacity=*
label: Capacity
@@ -258,6 +295,11 @@ en:
construction:
# construction=*
label: Type
contact/webcam:
# 'contact:webcam=*'
label: Webcam URL
# contact/webcam field placeholder
placeholder: 'http://example.com/'
content:
# content=*
label: Contents
@@ -383,6 +425,9 @@ en:
fee:
# fee=*
label: Fee
fence_type:
# fence_type=*
label: Type
fire_hydrant/type:
# 'fire_hydrant:type=*'
label: Type
@@ -441,6 +486,9 @@ en:
handrail:
# handrail=*
label: Handrail
height:
# height=*
label: Height (Meters)
highway:
# highway=*
label: Type
@@ -492,6 +540,9 @@ en:
internet_access/fee:
# 'internet_access:fee=*'
label: Internet Access Fee
internet_access/ssid:
# 'internet_access:ssid=*'
label: SSID (Network Name)
kerb:
# kerb=*
label: Curb Ramp
@@ -580,6 +631,17 @@ en:
man_made:
# man_made=*
label: Type
map_size:
# map_size=*
label: Coverage
map_type:
# map_type=*
label: Type
maxheight:
# maxheight=*
label: Max Height
# maxheight field placeholder
placeholder: '4, 4.5, 5, 14''0", 14''6", 15''0"'
maxspeed:
# maxspeed=*
label: Speed Limit
@@ -730,6 +792,9 @@ en:
operator:
# operator=*
label: Operator
outdoor_seating:
# outdoor_seating=*
label: Outdoor Seating
par:
# par=*
label: Par
@@ -1044,6 +1109,22 @@ en:
surface:
# surface=*
label: Surface
surveillance:
# surveillance=*
label: Surveillance Kind
surveillance/type:
# 'surveillance:type=*'
label: Surveillance Type
options:
# 'surveillance:type=ALPR'
ALPR: Automatic License Plate Reader
# 'surveillance:type=camera'
camera: Camera
# 'surveillance:type=guard'
guard: Guard
surveillance/zone:
# 'surveillance:zone=*'
label: Surveillance Zone
tactile_paving:
# tactile_paving=*
label: Tactile Paving
@@ -1074,9 +1155,14 @@ en:
tourism:
# tourism=*
label: Type
towertype:
tower/construction:
# 'tower:construction=*'
label: Construction
# tower/construction field placeholder
placeholder: 'Guyed, Lattice, Concealed, ...'
tower/type:
# 'tower:type=*'
label: Tower type
label: Type
tracktype:
# tracktype=*
label: Track Type
@@ -1136,6 +1222,9 @@ en:
house: Up to 5m (16ft)
# visibility=street
street: 5 to 20m (16 to 65ft)
wall:
# wall=*
label: Type
water:
# water=*
label: Type
@@ -1387,6 +1476,11 @@ en:
name: Coworking Space
# 'terms: coworking,office'
terms: '<translate with synonyms or related terms for ''Coworking Space'', separated by commas>'
amenity/crematorium:
# amenity=crematorium
name: Crematorium
# 'terms: cemetery,funeral'
terms: '<translate with synonyms or related terms for ''Crematorium'', separated by commas>'
amenity/dentist:
# amenity=dentist
name: Dentist
@@ -1424,6 +1518,11 @@ en:
# amenity=fire_station
name: Fire Station
terms: '<translate with synonyms or related terms for ''Fire Station'', separated by commas>'
amenity/food_court:
# amenity=food_court
name: Food Court
# 'terms: fast food,restaurant,food'
terms: '<translate with synonyms or related terms for ''Food Court'', separated by commas>'
amenity/fountain:
# amenity=fountain
name: Fountain
@@ -1450,12 +1549,18 @@ en:
amenity/hunting_stand:
# amenity=hunting_stand
name: Hunting Stand
# 'terms: game,lookout,shoot,wild,watch'
terms: '<translate with synonyms or related terms for ''Hunting Stand'', separated by commas>'
amenity/ice_cream:
# amenity=ice_cream
name: Ice Cream Shop
# 'terms: gelato,sorbet,sherbet,frozen,yogurt'
terms: '<translate with synonyms or related terms for ''Ice Cream Shop'', separated by commas>'
amenity/internet_cafe:
# amenity=internet_cafe
name: Internet Cafe
# 'terms: cybercafe,taxiphone,teleboutique,coffee,cafe,net,lanhouse'
terms: '<translate with synonyms or related terms for ''Internet Cafe'', separated by commas>'
amenity/kindergarten:
# amenity=kindergarten
name: Preschool/Kindergarten Grounds
@@ -1549,8 +1654,13 @@ en:
amenity/pub:
# amenity=pub
name: Pub
# 'terms: dive,beer,bier,booze'
# 'terms: alcohol,drink,dive,beer,bier,booze'
terms: '<translate with synonyms or related terms for ''Pub'', separated by commas>'
amenity/public_bath:
# amenity=public_bath
name: Public Bath
# 'terms: onsen,foot bath,hot springs'
terms: '<translate with synonyms or related terms for ''Public Bath'', separated by commas>'
amenity/public_bookcase:
# amenity=public_bookcase
name: Public Bookcase
@@ -2429,6 +2539,11 @@ en:
name: Unmaintained Track Road
# 'terms: woods road,forest road,logging road,fire road,farm road,agricultural road,ranch road,carriage road,primitive,unmaintained,rut,offroad,4wd,4x4,four wheel drive,atv,quad,jeep,double track,two track'
terms: '<translate with synonyms or related terms for ''Unmaintained Track Road'', separated by commas>'
highway/traffic_mirror:
# highway=traffic_mirror
name: Traffic Mirror
# 'terms: blind spot,convex,corner,curved,roadside,round,safety,sphere,visibility'
terms: '<translate with synonyms or related terms for ''Traffic Mirror'', separated by commas>'
highway/traffic_signals:
# highway=traffic_signals
name: Traffic Signals
@@ -2448,6 +2563,11 @@ en:
name: Turning Circle
# 'terms: cul-de-sac'
terms: '<translate with synonyms or related terms for ''Turning Circle'', separated by commas>'
highway/turning_loop:
# highway=turning_loop
name: Turning Loop (Island)
# 'terms: cul-de-sac'
terms: '<translate with synonyms or related terms for ''Turning Loop (Island)'', separated by commas>'
highway/unclassified:
# highway=unclassified
name: Minor/Unclassified Road
@@ -2615,6 +2735,11 @@ en:
name: Common
# 'terms: open space'
terms: '<translate with synonyms or related terms for ''Common'', separated by commas>'
leisure/dance:
# leisure=dance
name: Dance Hall
# 'terms: ballroom,jive,swing,tango,waltz'
terms: '<translate with synonyms or related terms for ''Dance Hall'', separated by commas>'
leisure/dog_park:
# leisure=dog_park
name: Dog Park
@@ -2728,6 +2853,10 @@ en:
name: Playground
# 'terms: jungle gym,play area'
terms: '<translate with synonyms or related terms for ''Playground'', separated by commas>'
leisure/resort:
# leisure=resort
name: Resort
terms: '<translate with synonyms or related terms for ''Resort'', separated by commas>'
leisure/running_track:
# 'leisure=track, sport=running'
name: Running Track
@@ -2853,8 +2982,13 @@ en:
man_made/surveillance:
# man_made=surveillance
name: Surveillance
# 'terms: cctv'
# 'terms: anpr,alpr,camera,car plate recognition,cctv,guard,license plate recognition,monitoring,number plate recognition,security,video,webcam'
terms: '<translate with synonyms or related terms for ''Surveillance'', separated by commas>'
man_made/surveillance_camera:
# 'man_made=surveillance, surveillance:type=camera'
name: Surveillance Camera
# 'terms: anpr,alpr,camera,car plate recognition,cctv,guard,license plate recognition,monitoring,number plate recognition,security,video,webcam'
terms: '<translate with synonyms or related terms for ''Surveillance Camera'', separated by commas>'
man_made/survey_point:
# man_made=survey_point
name: Survey Point
@@ -3815,6 +3949,15 @@ en:
# tourism=alpine_hut
name: Alpine Hut
terms: '<translate with synonyms or related terms for ''Alpine Hut'', separated by commas>'
tourism/apartment:
# tourism=apartment
name: Guest Apartment / Condo
terms: '<translate with synonyms or related terms for ''Guest Apartment / Condo'', separated by commas>'
tourism/aquarium:
# tourism=aquarium
name: Aquarium
# 'terms: fish,sea,water'
terms: '<translate with synonyms or related terms for ''Aquarium'', separated by commas>'
tourism/artwork:
# tourism=artwork
name: Artwork
@@ -3860,6 +4003,22 @@ en:
# tourism=information
name: Information
terms: '<translate with synonyms or related terms for ''Information'', separated by commas>'
tourism/information/board:
# 'tourism=information, information=board'
name: Information Board
terms: '<translate with synonyms or related terms for ''Information Board'', separated by commas>'
tourism/information/guidepost:
# 'tourism=information, information=guidepost'
name: Guidepost
terms: '<translate with synonyms or related terms for ''Guidepost'', separated by commas>'
tourism/information/map:
# 'tourism=information, information=map'
name: Map
terms: '<translate with synonyms or related terms for ''Map'', separated by commas>'
tourism/information/office:
# 'tourism=information, information=office'
name: Tourist Information Office
terms: '<translate with synonyms or related terms for ''Tourist Information Office'', separated by commas>'
tourism/motel:
# tourism=motel
name: Motel
@@ -3885,6 +4044,7 @@ en:
tourism/zoo:
# tourism=zoo
name: Zoo
# 'terms: animal'
terms: '<translate with synonyms or related terms for ''Zoo'', separated by commas>'
traffic_calming:
# traffic_calming=*
@@ -4098,6 +4258,11 @@ en:
# waterway=water_point
name: Marine Drinking Water
terms: '<translate with synonyms or related terms for ''Marine Drinking Water'', separated by commas>'
waterway/waterfall:
# waterway=waterfall
name: Waterfall
# 'terms: fall'
terms: '<translate with synonyms or related terms for ''Waterfall'', separated by commas>'
waterway/weir:
# waterway=weir
name: Weir

View File

@@ -125,7 +125,7 @@ The complete JSON schema for fields can be found in [`data/presets/schema/field.
* `cycleway` - Block of dropdowns for adding `cycleway:left` and `cycleway:right` tags on a highway
* `maxspeed` - Numeric text field for speed and dropdown for "mph/kph"
* `restrictions` - Graphical field for editing turn restrictions
* `wikipedia` - Block of fields for selecting a wiki language and wikipedia page
* `wikipedia` - Block of fields for selecting a wiki language and Wikipedia page
#### Field Properties
@@ -147,7 +147,7 @@ one of `point`, `vertex`, `line`, `area`.
##### `default`
The default value for the field. For exmaple, the `building_area.json` field
The default value for the field. For example, the `building_area.json` field
will automatically add the tag `building=yes` to certain presets that are
associated with building features (but only if drawn as a closed area).
@@ -179,8 +179,9 @@ The user can pick from any of the options, or type their own value.
Combo field types can accept name-value pairs in the `strings` property.
This is helpful when the field has a fixed number of options and you want to be
able to provide a translateable description of each option. When using `strings`,
able to provide a translatable description of each option. When using `strings`,
the user can not type their own value, they must choose one of the given values.
```js
{
"key": "smoothness",
@@ -235,7 +236,7 @@ iD supports deployments which use a custom set of presets. You can supply preset
the `presets` accessor:
```js
var id = iD.Context(window).presets({
var id = iD.Context().presets({
presets: { ... },
fields: { ... },
defaults: { ... },
@@ -273,6 +274,12 @@ For example:
"tags": {},
"geometry": ["vertex"],
"matchScore": 0.1
},
"relation": {
"name": "Relation",
"tags": {},
"geometry": ["relation"],
"matchScore": 0.1
}
```

View File

@@ -64,11 +64,11 @@
"highway/pedestrian",
"footway/crosswalk",
"footway/sidewalk",
"highway/steps",
"highway/path",
"highway/footway",
"highway/cycleway",
"highway/bridleway",
"highway/path",
"highway/steps"
"highway/bridleway"
]
},
"category-rail": {
@@ -110,14 +110,14 @@
"highway/primary",
"highway/secondary",
"highway/tertiary",
"highway/unclassified",
"highway/service",
"highway/track",
"highway/motorway_link",
"highway/trunk_link",
"highway/primary_link",
"highway/secondary_link",
"highway/tertiary_link",
"highway/unclassified",
"highway/track",
"highway/road"
]
},

View File

@@ -6,10 +6,10 @@
"highway/pedestrian",
"footway/crosswalk",
"footway/sidewalk",
"highway/steps",
"highway/path",
"highway/footway",
"highway/cycleway",
"highway/bridleway",
"highway/path",
"highway/steps"
"highway/bridleway"
]
}

View File

@@ -9,14 +9,14 @@
"highway/primary",
"highway/secondary",
"highway/tertiary",
"highway/unclassified",
"highway/service",
"highway/track",
"highway/motorway_link",
"highway/trunk_link",
"highway/primary_link",
"highway/secondary_link",
"highway/tertiary_link",
"highway/unclassified",
"highway/track",
"highway/road"
]
}

View File

@@ -223,6 +223,28 @@
"type": "typeCombo",
"label": "Type"
},
"bath/open_air": {
"key": "bath:open_air",
"label": "Open Air",
"type": "check"
},
"bath/sand_bath": {
"key": "bath:sand_bath",
"label": "Sand Bath",
"type": "check"
},
"bath/type": {
"key": "bath:type",
"type": "combo",
"label": "Specialty",
"strings": {
"options": {
"onsen": "Japanese Onsen",
"foot_bath": "Foot Bath",
"hot_spring": "Hot Spring"
}
}
},
"beauty": {
"key": "beauty",
"type": "combo",
@@ -256,6 +278,11 @@
}
}
},
"board_type": {
"key": "board_type",
"type": "typeCombo",
"label": "Type"
},
"boundary": {
"key": "boundary",
"type": "combo",
@@ -278,6 +305,29 @@
"type": "combo",
"label": "Building"
},
"camera/direction": {
"key": "camera:direction",
"type": "number",
"label": "Direction (Degrees Clockwise)",
"placeholder": "45, 90, 180, 270"
},
"camera/mount": {
"key": "camera:mount",
"type": "combo",
"label": "Camera Mount"
},
"camera/type": {
"key": "camera:type",
"type": "combo",
"label": "Camera Type",
"strings": {
"options": {
"fixed": "Fixed",
"panning": "Panning",
"dome": "Dome"
}
}
},
"capacity": {
"key": "capacity",
"type": "number",
@@ -330,6 +380,13 @@
"type": "combo",
"label": "Type"
},
"contact/webcam": {
"key": "contact:webcam",
"type": "url",
"icon": "website",
"label": "Webcam URL",
"placeholder": "http://example.com/"
},
"content": {
"key": "content",
"type": "combo",
@@ -532,6 +589,11 @@
"type": "check",
"label": "Fee"
},
"fence_type": {
"key": "fence_type",
"type": "combo",
"label": "Type"
},
"fire_hydrant/type": {
"key": "fire_hydrant:type",
"type": "combo",
@@ -615,6 +677,11 @@
"type": "check",
"label": "Handrail"
},
"height": {
"key": "height",
"type": "number",
"label": "Height (Meters)"
},
"highway": {
"key": "highway",
"type": "typeCombo",
@@ -686,6 +753,11 @@
"type": "check",
"label": "Internet Access Fee"
},
"internet_access/ssid": {
"key": "internet_access:ssid",
"type": "text",
"label": "SSID (Network Name)"
},
"kerb": {
"key": "kerb",
"type": "combo",
@@ -801,6 +873,23 @@
"type": "typeCombo",
"label": "Type"
},
"map_size": {
"key": "map_size",
"type": "typeCombo",
"label": "Coverage"
},
"map_type": {
"key": "map_type",
"type": "typeCombo",
"label": "Type"
},
"maxheight": {
"key": "maxheight",
"type": "combo",
"label": "Max Height",
"placeholder": "4, 4.5, 5, 14'0\", 14'6\", 15'0\"",
"snake_case": false
},
"maxspeed": {
"key": "maxspeed",
"type": "maxspeed",
@@ -983,6 +1072,11 @@
"type": "text",
"label": "Operator"
},
"outdoor_seating": {
"key": "outdoor_seating",
"type": "combo",
"label": "Outdoor Seating"
},
"par": {
"key": "par",
"type": "number",
@@ -1415,6 +1509,28 @@
"type": "combo",
"label": "Surface"
},
"surveillance": {
"key": "surveillance",
"type": "combo",
"label": "Surveillance Kind"
},
"surveillance/type": {
"key": "surveillance:type",
"type": "combo",
"label": "Surveillance Type",
"strings": {
"options": {
"camera": "Camera",
"guard": "Guard",
"ALPR": "Automatic License Plate Reader"
}
}
},
"surveillance/zone": {
"key": "surveillance:zone",
"type": "combo",
"label": "Surveillance Zone"
},
"tactile_paving": {
"key": "tactile_paving",
"type": "check",
@@ -1451,10 +1567,16 @@
"type": "typeCombo",
"label": "Type"
},
"towertype": {
"tower/construction": {
"key": "tower:construction",
"type": "combo",
"label": "Construction",
"placeholder": "Guyed, Lattice, Concealed, ..."
},
"tower/type": {
"key": "tower:type",
"type": "combo",
"label": "Tower type"
"label": "Type"
},
"tracktype": {
"key": "tracktype",
@@ -1525,6 +1647,11 @@
}
}
},
"wall": {
"key": "wall",
"type": "combo",
"label": "Type"
},
"water_point": {
"key": "water_point",
"type": "check",

View File

@@ -0,0 +1,5 @@
{
"key": "bath:open_air",
"label": "Open Air",
"type": "check"
}

View File

@@ -0,0 +1,5 @@
{
"key": "bath:sand_bath",
"label": "Sand Bath",
"type": "check"
}

View File

@@ -0,0 +1,12 @@
{
"key": "bath:type",
"type": "combo",
"label": "Specialty",
"strings": {
"options": {
"onsen": "Japanese Onsen",
"foot_bath": "Foot Bath",
"hot_spring": "Hot Spring"
}
}
}

View File

@@ -0,0 +1,5 @@
{
"key": "board_type",
"type": "typeCombo",
"label": "Type"
}

View File

@@ -0,0 +1,6 @@
{
"key": "camera:direction",
"type": "number",
"label": "Direction (Degrees Clockwise)",
"placeholder": "45, 90, 180, 270"
}

View File

@@ -0,0 +1,5 @@
{
"key": "camera:mount",
"type": "combo",
"label": "Camera Mount"
}

View File

@@ -0,0 +1,12 @@
{
"key": "camera:type",
"type": "combo",
"label": "Camera Type",
"strings": {
"options": {
"fixed": "Fixed",
"panning": "Panning",
"dome": "Dome"
}
}
}

View File

@@ -0,0 +1,7 @@
{
"key": "contact:webcam",
"type": "url",
"icon": "website",
"label": "Webcam URL",
"placeholder": "http://example.com/"
}

View File

@@ -0,0 +1,5 @@
{
"key": "fence_type",
"type": "combo",
"label": "Type"
}

View File

@@ -0,0 +1,5 @@
{
"key": "height",
"type": "number",
"label": "Height (Meters)"
}

View File

@@ -0,0 +1,5 @@
{
"key": "internet_access:ssid",
"type": "text",
"label": "SSID (Network Name)"
}

View File

@@ -0,0 +1,5 @@
{
"key": "map_size",
"type": "typeCombo",
"label": "Coverage"
}

View File

@@ -0,0 +1,5 @@
{
"key": "map_type",
"type": "typeCombo",
"label": "Type"
}

View File

@@ -0,0 +1,7 @@
{
"key": "maxheight",
"type": "combo",
"label": "Max Height",
"placeholder": "4, 4.5, 5, 14'0\", 14'6\", 15'0\"",
"snake_case": false
}

View File

@@ -0,0 +1,5 @@
{
"key": "outdoor_seating",
"type": "combo",
"label": "Outdoor Seating"
}

View File

@@ -0,0 +1,5 @@
{
"key": "surveillance",
"type": "combo",
"label": "Surveillance Kind"
}

View File

@@ -0,0 +1,12 @@
{
"key": "surveillance:type",
"type": "combo",
"label": "Surveillance Type",
"strings": {
"options": {
"camera": "Camera",
"guard": "Guard",
"ALPR": "Automatic License Plate Reader"
}
}
}

View File

@@ -0,0 +1,5 @@
{
"key": "surveillance:zone",
"type": "combo",
"label": "Surveillance Zone"
}

View File

@@ -0,0 +1,6 @@
{
"key": "tower:construction",
"type": "combo",
"label": "Construction",
"placeholder": "Guyed, Lattice, Concealed, ..."
}

View File

@@ -1,5 +1,5 @@
{
"key": "tower:type",
"type": "combo",
"label": "Tower type"
"label": "Type"
}

View File

@@ -0,0 +1,5 @@
{
"key": "wall",
"type": "combo",
"label": "Type"
}

File diff suppressed because it is too large Load Diff

View File

@@ -4,16 +4,19 @@
"point",
"area"
],
"terms": [
"airplane",
"airport",
"aerodrome"
],
"fields": [
"ref",
"iata",
"icao",
"operator"
"operator",
"internet_access",
"internet_access/fee",
"internet_access/ssid"
],
"terms": [
"airplane",
"airport",
"aerodrome"
],
"tags": {
"aeroway": "aerodrome"

View File

@@ -5,7 +5,8 @@
"address",
"building_area",
"opening_hours",
"smoking"
"smoking",
"outdoor_seating"
],
"geometry": [
"point",

View File

@@ -4,7 +4,8 @@
"address",
"building_area",
"opening_hours",
"smoking"
"smoking",
"outdoor_seating"
],
"geometry": [
"point",

View File

@@ -2,7 +2,10 @@
"icon": "bus",
"fields": [
"building_area",
"operator"
"operator",
"internet_access",
"internet_access/fee",
"internet_access/ssid"
],
"geometry": [
"point",

View File

@@ -2,11 +2,14 @@
"icon": "cafe",
"fields": [
"cuisine",
"internet_access",
"address",
"building_area",
"opening_hours",
"smoking"
"internet_access",
"internet_access/fee",
"internet_access/ssid",
"smoking",
"outdoor_seating"
],
"geometry": [
"point",

View File

@@ -2,7 +2,9 @@
"icon": "college",
"fields": [
"operator",
"address"
"address",
"internet_access",
"internet_access/ssid"
],
"geometry": [
"point",

View File

@@ -3,7 +3,10 @@
"fields": [
"address",
"building_area",
"opening_hours"
"opening_hours",
"internet_access",
"internet_access/fee",
"internet_access/ssid"
],
"geometry": [
"point",

View File

@@ -0,0 +1,19 @@
{
"icon": "cemetery",
"fields": [
"website",
"phone",
"opening_hours",
"wheelchair"
],
"geometry": [
"area",
"point"
],
"tags": {
"amenity": "crematorium"
},
"terms": ["cemetery","funeral"],
"name": "Crematorium"
}

View File

@@ -9,7 +9,8 @@
"takeaway",
"delivery",
"drive_through",
"smoking"
"smoking",
"outdoor_seating"
],
"geometry": [
"point",

View File

@@ -0,0 +1,25 @@
{
"icon": "restaurant",
"fields": [
"operator",
"address",
"building_area",
"opening_hours",
"smoking",
"outdoor_seating"
],
"geometry": [
"point",
"area"
],
"terms": [
"fast food",
"restaurant",
"food"
],
"tags": {
"amenity": "food_court"
},
"name": "Food Court"
}

View File

@@ -4,7 +4,13 @@
"vertex",
"area"
],
"terms": [],
"terms": [
"game",
"lookout",
"shoot",
"wild",
"watch"
],
"tags": {
"amenity": "hunting_stand"
},

View File

@@ -5,7 +5,8 @@
"building_area",
"opening_hours",
"takeaway",
"delivery"
"delivery",
"outdoor_seating"
],
"geometry": [
"point",

View File

@@ -0,0 +1,30 @@
{
"fields": [
"operator",
"address",
"building_area",
"opening_hours",
"internet_access",
"internet_access/fee",
"internet_access/ssid",
"smoking",
"outdoor_seating"
],
"geometry": [
"point",
"area"
],
"terms": [
"cybercafe",
"taxiphone",
"teleboutique",
"coffee",
"cafe",
"net",
"lanhouse"
],
"tags": {
"amenity": "internet_cafe"
},
"name": "Internet Cafe"
}

View File

@@ -4,7 +4,10 @@
"operator",
"building_area",
"address",
"opening_hours"
"opening_hours",
"internet_access",
"internet_access/fee",
"internet_access/ssid"
],
"geometry": [
"point",

View File

@@ -4,7 +4,8 @@
"address",
"building_area",
"opening_hours",
"smoking"
"smoking",
"outdoor_seating"
],
"geometry": [
"point",
@@ -14,6 +15,8 @@
"amenity": "pub"
},
"terms": [
"alcohol",
"drink",
"dive",
"beer",
"bier",

View File

@@ -0,0 +1,24 @@
{
"icon": "water",
"fields": [
"bath/type",
"bath/open_air",
"bath/sand_bath",
"address",
"building_area",
"opening_hours"
],
"geometry": [
"point",
"area"
],
"tags": {
"amenity": "public_bath"
},
"terms": [
"onsen",
"foot bath",
"hot springs"
],
"name": "Public Bath"
}

View File

@@ -8,7 +8,8 @@
"capacity",
"takeaway",
"delivery",
"smoking"
"smoking",
"outdoor_seating"
],
"geometry": [
"point",

View File

@@ -5,7 +5,10 @@
"building_area",
"opening_hours",
"wheelchair",
"social_facility_for"
"social_facility_for",
"internet_access",
"internet_access/fee",
"internet_access/ssid"
],
"geometry": [
"point",

View File

@@ -2,7 +2,9 @@
"icon": "college",
"fields": [
"operator",
"address"
"address",
"internet_access",
"internet_access/ssid"
],
"geometry": [
"point",

View File

@@ -12,5 +12,6 @@
"fields": [
"barrier"
],
"name": "Barrier"
"name": "Barrier",
"matchScore": 0.4
}

View File

@@ -1,5 +1,8 @@
{
"icon": "prison",
"fields": [
"height"
],
"geometry": [
"line",
"area"

View File

@@ -7,5 +7,6 @@
"tags": {
"barrier": "ditch"
},
"name": "Trench"
"name": "Trench",
"matchScore": 0.25
}

View File

@@ -1,10 +1,15 @@
{
"icon": "prison",
"fields": [
"fence_type",
"height"
],
"geometry": [
"line"
],
"tags": {
"barrier": "fence"
},
"name": "Fence"
"name": "Fence",
"matchScore": 0.25
}

View File

@@ -1,4 +1,7 @@
{
"fields": [
"height"
],
"geometry": [
"line",
"area"
@@ -6,5 +9,6 @@
"tags": {
"barrier": "hedge"
},
"name": "Hedge"
"name": "Hedge",
"matchScore": 0.25
}

View File

@@ -1,5 +1,9 @@
{
"icon": "prison",
"fields": [
"wall",
"height"
],
"geometry": [
"line",
"area"
@@ -7,5 +11,6 @@
"tags": {
"barrier": "wall"
},
"name": "Wall"
"name": "Wall",
"matchScore": 0.25
}

View File

@@ -12,7 +12,7 @@
"tags": {
"building": "*"
},
"matchScore": 0.4,
"matchScore": 0.6,
"terms": [],
"name": "Building"
}

View File

@@ -1,5 +1,4 @@
{
"icon": "circle-stroked",
"fields": [
"operator",
"address",

View File

@@ -1,5 +1,4 @@
{
"icon": "circle-stroked",
"fields": [
"operator",
"address",

View File

@@ -4,8 +4,7 @@
"network",
"operator",
"bench",
"shelter",
"covered"
"shelter"
],
"geometry": [
"point",
@@ -16,4 +15,4 @@
},
"terms": [],
"name": "Bus Stop"
}
}

View File

@@ -5,7 +5,9 @@
"maxspeed",
"structure",
"access",
"lanes",
"surface",
"maxheight",
"cycleway"
],
"geometry": [

View File

@@ -1,4 +1,5 @@
{
"icon": "circle-stroked",
"geometry": [
"vertex"
],
@@ -9,4 +10,4 @@
"clock_direction"
],
"name": "Mini-Roundabout"
}
}

View File

@@ -7,6 +7,7 @@
"access",
"lanes",
"surface",
"maxheight",
"ref"
],
"geometry": [

View File

@@ -5,7 +5,9 @@
"maxspeed",
"structure",
"access",
"lanes",
"surface",
"maxheight",
"ref"
],
"geometry": [

View File

@@ -7,6 +7,7 @@
"access",
"lanes",
"surface",
"maxheight",
"ref",
"cycleway"
],

View File

@@ -5,7 +5,9 @@
"maxspeed",
"structure",
"access",
"lanes",
"surface",
"maxheight",
"ref",
"cycleway"
],

View File

@@ -5,7 +5,9 @@
"maxspeed",
"structure",
"access",
"lanes",
"surface",
"maxheight",
"cycleway"
],
"geometry": [

View File

@@ -5,7 +5,9 @@
"maxspeed",
"structure",
"access",
"surface"
"lanes",
"surface",
"maxheight"
],
"geometry": [
"line"
@@ -15,4 +17,4 @@
},
"terms": [],
"name": "Unknown Road"
}
}

View File

@@ -7,6 +7,7 @@
"access",
"lanes",
"surface",
"maxheight",
"ref",
"cycleway"
],

View File

@@ -5,7 +5,9 @@
"maxspeed",
"structure",
"access",
"lanes",
"surface",
"maxheight",
"ref",
"cycleway"
],

View File

@@ -7,7 +7,7 @@
"structure",
"access",
"surface",
"cycleway"
"maxheight"
],
"geometry": [
"line"

View File

@@ -2,8 +2,11 @@
"icon": "highway-service",
"fields": [
"oneway",
"maxspeed",
"structure",
"access",
"surface"
"surface",
"maxheight"
],
"geometry": [
"line"
@@ -13,4 +16,4 @@
"service": "alley"
},
"name": "Alley"
}
}

View File

@@ -2,8 +2,11 @@
"icon": "highway-service",
"fields": [
"oneway",
"maxspeed",
"structure",
"access",
"surface"
"surface",
"maxheight"
],
"geometry": [
"line"
@@ -13,4 +16,4 @@
"service": "drive-through"
},
"name": "Drive-Through"
}
}

View File

@@ -2,8 +2,11 @@
"icon": "highway-service",
"fields": [
"oneway",
"maxspeed",
"structure",
"access",
"surface"
"surface",
"maxheight"
],
"geometry": [
"line"
@@ -13,4 +16,4 @@
"service": "driveway"
},
"name": "Driveway"
}
}

View File

@@ -2,8 +2,11 @@
"icon": "highway-service",
"fields": [
"oneway",
"maxspeed",
"structure",
"access",
"surface"
"surface",
"maxheight"
],
"geometry": [
"line"
@@ -13,4 +16,4 @@
"service": "emergency_access"
},
"name": "Emergency Access"
}
}

View File

@@ -2,8 +2,11 @@
"icon": "highway-service",
"fields": [
"oneway",
"maxspeed",
"structure",
"access",
"surface"
"surface",
"maxheight"
],
"geometry": [
"line"
@@ -13,4 +16,4 @@
"service": "parking_aisle"
},
"name": "Parking Aisle"
}
}

View File

@@ -7,6 +7,7 @@
"access",
"lanes",
"surface",
"maxheight",
"ref",
"cycleway"
],

View File

@@ -5,7 +5,9 @@
"maxspeed",
"structure",
"access",
"lanes",
"surface",
"maxheight",
"ref",
"cycleway"
],

View File

@@ -0,0 +1,20 @@
{
"geometry": [
"point"
],
"tags": {
"highway": "traffic_mirror"
},
"terms": [
"blind spot",
"convex",
"corner",
"curved",
"roadside",
"round",
"safety",
"sphere",
"visibility"
],
"name": "Traffic Mirror"
}

View File

@@ -7,6 +7,7 @@
"access",
"lanes",
"surface",
"maxheight",
"ref"
],
"geometry": [
@@ -17,4 +18,4 @@
},
"terms": [],
"name": "Trunk Road"
}
}

View File

@@ -5,7 +5,9 @@
"maxspeed",
"structure",
"access",
"lanes",
"surface",
"maxheight",
"ref"
],
"geometry": [

View File

@@ -1,5 +1,5 @@
{
"icon": "circle",
"icon": "circle-stroked",
"geometry": [
"vertex"
],

View File

@@ -0,0 +1,13 @@
{
"icon": "circle",
"geometry": [
"vertex"
],
"tags": {
"highway": "turning_loop"
},
"terms": [
"cul-de-sac"
],
"name": "Turning Loop (Island)"
}

View File

@@ -5,7 +5,9 @@
"maxspeed",
"structure",
"access",
"lanes",
"surface",
"maxheight",
"cycleway"
],
"geometry": [

View File

@@ -1,4 +1,5 @@
{
"icon": "religious-christian",
"geometry": [
"point",
"vertex",
@@ -8,4 +9,4 @@
"historic": "wayside_cross"
},
"name": "Wayside Cross"
}
}

View File

@@ -0,0 +1,23 @@
{
"fields": [
"operator",
"address",
"building_area",
"opening_hours"
],
"geometry": [
"point",
"area"
],
"terms": [
"ballroom",
"jive",
"swing",
"tango",
"waltz"
],
"tags": {
"leisure": "dance"
},
"name": "Dance Hall"
}

View File

@@ -7,7 +7,9 @@
"fee",
"sanitary_dump_station",
"power_supply",
"internet_access"
"internet_access",
"internet_access/fee",
"internet_access/ssid"
],
"geometry": [
"point",

Some files were not shown because too many files have changed in this diff Show More