diff --git a/build.js b/build.js index 87b7ffdc2..e7f3c9948 100644 --- a/build.js +++ b/build.js @@ -90,6 +90,12 @@ function generateFields() { function generatePresets() { var presets = {}; + + // A closed way is considered to be an area if it has a tag with one + // of the following keys, and the value is _not_ one of the associated + // values for the respective key. + var areaKeys = {}; + glob.sync(__dirname + '/data/presets/presets/**/*.json').forEach(function(file) { var preset = read(file), id = file.match(/presets\/presets\/([^.]*)\.json/)[1]; @@ -101,10 +107,22 @@ function generatePresets() { terms: (preset.terms || []).join(',') }; + for (var key in preset.tags) break; + var value = preset.tags[key]; + + if (['highway', 'footway', 'railway', 'type'].indexOf(key) === -1) { + if (preset.geometry.indexOf('area') >= 0) { + areaKeys[key] = areaKeys[key] || {}; + } else if (key in areaKeys && value !== '*') { + areaKeys[key][value] = true; + } + } + presets[id] = preset; }); fs.writeFileSync('data/presets/presets.json', stringify(presets)); + fs.writeFileSync('js/id/core/area_keys.js', 'iD.Way.areaKeys = ' + stringify(areaKeys) + ';'); var presetsYaml = _.cloneDeep(translations); _.forEach(presetsYaml.presets, function(preset) { diff --git a/data/presets/presets.json b/data/presets/presets.json index 668915e8e..f21564d9a 100644 --- a/data/presets/presets.json +++ b/data/presets/presets.json @@ -1484,8 +1484,7 @@ "boundary/administrative": { "name": "Administrative Boundary", "geometry": [ - "line", - "area" + "line" ], "tags": { "boundary": "administrative" diff --git a/data/presets/presets/boundary/administrative.json b/data/presets/presets/boundary/administrative.json index 1f6bebba7..194f8ec72 100644 --- a/data/presets/presets/boundary/administrative.json +++ b/data/presets/presets/boundary/administrative.json @@ -1,8 +1,7 @@ { "name": "Administrative Boundary", "geometry": [ - "line", - "area" + "line" ], "tags": { "boundary": "administrative" diff --git a/index.html b/index.html index a1fd74225..3d43d56a4 100644 --- a/index.html +++ b/index.html @@ -204,6 +204,7 @@ + diff --git a/js/id/core/area_keys.js b/js/id/core/area_keys.js new file mode 100644 index 000000000..64ddc2bfa --- /dev/null +++ b/js/id/core/area_keys.js @@ -0,0 +1,79 @@ +iD.Way.areaKeys = { + "aeroway": { + "gate": true, + "taxiway": true + }, + "amenity": { + "atm": true, + "bench": true, + "drinking_water": true, + "post_box": true, + "telephone": true, + "vending_machine": true, + "waste_basket": true + }, + "area": {}, + "barrier": { + "block": true, + "bollard": true, + "cattle_grid": true, + "cycle_barrier": true, + "entrance": true, + "gate": true, + "kissing_gate": true, + "lift_gate": true, + "stile": true, + "toll_booth": true + }, + "building": { + "entrance": true + }, + "emergency": { + "fire_hydrant": true, + "phone": true + }, + "historic": { + "boundary_stone": true + }, + "landuse": {}, + "leisure": { + "slipway": true + }, + "man_made": { + "cutline": true, + "embankment": true, + "flagpole": true, + "pipeline": true, + "survey_point": true + }, + "military": {}, + "natural": { + "coastline": true, + "peak": true, + "spring": true, + "tree": true + }, + "office": {}, + "place": {}, + "power": { + "line": true, + "minor_line": true, + "pole": true, + "tower": true + }, + "public_transport": { + "stop_position": true + }, + "shop": {}, + "tourism": { + "viewpoint": true + }, + "waterway": { + "canal": true, + "ditch": true, + "drain": true, + "river": true, + "stream": true, + "weir": true + } +}; \ No newline at end of file diff --git a/js/id/core/way.js b/js/id/core/way.js index 8f703049a..9579be396 100644 --- a/js/id/core/way.js +++ b/js/id/core/way.js @@ -189,29 +189,3 @@ _.extend(iD.Way.prototype, { }); } }); - -// A closed way is considered to be an area if it has a tag with one -// of the following keys, and the value is _not_ one of the associated -// values for the respective key. -iD.Way.areaKeys = { - aeroway: { taxiway: true}, - amenity: {}, - area: {}, - 'area:highway': {}, - building: {}, - 'building:part': {}, - historic: {}, - landuse: {}, - leisure: {}, - man_made: { cutline: true, embankment: true, pipeline: true}, - military: {}, - natural: { coastline: true }, - office: {}, - place: {}, - power: {}, - public_transport: {}, - ruins: {}, - shop: {}, - tourism: {}, - waterway: {} -}; diff --git a/test/index.html b/test/index.html index 0ea970316..8fe2bc698 100644 --- a/test/index.html +++ b/test/index.html @@ -184,6 +184,7 @@ +