我在一个卫星mapType基本地图上显示一个ImageMapType作为叠加层。 基本地图似乎将我的区域中的最大缩放限制为19,如果我更改为Road mapType,我会得到更多级别。我有高分辨率的想象,我在叠加层中显示,我希望能够进一步放大。如果我使用ImageMapType作为基本地图,我可以放大我需要的所有内容,但我真的想显示卫星基础地图,然后继续放大图像,即使没有可用的卫星图像。 有没有办法实现这个?我唯一能想到的是创建一个自定义基本地图。
代码类似于此示例https://developers.google.com/maps/documentation/javascript/examples/maptype-image-overlay
谢谢!
我的代码:
var mapMinZoom = 10;
var mapMaxZoom = 25;
var zoom = 20;
function initialize() {
map = new google.maps.Map(document.getElementById('map-canvas'), {
center: new google.maps.LatLng(-34.567426059726316, -60.34467143006623),
zoom: zoom,
mapTypeId: google.maps.MapTypeId.SATELLITE,
panControl: false,
streetViewControl: false,
maxZoom: mapMaxZoom
});
createImageLayer('imaginery', 'images')
}
function createImageLayer(key, folder) {
var mapBounds = new google.maps.LatLngBounds(new google.maps.LatLng(-34.55771388565057, -60.367219001054764), new google.maps.LatLng(-34.55817334541287, -60.3209562599659));
var imageMapTypeLayer = new google.maps.ImageMapType({
minZoom: mapMinZoom,
maxZoom: mapMaxZoom,
name: key,
getTileUrl: function(coord, zoom) {
if ((zoom < mapMinZoom) || (zoom > mapMaxZoom)) {
return "http://www.maptiler.org/img/none.png";
}
var ymax = 1 << zoom;
var y = ymax - coord.y -1;
var tileBounds = new google.maps.LatLngBounds(
map.getProjection().fromPointToLatLng( new google.maps.Point( (coord.x), (coord.y) ) ),
map.getProjection().fromPointToLatLng( new google.maps.Point( (coord.x), (coord.y)))
);
// write a real condition here, so long this is always valid
if (tileBounds.intersects(tileBounds)) {
return "/static/ui/"+ folder + "/"+zoom+"/"+coord.x+"/"+y+".png";
} else {
return "http://www.maptiler.org/img/none.png";
}
},
tileSize: new google.maps.Size(256, 256)
});
map.overlayMapTypes.push(imageMapTypeLayer)
}
编辑1 : 到目前为止,我已经设法通过监听zoom_changed事件并在缩放达到最大值时将基本地图更改为我的imageMapType并在用户缩小时将其更改回卫星。我想知道这个问题是否有更清洁的解决方案。