diff --git a/modules/modes/select.js b/modules/modes/select.js index 1efb45e65..42e3733e0 100644 --- a/modules/modes/select.js +++ b/modules/modes/select.js @@ -69,6 +69,12 @@ export function modeSelect(context, selectedIDs) { } } + function selectedEntities() { + return selectedIDs.map(function(id) { + return context.hasEntity(id); + }).filter(Boolean); + } + function checkSelectedIDs() { var ids = []; @@ -192,10 +198,7 @@ export function modeSelect(context, selectedIDs) { mode.zoomToSelected = function() { - var entity = singular(); - if (entity) { - context.map().zoomToEase(entity); - } + context.map().zoomToEase(selectedEntities()); }; diff --git a/modules/renderer/map.js b/modules/renderer/map.js index a5eea4cf1..4db517f5e 100644 --- a/modules/renderer/map.js +++ b/modules/renderer/map.js @@ -854,8 +854,20 @@ export function rendererMap(context) { }; - map.zoomToEase = function(entity, duration) { - var extent = entity.extent(context.graph()); + map.zoomToEase = function(obj, duration) { + var extent; + if (Array.isArray(obj)) { + obj.forEach(function(entity) { + var entityExtent = entity.extent(context.graph()); + if (!extent) { + extent = entityExtent; + } else { + extent = extent.extend(entityExtent); + } + }); + } else { + extent = obj.extent(context.graph()); + } if (!isFinite(extent.area())) return map; var z2 = clamp(map.trimmedExtentZoom(extent), 0, 20);