Combine vertex and point geometries into a single Point fallback preset

This commit is contained in:
Quincy Morgan
2019-03-18 12:36:20 -04:00
parent f55434acbf
commit 7e92f6aa89
16 changed files with 56 additions and 55 deletions
-4
View File
@@ -25,8 +25,6 @@ en:
title: Point
description: "Add restaurants, monuments, postal boxes or other points to the map."
tail: Click on the map to add a point.
add_vertex:
title: Vertex
add_note:
title: Note
description: "Spotted an issue? Let other mappers know."
@@ -42,8 +40,6 @@ en:
title: "Add {feature} as an area"
building:
title: "Add {feature} as a building"
vertex:
title: "Add {feature} as a vertex"
browse:
title: Browse
description: Pan and zoom the map.
+3 -4
View File
@@ -3137,6 +3137,7 @@ en:
area:
# area=yes
name: Area
# 'terms: polygon'
terms: '<translate with synonyms or related terms for ''Area'', separated by commas>'
area/highway:
# 'area:highway=*'
@@ -4896,6 +4897,7 @@ en:
terms: '<translate with synonyms or related terms for ''Water Park'', separated by commas>'
line:
name: Line
# 'terms: polyline'
terms: '<translate with synonyms or related terms for ''Line'', separated by commas>'
man_made:
# man_made=*
@@ -5640,6 +5642,7 @@ en:
terms: '<translate with synonyms or related terms for ''Zip Wire'', separated by commas>'
point:
name: Point
# 'terms: node,other,vertex,vertices'
terms: '<translate with synonyms or related terms for ''Point'', separated by commas>'
power:
# power=*
@@ -7040,10 +7043,6 @@ en:
# type=waterway
name: Waterway
terms: '<translate with synonyms or related terms for ''Waterway'', separated by commas>'
vertex:
name: Vertex
# 'terms: other'
terms: '<translate with synonyms or related terms for ''Vertex'', separated by commas>'
waterway:
# waterway=*
name: Waterway
+1 -1
View File
@@ -46,7 +46,7 @@
"traffic_calming",
"highway/mini_roundabout",
"highway/motorway_junction",
"vertex"
"point"
],
"relation": [
"category-route",
+3 -4
View File
@@ -221,7 +221,7 @@
"amenity/waste/dog_excrement": {"icon": "maki-waste-basket", "fields": ["collection_times"], "geometry": ["point", "vertex", "area"], "tags": {"amenity": "waste_basket", "waste": "dog_excrement"}, "reference": {"key": "waste", "value": "dog_excrement"}, "terms": ["bin", "garbage", "rubbish", "litter", "trash", "poo", "dog"], "name": "Dog Excrement Bin"},
"amenity/water_point": {"icon": "maki-drinking-water", "fields": ["operator", "fee", "payment_multi"], "geometry": ["area", "vertex", "point"], "tags": {"amenity": "water_point"}, "name": "RV Drinking Water"},
"amenity/watering_place": {"icon": "maki-drinking-water", "fields": ["operator", "fee", "payment_multi"], "geometry": ["area", "vertex", "point"], "tags": {"amenity": "watering_place"}, "name": "Animal Watering Place"},
"area": {"fields": ["name"], "geometry": ["area"], "tags": {"area": "yes"}, "name": "Area", "matchScore": 0.1},
"area": {"fields": ["name"], "geometry": ["area"], "tags": {"area": "yes"}, "terms": ["polygon"], "name": "Area", "matchScore": 0.1},
"area/highway": {"fields": ["name", "area/highway"], "geometry": ["area"], "tags": {"area:highway": "*"}, "name": "Road Surface"},
"attraction/amusement_ride": {"icon": "maki-amusement-park", "geometry": ["point", "area"], "terms": ["theme park", "carnival ride"], "tags": {"attraction": "amusement_ride"}, "name": "Amusement Ride"},
"attraction/animal": {"icon": "maki-zoo", "fields": ["name", "operator"], "geometry": ["point", "area"], "terms": ["amphibian", "animal park", "aquarium", "bear", "bird", "fish", "insect", "lion", "mammal", "monkey", "penguin", "reptile", "safari", "theme park", "tiger", "zoo"], "tags": {"attraction": "animal"}, "name": "Animal Enclosure"},
@@ -610,7 +610,7 @@
"leisure/track/horse_racing": {"icon": "maki-horse-riding", "fields": ["surface", "sport_racing_nonmotor", "lit", "width", "lanes"], "geometry": ["point", "line", "area"], "tags": {"leisure": "track", "sport": "horse_racing"}, "addTags": {"leisure": "track", "sport": "horse_racing", "highway": "bridleway"}, "removeTags": {"leisure": "track", "sport": "horse_racing", "highway": "bridleway"}, "terms": ["equestrian race track", "horse race betting", "horseracing", "horsetrack", "horse racetrack"], "name": "Horse Racing Track"},
"leisure/track/running": {"icon": "maki-pitch", "fields": ["surface", "sport_racing_nonmotor", "lit", "width", "lanes"], "geometry": ["point", "line", "area"], "tags": {"leisure": "track", "sport": "running"}, "addTags": {"leisure": "track", "sport": "running", "highway": "footway"}, "removeTags": {"leisure": "track", "sport": "running", "highway": "footway"}, "terms": ["athletics track", "decathlon", "foot race", "long distance running", "marathon", "middle distance running", "racetrack", "running", "sprint", "track", "walking"], "name": "Running Track"},
"leisure/water_park": {"icon": "maki-swimming", "fields": ["name", "operator", "address"], "moreFields": ["payment_multi", "brand", "website", "phone", "email", "fax"], "geometry": ["point", "area"], "terms": ["swim", "pool", "dive"], "tags": {"leisure": "water_park"}, "name": "Water Park"},
"line": {"fields": ["name"], "geometry": ["line"], "tags": {}, "name": "Line", "matchScore": 0.1},
"line": {"fields": ["name"], "geometry": ["line"], "tags": {}, "terms": ["polyline"], "name": "Line", "matchScore": 0.1},
"man_made/adit": {"icon": "maki-triangle", "geometry": ["point", "area"], "fields": ["name", "operator", "resource", "direction"], "terms": ["cave", "horizontal mine entrance", "tunnel", "underground"], "tags": {"man_made": "adit"}, "name": "Adit"},
"man_made/antenna": {"icon": "temaki-antenna", "fields": ["height", "communication_multi"], "geometry": ["point"], "terms": ["broadcast", "cell phone", "cell", "communication", "mobile phone", "radio", "television", "transmission", "tv"], "tags": {"man_made": "antenna"}, "name": "Antenna"},
"man_made/breakwater": {"geometry": ["line", "area"], "tags": {"man_made": "breakwater"}, "name": "Breakwater"},
@@ -771,7 +771,7 @@
"playground/structure": {"icon": "maki-pitch", "geometry": ["point", "area"], "tags": {"playground": "structure"}, "name": "Play Structure"},
"playground/swing": {"icon": "maki-playground", "fields": ["capacity", "playground/baby", "wheelchair"], "geometry": ["point"], "tags": {"playground": "swing"}, "name": "Swing"},
"playground/zipwire": {"icon": "maki-playground", "geometry": ["point", "line"], "tags": {"playground": "zipwire"}, "name": "Zip Wire"},
"point": {"fields": ["name"], "geometry": ["point"], "tags": {}, "name": "Point", "matchScore": 0.1},
"point": {"fields": ["name"], "geometry": ["vertex", "point"], "tags": {}, "terms": ["node", "other", "vertex", "vertices"], "name": "Point", "matchScore": 0.1},
"power/sub_station": {"icon": "temaki-power", "fields": ["substation", "operator", "building", "ref"], "geometry": ["point", "area"], "tags": {"power": "sub_station"}, "reference": {"key": "power", "value": "substation"}, "name": "Substation", "searchable": false},
"power/cable/underground": {"fields": ["name", "operator", "voltage", "ref", "layer"], "geometry": ["line"], "tags": {"power": "cable", "location": "underground"}, "name": "Underground Power Cable"},
"power/generator": {"icon": "temaki-power", "fields": ["operator", "generator/source", "generator/method", "generator/type", "generator/output/electricity", "ref"], "geometry": ["point", "vertex", "area"], "terms": ["hydro", "solar", "turbine", "wind"], "tags": {"power": "generator"}, "name": "Power Generator"},
@@ -1078,7 +1078,6 @@
"type/route/tram": {"icon": "iD-route-tram", "fields": ["name", "ref_route", "operator", "network", "to", "from"], "moreFields": ["colour", "interval", "opening_hours", "duration", "wheelchair"], "geometry": ["relation"], "tags": {"type": "route", "route": "tram"}, "name": "Tram Route"},
"type/site": {"icon": "iD-relation", "fields": ["name", "site"], "geometry": ["relation"], "tags": {"type": "site"}, "name": "Site"},
"type/waterway": {"icon": "iD-route-water", "fields": ["name", "waterway", "ref"], "geometry": ["relation"], "tags": {"type": "waterway"}, "name": "Waterway"},
"vertex": {"moreFields": ["name"], "geometry": ["vertex"], "terms": ["other"], "tags": {}, "name": "Vertex", "matchScore": 0.1},
"waterway/riverbank": {"icon": "maki-water", "geometry": ["area"], "tags": {"waterway": "riverbank"}, "name": "Riverbank", "searchable": false},
"waterway/boatyard": {"icon": "maki-harbor", "fields": ["name", "operator"], "moreFields": ["address", "website", "phone", "email", "fax", "wheelchair"], "geometry": ["area", "vertex", "point"], "tags": {"waterway": "boatyard"}, "name": "Boatyard"},
"waterway/canal": {"icon": "iD-waterway-canal", "fields": ["name", "width", "intermittent"], "moreFields": ["salt"], "geometry": ["line"], "tags": {"waterway": "canal"}, "name": "Canal"},
+3
View File
@@ -8,6 +8,9 @@
"tags": {
"area": "yes"
},
"terms": [
"polygon"
],
"name": "Area",
"matchScore": 0.1
}
+3
View File
@@ -6,6 +6,9 @@
"line"
],
"tags": {},
"terms": [
"polyline"
],
"name": "Line",
"matchScore": 0.1
}
+7
View File
@@ -3,9 +3,16 @@
"name"
],
"geometry": [
"vertex",
"point"
],
"tags": {},
"terms": [
"node",
"other",
"vertex",
"vertices"
],
"name": "Point",
"matchScore": 0.1
}
-14
View File
@@ -1,14 +0,0 @@
{
"moreFields": [
"name"
],
"geometry": [
"vertex"
],
"terms": [
"other"
],
"tags": {},
"name": "Vertex",
"matchScore": 0.1
}
+3 -13
View File
@@ -31,9 +31,6 @@
"description": "Add restaurants, monuments, postal boxes or other points to the map.",
"tail": "Click on the map to add a point."
},
"add_vertex": {
"title": "Vertex"
},
"add_note": {
"title": "Note",
"description": "Spotted an issue? Let other mappers know.",
@@ -53,9 +50,6 @@
},
"building": {
"title": "Add {feature} as a building"
},
"vertex": {
"title": "Add {feature} as a vertex"
}
},
"browse": {
@@ -4825,7 +4819,7 @@
},
"area": {
"name": "Area",
"terms": ""
"terms": "polygon"
},
"area/highway": {
"name": "Road Surface",
@@ -6381,7 +6375,7 @@
},
"line": {
"name": "Line",
"terms": ""
"terms": "polyline"
},
"man_made/adit": {
"name": "Adit",
@@ -7025,7 +7019,7 @@
},
"point": {
"name": "Point",
"terms": ""
"terms": "node,other,vertex,vertices"
},
"power/sub_station": {
"name": "Substation",
@@ -8251,10 +8245,6 @@
"name": "Waterway",
"terms": ""
},
"vertex": {
"name": "Vertex",
"terms": "other"
},
"waterway/riverbank": {
"name": "Riverbank",
"terms": ""
+7 -2
View File
@@ -42,6 +42,11 @@ export function presetCollection(collection) {
}));
},
fallback: function(geometry) {
var id = geometry;
if (id === 'vertex') id = 'point';
return this.item(id);
},
search: function(value, geometry) {
if (!value) return this;
@@ -153,10 +158,10 @@ export function presetCollection(collection) {
if (geometry) {
if (typeof geometry === 'string') {
results.push(presets.item(geometry));
results.push(presets.fallback(geometry));
} else {
geometry.forEach(function(geom) {
results.push(presets.item(geom));
results.push(presets.fallback(geom));
});
}
}
+15 -4
View File
@@ -84,7 +84,7 @@ export function presetIndex(context) {
if (address && (!match || match.isFallback())) {
match = address;
}
return match || all.item(geometry);
return match || all.fallback(geometry);
};
all.allowsVertex = function(entity, resolver) {
@@ -271,7 +271,7 @@ export function presetIndex(context) {
all.defaults = function(geometry, n) {
var rec = all.recent().matchGeometry(geometry).collection.slice(0, 4);
var def = _uniq(rec.concat(_defaults[geometry].collection)).slice(0, n - 1);
return presetCollection(_uniq(rec.concat(def).concat(all.item(geometry))));
return presetCollection(_uniq(rec.concat(def).concat(all.fallback(geometry))));
};
all.recent = function() {
@@ -307,10 +307,16 @@ export function presetIndex(context) {
function ribbonItemForMinified(d, source) {
if (d && d.pID && d.geom) {
var preset = all.item(d.pID);
if (!preset) return null;
var geom = d.geom;
// treat point and vertex features as one geometry
if (geom === 'vertex') geom = 'point';
// iD's presets could have changed since this was saved,
// so make sure it's still valid.
if (preset && preset.matchGeometry(d.geom)) {
return RibbonItem(preset, d.geom, source);
if (preset.matchGeometry(geom) || (geom === 'point' && preset.matchGeometry('vertex'))) {
return RibbonItem(preset, geom, source);
}
}
return null;
@@ -364,6 +370,7 @@ export function presetIndex(context) {
};
all.toggleFavorite = function(preset, geometry) {
geometry = all.fallback(geometry).id;
var favs = all.getFavorites();
var favorite = all.favoriteMatching(preset, geometry);
if (favorite) {
@@ -381,6 +388,7 @@ export function presetIndex(context) {
};
all.removeFavorite = function(preset, geometry) {
geometry = all.fallback(geometry).id;
var item = all.favoriteMatching(preset, geometry);
if (item) {
var items = all.getFavorites();
@@ -399,6 +407,7 @@ export function presetIndex(context) {
};
all.favoriteMatching = function(preset, geometry) {
geometry = all.fallback(geometry).id;
var favs = all.getFavorites();
for (var index in favs) {
if (favs[index].matches(preset, geometry)) {
@@ -408,6 +417,7 @@ export function presetIndex(context) {
return null;
};
all.recentMatching = function(preset, geometry) {
geometry = all.fallback(geometry).id;
var items = all.getRecents();
for (var index in items) {
if (items[index].matches(preset, geometry)) {
@@ -439,6 +449,7 @@ export function presetIndex(context) {
};
all.setMostRecent = function(preset, geometry) {
geometry = all.fallback(geometry).id;
if (preset.searchable === false) return;
var items = all.getRecents();
+2 -2
View File
@@ -121,7 +121,7 @@ export function uiModes(context) {
if (d.preset.setTags({}, d.geometry).building) {
tooltipTitleID = 'modes.add_preset.building.title';
} else {
tooltipTitleID = 'modes.add_preset.' + d.geometry + '.title';
tooltipTitleID = 'modes.add_preset.' + context.presets().fallback(d.geometry).id + '.title';
}
}
var protoMode = _clone(d);
@@ -209,7 +209,7 @@ export function uiModes(context) {
} else {
d3_select(this)
.call(uiPresetIcon()
.geometry(d.geometry)
.geometry((d.geometry === 'point' && !d.preset.matchGeometry(d.geometry)) ? 'vertex' : d.geometry)
.preset(d.preset)
.sizeClass('small')
);
+2
View File
@@ -8,6 +8,8 @@ import { svgIcon } from '../svg';
export function uiPresetFavorite(preset, geom, context, klass) {
geom = context.presets().fallback(geom).id;
var presetFavorite = {};
var _button = d3_select(null);
+1 -1
View File
@@ -361,7 +361,7 @@ export function uiSearchAdd(context) {
if (d.preset.setTags({}, d.geometry).building) {
return t('presets.presets.building.name');
}
return t('modes.add_' + d.geometry + '.title');
return t('modes.add_' + context.presets().fallback(d.geometry).id + '.title');
}
return d.preset.name();
});
+4 -4
View File
@@ -60,9 +60,9 @@
"concat-files": "^0.1.1",
"d3": "4.13.0",
"ecstatic": "^3.0.0",
"editor-layer-index": "osmlab/editor-layer-index.git#gh-pages",
"eslint": "^5.15.0",
"esm": "~3.2.11",
"editor-layer-index": "github:osmlab/editor-layer-index#gh-pages",
"eslint": "^5.15.3",
"esm": "^3.2.18",
"gaze": "^1.1.1",
"glob": "^7.1.0",
"happen": "^0.3.1",
@@ -91,7 +91,7 @@
"smash": "0.0",
"svg-sprite": "1.5.0",
"temaki": "1.2.0",
"uglify-js": "~3.4.0"
"uglify-js": "^3.4.10"
},
"greenkeeper": {
"label": "chore-greenkeeper",
+2 -2
View File
@@ -42,14 +42,14 @@ describe('iD.presetIndex', function () {
expect(presets.match(line, graph).id).to.eql('line');
});
it('matches vertices on a line as vertices', function () {
it('matches vertices on a line as points', function () {
iD.data.presets = testPresets;
var presets = iD.coreContext().presets();
var point = iD.osmNode({ tags: { leisure: 'park' } });
var line = iD.osmWay({ nodes: [point.id], tags: { 'highway': 'residential' } });
var graph = iD.coreGraph([point, line]);
expect(presets.match(point, graph).id).to.eql('vertex');
expect(presets.match(point, graph).id).to.eql('point');
});
it('matches vertices on an addr:interpolation line as points', function () {