mirror of
https://github.com/FoggedLens/iD.git
synced 2026-02-12 16:52:50 +00:00
Build iD.Way.areaKeys from presets
This eliminates the possibility that a feature will flip from area to line when you apply a preset. Fixes #1996
This commit is contained in:
18
build.js
18
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) {
|
||||
|
||||
@@ -1484,8 +1484,7 @@
|
||||
"boundary/administrative": {
|
||||
"name": "Administrative Boundary",
|
||||
"geometry": [
|
||||
"line",
|
||||
"area"
|
||||
"line"
|
||||
],
|
||||
"tags": {
|
||||
"boundary": "administrative"
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
{
|
||||
"name": "Administrative Boundary",
|
||||
"geometry": [
|
||||
"line",
|
||||
"area"
|
||||
"line"
|
||||
],
|
||||
"tags": {
|
||||
"boundary": "administrative"
|
||||
|
||||
@@ -204,6 +204,7 @@
|
||||
<script src='js/id/core/relation.js'></script>
|
||||
<script src='js/id/core/way.js'></script>
|
||||
<script src='js/id/core/tree.js'></script>
|
||||
<script src='js/id/core/area_keys.js'></script>
|
||||
|
||||
<script src='js/id/presets.js'></script>
|
||||
<script src='js/id/presets/preset.js'></script>
|
||||
|
||||
79
js/id/core/area_keys.js
Normal file
79
js/id/core/area_keys.js
Normal file
@@ -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
|
||||
}
|
||||
};
|
||||
@@ -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: {}
|
||||
};
|
||||
|
||||
@@ -184,6 +184,7 @@
|
||||
<script src='../js/id/core/relation.js'></script>
|
||||
<script src='../js/id/core/way.js'></script>
|
||||
<script src='../js/id/core/tree.js'></script>
|
||||
<script src='../js/id/core/area_keys.js'></script>
|
||||
|
||||
<script src='../js/id/presets.js'></script>
|
||||
<script src='../js/id/presets/preset.js'></script>
|
||||
|
||||
Reference in New Issue
Block a user