78

我有这个呈现地图的代码。

function initialize() {
    var myOptions = {
      center: new google.maps.LatLng(45.4555729, 9.169236),
      zoom: 13,
      mapTypeId: google.maps.MapTypeId.ROADMAP,

panControl: true,
mapTypeControl: false,
panControlOptions: {
            position: google.maps.ControlPosition.RIGHT_CENTER
        },
zoomControl: true,
zoomControlOptions: {
    style: google.maps.ZoomControlStyle.LARGE,
    position: google.maps.ControlPosition.RIGHT_CENTER
},
scaleControl: false,
streetViewControl: false,
streetViewControlOptions: {
    position: google.maps.ControlPosition.RIGHT_CENTER
            }
        };
    var map = new google.maps.Map(document.getElementById("mapCanvas"),
        myOptions);



var Item_1 = new google.maps.LatLng(45.5983128 ,8.9172776);

var myPlace = new google.maps.LatLng(45.4555729, 9.169236);

var marker = new google.maps.Marker({
    position: Item_1, 
    map: map});

var marker = new google.maps.Marker({
    position: myPlace, 
    map: map});

var bounds = new google.maps.LatLngBounds(myPlace, Item_1);
map.fitBounds(bounds);

    }

即使这两点距离 25 公里,我也会得到这个结果:

在此处输入图像描述

虽然我想渲染更高级别的缩放。

像这样

在此处输入图像描述

我使用方法fitBounds()

    var bounds = new google.maps.LatLngBounds(myPlace, Item_1);
    map.fitBounds(bounds);

谢谢你的支持

4

4 回答 4

160

发生这种情况是因为LatLngBounds()没有将两个任意点作为参数,而是 SW 和 NE 点

.extend()在空边界对象上使用该方法

var bounds = new google.maps.LatLngBounds();
bounds.extend(myPlace);
bounds.extend(Item_1);
map.fitBounds(bounds);

演示在http://jsfiddle.net/gaby/22qte/

于 2012-04-22T13:03:39.213 回答
32

LatLngBounds必须按(西南、东北)顺序定义点。您的积分不是按这个顺序排列的。

一般的解决方法,特别是如果你不知道这些点肯定会按照这个顺序,是扩展一个空边界:

var bounds = new google.maps.LatLngBounds();
bounds.extend(myPlace);
bounds.extend(Item_1);
map.fitBounds(bounds);

API 将整理界限。

于 2012-04-22T13:05:39.063 回答
25

尽管我正在按照上面的建议构建我的 LatLngBounds,但我遇到了与您描述的相同的问题。问题是事情是异步的,map.fitBounds()在错误的时间调用可能会给你留下像 Q 一样的结果。我发现最好的方法是将调用放在一个空闲的处理程序中,如下所示:

google.maps.event.addListenerOnce(map, 'idle', function() {
    map.fitBounds(markerBounds);
});
于 2014-01-16T08:53:30.423 回答
9
 var map = new google.maps.Map(document.getElementById("map"),{
                mapTypeId: google.maps.MapTypeId.ROADMAP

            });
var bounds = new google.maps.LatLngBounds();

for (i = 0; i < locations.length; i++){
        marker = new google.maps.Marker({
            position: new google.maps.LatLng(locations[i][1], locations[i][2]),
            map: map
        });
bounds.extend(marker.position);
}
map.fitBounds(bounds);
于 2016-06-04T09:22:06.553 回答