如何让Google Maps API为某个国家/地区设置正确的缩放级别?

kri*_*naz 39 javascript google-maps

是否有根据地图居中的国家/地区的大小自动设置缩放级别?

maps.google.com正是我所需要的,所以,例如,如果我搜索俄罗斯,我会得到一个缩放级别,以便俄罗斯适合屏幕,当我搜索古巴时,我得到更高的缩放级别,以便古巴只是适合.

是否有某种方法可以为地图Api提供国家/地区位置并获得适当的缩放级别.

如果没有,我想我必须手动(呃!)创建我自己的表来获取这些信息.或者这些信息可以在某处免费获得?

Mah*_*h M 60

对于V3,这段代码对我有用:

var geocoder = new google.maps.Geocoder();
   geocoder.geocode( { 'address': address}, function(results, status) {
      if (status == google.maps.GeocoderStatus.OK) {
        map.setCenter(results[0].geometry.location);
        map.fitBounds(results[0].geometry.viewport);
      }
    });
Run Code Online (Sandbox Code Playgroud)

  • 工作得很完美.感谢您添加V3的更新版本.非常感激. (3认同)
  • 大.适用于任何地方.城市,省,国家等 (2认同)

Dan*_*llo 46

对于API v3,请查看以下答案.

您可以使用Google Maps 客户端地理编码器获取该国家/地区的边界框,如下例所示:

// API version 2
var geocoder = new GClientGeocoder();

geocoder.getLocations("Russia", function (locations) { 

    var north = locations.Placemark[0].ExtendedData.LatLonBox.north;
    var south = locations.Placemark[0].ExtendedData.LatLonBox.south;
    var east  = locations.Placemark[0].ExtendedData.LatLonBox.east;
    var west  = locations.Placemark[0].ExtendedData.LatLonBox.west;

    var bounds = new GLatLngBounds(new GLatLng(south, west), 
                                   new GLatLng(north, east));

    map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
});

// API version 3
// ... set north, south, east and west ...
var bounds = new google.maps.LatLngBounds(new google.maps.LatLng(south, west), 
                                          new google.maps.LatLng(north, east));
map.fitBounds(bounds);
Run Code Online (Sandbox Code Playgroud)

下面的屏幕截图显示了搜索俄罗斯和古巴时上述技术的结果:

放大俄罗斯和古巴

  • 非常好,非常感谢.我在GWT工作,它还无法访问ExtendedData,所以我不得不创建一些JSNI方法来做到这一点.让我有一段时间的事情是:确保在调用getBoundsZoomLevel时地图是可见的,否则它会返回零的缩放级别. (2认同)
  • 我正在看api而且我没有看到(目前)用V3做这件事的方法.我也想为一个城市做这件事. (2认同)