From 9f33ca9a011cea944025909cdd0191def2c77c68 Mon Sep 17 00:00:00 2001 From: Bryan Housel Date: Thu, 9 Aug 2018 23:25:50 -0400 Subject: [PATCH] Show location of selected Note in Measurement Panel (re: #5158) --- data/core.yaml | 1 + dist/locales/en.json | 3 +- modules/ui/panels/measurement.js | 62 ++++++++++++++++++-------------- 3 files changed, 39 insertions(+), 27 deletions(-) diff --git a/data/core.yaml b/data/core.yaml index f02885a8f..d6f342f6e 100644 --- a/data/core.yaml +++ b/data/core.yaml @@ -373,6 +373,7 @@ en: line: line area: area relation: relation + note: note geocoder: search: Search worldwide... no_results_visible: No results in visible map area diff --git a/dist/locales/en.json b/dist/locales/en.json index 025731b94..a359e5a68 100644 --- a/dist/locales/en.json +++ b/dist/locales/en.json @@ -460,7 +460,8 @@ "vertex": "vertex", "line": "line", "area": "area", - "relation": "relation" + "relation": "relation", + "note": "note" }, "geocoder": { "search": "Search worldwide...", diff --git a/modules/ui/panels/measurement.js b/modules/ui/panels/measurement.js index ff7369925..b5400950b 100644 --- a/modules/ui/panels/measurement.js +++ b/modules/ui/panels/measurement.js @@ -11,7 +11,7 @@ import { t } from '../../util/locale'; import { displayArea, displayLength, decimalCoordinatePair, dmsCoordinatePair } from '../../util/units'; import { geoExtent } from '../../geo'; import { utilDetect } from '../../util/detect'; - +import { services } from '../../services'; export function uiPanelMeasurement(context) { @@ -43,21 +43,40 @@ export function uiPanelMeasurement(context) { return result; } + function nodeCount(feature) { if (feature.type === 'LineString') return feature.coordinates.length; - - if (feature.type === 'Polygon') { - return feature.coordinates[0].length - 1; - } + if (feature.type === 'Polygon') return feature.coordinates[0].length - 1; } function redraw(selection) { var resolver = context.graph(); - var selected = _filter(context.selectedIDs(), function(e) { return context.hasEntity(e); }); + var selectedNoteID = context.selectedNoteID(); + var osm = services.osm; + + var selected, center, entity, note, geometry; + + if (selectedNoteID && osm) { // selected 1 note + selected = [ t('note.note') + ' ' + selectedNoteID ]; + note = osm.getNote(selectedNoteID); + center = note.loc; + geometry = 'note'; + + } else { // selected 1..n entities + var extent = geoExtent(); + selected = _filter(context.selectedIDs(), function(e) { return context.hasEntity(e); }); + if (selected.length) { + for (var i = 0; i < selected.length; i++) { + entity = context.entity(selected[i]); + extent._extend(entity.extent(resolver)); + } + center = extent.center(); + geometry = entity.geometry(resolver); + } + } + var singular = selected.length === 1 ? selected[0] : null; - var extent = geoExtent(); - var entity; selection.html(''); @@ -68,19 +87,12 @@ export function uiPanelMeasurement(context) { if (!selected.length) return; - var center; - for (var i = 0; i < selected.length; i++) { - entity = context.entity(selected[i]); - extent._extend(entity.extent(resolver)); - } - center = extent.center(); - var list = selection .append('ul'); var coordItem; - // multiple features, just display extent center.. + // multiple selected features, just display extent center.. if (!singular) { coordItem = list .append('li') @@ -92,16 +104,13 @@ export function uiPanelMeasurement(context) { return; } - // single feature, display details.. - if (!entity) return; - var geometry = entity.geometry(resolver); - + // single selected feature, display details.. if (geometry === 'line' || geometry === 'area') { - var closed = (entity.type === 'relation') || (entity.isClosed() && !entity.isDegenerate()), - feature = entity.asGeoJSON(resolver), - length = radiansToMeters(d3_geoLength(toLineString(feature))), - lengthLabel = t('info_panels.measurement.' + (closed ? 'perimeter' : 'length')), - centroid = d3_geoCentroid(feature); + var closed = (entity.type === 'relation') || (entity.isClosed() && !entity.isDegenerate()); + var feature = entity.asGeoJSON(resolver); + var length = radiansToMeters(d3_geoLength(toLineString(feature))); + var lengthLabel = t('info_panels.measurement.' + (closed ? 'perimeter' : 'length')); + var centroid = d3_geoCentroid(feature); list .append('li') @@ -157,7 +166,8 @@ export function uiPanelMeasurement(context) { }); } else { - var centerLabel = t('info_panels.measurement.' + (entity.type === 'node' ? 'location' : 'center')); + var centerLabel = t('info_panels.measurement.' + + (note || entity.type === 'node' ? 'location' : 'center')); list .append('li')