好吧,我决定在此期间采用的一种解决方案是将zoom-end 处理程序附加到我的ArcGIS 地图(也可以使用Leaflet 轻松完成),并将maptypeid_changed 处理程序附加到Google 地图。
所以,对于 ArcGIS 地图 (eMap),我这样做了:
eMap.on('zoom-end', function (e) {
// map zooms are synced
gMap.setCenter(esri.geometry.webMercatorToGeographic(e.extent.getCenter()));
gMap.setZoom(e.level);
// if the google map couldn't do it, reset eMap
if (gMap.getZoom() !== e.level) {
eMap.setZoom(gMap.getZoom());
// runs the handler again
}
});
如果 google 地图设置为 Satellite,然后发生变化,它也需要触发相同的检查,所以我强制它执行另一个 zoomEnd 处理程序:
google.maps.event.addListener(gMap, 'maptypeid_changed', function () {
// for some reason, ESRI has issues setting zoom to current zoom
// so it has to run an initial check before calling zoomEnd
if (gMap.getZoom() !== eMap.getZoom()) {
eMap.setZoom(gMap.getZoom());
}
});
希望这对某人有所帮助,但实际上,我期待看到比这更好的解决方案。如果 Google 的地图类型无法达到某个缩放级别,这似乎是一种非常复杂的方法,仅触发一个函数。