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