diff --git a/modules/actions/extract.js b/modules/actions/extract.js index 4a4ebba05..82fb1ccf0 100644 --- a/modules/actions/extract.js +++ b/modules/actions/extract.js @@ -45,7 +45,10 @@ export function actionExtract(entityID) { var keysToRetain = ['area']; var buildingKeysToRetain = ['architect', 'building', 'height', 'layer']; - var centroid = d3_geoCentroid(entity.asGeoJSON(graph)); + var extractedLoc = d3_geoCentroid(entity.asGeoJSON(graph)); + if (!extractedLoc || !isFinite(extractedLoc[0]) || !isFinite(extractedLoc[1])) { + extractedLoc = entity.extent(graph).center(); + } var isBuilding = entity.tags.building && entity.tags.building !== 'no'; @@ -87,7 +90,7 @@ export function actionExtract(entityID) { entityTags.area = 'yes'; } - var replacement = osmNode({ loc: centroid, tags: pointTags }); + var replacement = osmNode({ loc: extractedLoc, tags: pointTags }); graph = graph.replace(replacement); extractedNodeID = replacement.id; diff --git a/modules/operations/extract.js b/modules/operations/extract.js index 8e080bbe3..bcd33bc6e 100644 --- a/modules/operations/extract.js +++ b/modules/operations/extract.js @@ -21,10 +21,9 @@ export function operationExtract(context, selectedIDs) { if (entity.type === 'node' && graph.parentWays(entity).length === 0) return; - var geometry = graph.geometry(entityID); - if (geometry === 'area' || geometry === 'line') { + if (entity.type !== 'node') { var preset = presetManager.match(entity, graph); - // only allow extraction from ways/multipolygons if the preset supports points + // only allow extraction from ways/relations if the preset supports points if (preset.geometry.indexOf('point') === -1) return; }