如何动态设置谷歌地图自定义缩放级别?

时间:2010-03-11 12:02:11

标签: google-maps

我正在使用谷歌地图。根据要求,我需要设置不同的缩放级别,这取决于我的搜索查询。如果国家/地区的地图上有多个位置,那么地图应该关注国家/地区。其他情况是,如果城市中标记了不同的位置,那么地图应该集中在城市级别。

3 个答案:

答案 0 :(得分:5)

var geoCoder = new GClientGeocoder();
geoCoder.setViewport(map.getBounds());
geoCoder.getLocations('searchquery', function(latlng) {
  if( latlng.Placemark.length > 0 ) {
    var box = latlng.Placemark[0].ExtendedData.LatLonBox;
    var bounds = new GLatLngBounds(new GLatLng(box.south, box.west), new GLatLng(box.north, box.east));
    var center = new GLatLng(box.Placemark[0].Point.coordinates[1], latlng.Placemark[0].Point.coordinates[0]);
    var zoom = oMap.getBoundsZoomLevel(bounds);
    map.setCenter(center, zoom);
  }
});

我认为这对你的关键部分是

//box is a LatLonBox with the size of your resultquery. You can create this yourself as well
var box = latlng.Placemark[0].ExtendedData.LatLonBox;

//bounds are the bounds of the box
var bounds = new GLatLngBounds(new GLatLng(box.south, box.west), new GLatLng(box.north, box.east));

//center is the center of the box, you want this as the center of your screen
var center = new GLatLng(box.Placemark[0].Point.coordinates[1], latlng.Placemark[0].Point.coordinates[0]);

//zoom is the zoomlevel you need for all this
var zoom = oMap.getBoundsZoomLevel(bounds);

//the actual action
map.setCenter(center, zoom);

答案 1 :(得分:0)

我发现以下文章非常有帮助。使用代码示例代码我可以实现enter link description here这个。

我在drupal中尝试了代码并且它正在运行。

答案 2 :(得分:0)

执行搜索后,一旦获得了位置,就可以使用bounds.extendmap.fitBounds,以便地图自动缩放以显示搜索返回的所有图钉,如下所示:

    //places is an array that contains the search result
    var bounds = new google.maps.LatLngBounds();
    for (var i = 0, place; place = places[i]; i++) {
      //pass the location of each place to bounds.extend
      bounds.extend(place.geometry.location);
    }
    //tell your map to sets the viewport to contain all the places.
    map.fitBounds(bounds);

另一方面,如果您使用地理编码器搜索邮政编码,城市或国家/地区等区域,您还可以使用map.fitBounds设置视口以显示已返回的整个特定区域由地理编码器,像这样:

//response is the geocoder's response
map.fitBounds(response[0].geometry.viewport);

这是带有地理编码器示例https://codepen.io/jaireina/pen/gLjEqY

的codepen