想知道是否有人可以提供如何使用GMaps2设置最大和最小范围的示例?在OpenLayers中,这是如何完成的:
var point1 = new OpenLayers.Geometry.Point(7, 48);
point1.transform(new OpenLayers.Projection("EPSG:4326"), new OpenLayers.Projection("EPSG:900913"));
var point2 = new OpenLayers.Geometry.Point(11, 54);
point2.transform(new OpenLayers.Projection("EPSG:4326"), new OpenLayers.Projection("EPSG:900913"));
var bounds = new OpenLayers.Bounds();
bounds.extend(point1);
bounds.extend(point2);
bounds.toBBOX();
map = new OpenLayers.Map("map", {
maxExtent: bounds,
maxResolution:"auto",
maxZoomLevel: 8,
projection:"EPSG:900913",
controls: []
});
map.addLayer(new OpenLayers.Layer.OSM.Osmarender("Osmarender"));
map.zoomToMaxExtent();
//map.zoomToExtent(bounds);
GMaps2的等价物是什么?
答案 0 :(得分:2)
以下是Google Maps API 2.x,相当于将地图平移限制为预定义范围:
// Bounds for North America
var allowedBounds = new GLatLngBounds(new GLatLng(48.197218, -127.529297),
new GLatLng(28.72913, -68.818359));
function checkBounds() {
if (allowedBounds.contains(map.getCenter())) {
return;
}
var c = map.getCenter();
var x = c.lng();
var y = c.lat();
var maxX = allowedBounds.getNorthEast().lng();
var maxY = allowedBounds.getNorthEast().lat();
var minX = allowedBounds.getSouthWest().lng();
var minY = allowedBounds.getSouthWest().lat();
if (x < minX) {x = minX;}
if (x > maxX) {x = maxX;}
if (y < minY) {y = minY;}
if (y > maxY) {y = maxY;}
map.setCenter(new GLatLng(y, x));
}
GEvent.addListener(map, "move", function() { checkBounds(); });
答案 1 :(得分:0)
感谢克里斯和丹尼尔回复我。我所说的'范围'是指当缩小最大化时,世界地图不会平铺。我不想看到2个,3个甚至4个北美洲和其他大陆。世界足够大,只有一个。当我放大时,我想设置一个限制,可以放大多远来计算我们的数据分辨率。放大太远会返回我们的数据分辨率之外的结果。我确实设法通过限制缩放级别找到可接受的解决方案。无论如何,FWIW,这就是我的意思。它有点不那么冗长,但并没有完全像Daniel在他的代码中所做的那样:
//===== Restrict Zoom Levels =====
var mapTypes = map.getMapTypes();
// Overwrite the getMinimumResolution() and getMaximumResolution() methods
for (var i=0; i<mapTypes.length; i++) {
mapTypes[i].getMinimumResolution = function() {return 2;}
mapTypes[i].getMaximumResolution = function() {return 9;}
}
我仍然想尝试Daniel的代码来看看它的作用。特别感谢你花时间写这篇Dan。
- =铝