mirror of
https://github.com/FoggedLens/iD.git
synced 2026-05-26 09:57:50 +02:00
map#trimmedExtentZoom
Like map#extentZoom, but uses trimmed viewport instead of full viewport to avoid putting the extent under UI buttons and border elements. This is because in conflict resolution the user will be extentZooming to see their changes and it was annoying to have the change appear under the UI. Also using this in zoomToGPXLayer.
This commit is contained in:
@@ -151,14 +151,16 @@ iD.Background = function(context) {
|
||||
|
||||
background.zoomToGpxLayer = function() {
|
||||
if (background.hasGpxLayer()) {
|
||||
var viewport = context.map().extent().polygon(),
|
||||
var map = context.map(),
|
||||
viewport = map.trimmedExtent().polygon(),
|
||||
coords = _.reduce(gpxLayer.geojson().features, function(coords, feature) {
|
||||
var c = feature.geometry.coordinates;
|
||||
return _.union(coords, feature.geometry.type === 'Point' ? [c] : c);
|
||||
}, []);
|
||||
|
||||
if (!iD.geo.polygonIntersectsPolygon(viewport, coords)) {
|
||||
context.map().extent(d3.geo.bounds(gpxLayer.geojson()));
|
||||
var extent = iD.geo.Extent(d3.geo.bounds(gpxLayer.geojson()));
|
||||
map.centerZoom(extent.center(), map.trimmedExtentZoom(extent));
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
+15
-6
@@ -342,7 +342,7 @@ iD.Map = function(context) {
|
||||
|
||||
map.zoomTo = function(entity, zoomLimits) {
|
||||
var extent = entity.extent(context.graph()),
|
||||
zoom = map.extentZoom(extent);
|
||||
zoom = map.trimmedExtentZoom(extent);
|
||||
zoomLimits = zoomLimits || [context.minEditableZoom(), 20];
|
||||
map.centerZoom(extent.center(), Math.min(Math.max(zoom, zoomLimits[0]), zoomLimits[1]));
|
||||
};
|
||||
@@ -391,19 +391,28 @@ iD.Map = function(context) {
|
||||
projection.invert([dimensions[0] - pad, headerY + pad]));
|
||||
};
|
||||
|
||||
map.extentZoom = function(_) {
|
||||
var extent = iD.geo.Extent(_),
|
||||
tl = projection([extent[0][0], extent[1][1]]),
|
||||
function calcZoom(extent, dim) {
|
||||
var tl = projection([extent[0][0], extent[1][1]]),
|
||||
br = projection([extent[1][0], extent[0][1]]);
|
||||
|
||||
// Calculate maximum zoom that fits extent
|
||||
var hFactor = (br[0] - tl[0]) / dimensions[0],
|
||||
vFactor = (br[1] - tl[1]) / dimensions[1],
|
||||
var hFactor = (br[0] - tl[0]) / dim[0],
|
||||
vFactor = (br[1] - tl[1]) / dim[1],
|
||||
hZoomDiff = Math.log(Math.abs(hFactor)) / Math.LN2,
|
||||
vZoomDiff = Math.log(Math.abs(vFactor)) / Math.LN2,
|
||||
newZoom = map.zoom() - Math.max(hZoomDiff, vZoomDiff);
|
||||
|
||||
return newZoom;
|
||||
}
|
||||
|
||||
map.extentZoom = function(_) {
|
||||
return calcZoom(iD.geo.Extent(_), dimensions);
|
||||
};
|
||||
|
||||
map.trimmedExtentZoom = function(_) {
|
||||
var trimY = 120, trimX = 40,
|
||||
trimmed = [dimensions[0] - trimX, dimensions[1] - trimY];
|
||||
return calcZoom(iD.geo.Extent(_), trimmed);
|
||||
};
|
||||
|
||||
map.editable = function() {
|
||||
|
||||
Reference in New Issue
Block a user