From ac6251cf9ea6da607309d441a3fc42d145776e41 Mon Sep 17 00:00:00 2001 From: Josh Lee Date: Tue, 2 Feb 2021 11:46:16 -0500 Subject: [PATCH] Fix centroid calculation in measurement panel. Copy/paste of 0a0e2dcf75d1cfb1bbeeae5f5c162dde250a72bf --- modules/ui/panels/measurement.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/modules/ui/panels/measurement.js b/modules/ui/panels/measurement.js index cf5965290..9424bae28 100644 --- a/modules/ui/panels/measurement.js +++ b/modules/ui/panels/measurement.js @@ -1,8 +1,7 @@ import { geoLength as d3_geoLength, - geoCentroid as d3_geoCentroid + geoPath as d3_geoPath } from 'd3-geo'; -import geojsonRewind from '@mapbox/geojson-rewind'; import { t, localizer } from '../../core/localizer'; import { displayArea, displayLength, decimalCoordinatePair, dmsCoordinatePair } from '../../util/units'; @@ -79,8 +78,11 @@ export function uiPanelMeasurement(context) { closed = (entity.type === 'relation') || (entity.isClosed() && !entity.isDegenerate()); var feature = entity.asGeoJSON(graph); length += radiansToMeters(d3_geoLength(toLineString(feature))); - // d3_geoCentroid is wrong for counterclockwise-wound polygons, so wind them clockwise - centroid = d3_geoCentroid(geojsonRewind(Object.assign({}, feature), true)); + centroid = d3_geoPath(context.projection).centroid(entity.asGeoJSON(graph)); + centroid = centroid && context.projection.invert(centroid); + if (!centroid || !isFinite(centroid[0]) || !isFinite(centroid[1])) { + centroid = entity.extent(graph).center(); + } if (closed) { area += steradiansToSqmeters(entity.area(graph)); }