【问题标题】:How to set zoom multiple times with Google Maps API v3?如何使用 Google Maps API v3 设置多次缩放?
【发布时间】:2023-03-05 19:45:01
【问题描述】:

我有一个这样的谷歌地图:

var map_options = {        
    mapTypeId: google.maps.MapTypeId.ROADMAP,
    streetViewControl: false
};
var map = new google.maps.Map(mapDiv, map_options);

我执行了一个 ajax 调用,在地图上放置了一些标记,在该调用的 beforeSend 中,我根据用户选择的位置更改了地图的缩放级别。这一切都很好,花花公子..

$.ajax({
    url: myServiceUrl,
    dataType: 'jsonp',
    beforeSend: function () {                    
        setMapZoom();
    },            
    success: function (data) {
        //do work
    },
    error: function (jqXHR, textStatus, errorThrown) {
        alert(errorThrown);
    }            
});

function setMapZoom() {    
    var z_level = getMapZoomLevel(googleplace.geometry.viewport);
    map.setCenter(googleplace.geometry.location);
    map.setZoom(z_level);
}

起初这根本不起作用,因为地图 api 的调用是异步的。所以这就是我将缩放方法放在 beforeSend 中的原因。

但是,现在我的问题是它只执行一次缩放。我将地图加载到加拿大安大略省的多伦多——它以多伦多为中心并缩放到 5 级——完美。

然后我切换到美国佛罗里达州迈阿密 - 它以迈阿密为中心就好了,但它确定缩放为 9 级(而不是 5)调用 map.setZoom(9) - 但缩放保持在 5。

感谢任何反馈。 :)

谢谢!

【问题讨论】:

  • 我认为您的代码在地图仍在加载图块期间执行 setZoom(9)。
  • setMapZoom() 函数在标记被请求之前被调用..
  • 我明白了。你能给我一个你的页面的链接吗?
  • 由于保密协议,我实际上不能。是否有任何其他我可以提供的信息对您有所帮助?如果有帮助,我可以详细列出页面的工作流程。
  • jsbin.com/welcome/48301 - 它可以按我的意愿工作:/ 所以我相信 wf 在他说标记在 setZoom 期间加载时是正确的。关于如何解决这个问题有什么想法吗?跨度>

标签: google-maps google-maps-api-3 zooming


【解决方案1】:

您有所需的视口,为什么不使用它?

map.fitBounds(googleplace.geometry.viewport);

【讨论】:

  • 我试过这个。我现在相信在 jsbin 中进行设置后,第一个评论者是正确的。标记的加载时间过长。
【解决方案2】:

已解决:

事实证明.. 这里的一位程序员正在调用一些代码来清除用户定义的缩放事件监听器。他不知道这也清楚谷歌定义的听众.. :)

也许这会对将来的某人有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-15
    • 1970-01-01
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多