Google MAP API v3:居中和放大显示的标记

IT技术 javascript jquery google-maps-api-3
2021-02-23 03:44:04

我使用以下代码在我的地图上设置标记:

  var latLngs = []
  $.each(locations.markers, function(i, m){
   var myLatLng = new google.maps.LatLng(m.latitude, m.longitude);
   latLngs[i] = myLatLng                                          
   var marker = new google.maps.Marker({
    position: myLatLng,
    map: map,
    shadow: shadow,
    icon: image,
    shape: shape,
    title: m.city,
    zIndex: i
   });
  }) 

标记出现在我的地图上。现在我想在这些标记上居中和缩放地图。我怎样才能做到这一点?我努力了:

map.fitBounds(getBoundsForLatLngs(latLngs));

latLngs 的 console.log 给出:

 [(46.793182, 7.146903) { b=46.793182,  more...}, (46.8077779, 7.1709386) { b=46.8077779,  more...}]

但它似乎不起作用,并且我在控制台中没有收到任何错误。我究竟做错了什么?

4个回答

我还发现此修复程序可以缩放以适合所有标记

LatLngList:latLng实例的数组,例如:

// "map" is an instance of GMap3

var LatLngList = [
                     new google.maps.LatLng (52.537,-2.061), 
                     new google.maps.LatLng (52.564,-2.017)
                 ],
    latlngbounds = new google.maps.LatLngBounds();

LatLngList.forEach(function(latLng){
   latlngbounds.extend(latLng);
});

// or with ES6:
// for( var latLng of LatLngList)
//    latlngbounds.extend(latLng);

map.setCenter(latlngbounds.getCenter());
map.fitBounds(latlngbounds); 
这将地图集中在一个点上 我想将地图集中在所有显示的点上
2021-04-22 03:44:04
它起作用了,我不得不像你的例子一样使用 LatLngBounds。我将数组直接传递给fitBounds(). 谢谢你的快速支持
2021-04-23 03:44:04
@Protectorone - 我几年前已经回答过,但我真的不记得了,但我试图弄清楚并用其他数据更新了答案。
2021-04-30 03:44:04
2021-05-08 03:44:04
什么样的数组latlng它是怎么得到这个each功能的?查询?
2021-05-12 03:44:04

如果您更喜欢更实用的风格:

// map - instance of google Map v3
// markers - array of Markers
var bounds = markers.reduce(function(bounds, marker) {
    return bounds.extend(marker.getPosition());
}, new google.maps.LatLngBounds());

map.setCenter(bounds.getCenter());
map.fitBounds(bounds);

试试这个功能......它有效......

$(function() {
        var myOptions = {
            zoom: 10,
            center: latlng,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        var map = new google.maps.Map(document.getElementById("map_canvas"),myOptions);
        var latlng_pos=[];
        var j=0;
         $(".property_item").each(function(){
            latlng_pos[j]=new google.maps.LatLng($(this).find(".latitude").val(),$(this).find(".longitude").val());
            j++;
            var marker = new google.maps.Marker({
                position: new google.maps.LatLng($(this).find(".latitude").val(),$(this).find(".longitude").val()),
                // position: new google.maps.LatLng(-35.397, 150.640),
                map: map
            });
        }
        );
        // map: an instance of google.maps.Map object
        // latlng: an array of google.maps.LatLng objects
        var latlngbounds = new google.maps.LatLngBounds( );
        for ( var i = 0; i < latlng_pos.length; i++ ) {
            latlngbounds.extend( latlng_pos[ i ] );
        }
        map.fitBounds( latlngbounds );



    });

用于显示标记的中心和自动缩放

// map: an instance of google.maps.Map object

// latlng_points_array: an array of google.maps.LatLng objects

var latlngbounds = new google.maps.LatLngBounds( );

    for ( var i = 0; i < latlng_points_array.length; i++ ) {
        latlngbounds.extend( latlng_points_array[i] );
    }

map.fitBounds( latlngbounds );