Как динамически установить пользовательский уровень масштабирования карты Google? - PullRequest
3 голосов
/ 11 марта 2010

Я работаю с Google Map. В соответствии с требованиями, мне нужно установить другой уровень масштабирования, который зависит от моего поискового запроса. Если на карте есть несколько мест в стране, тогда карта должна фокусировать страну. Другой сценарий: если в городе отмечены разные места, карта должна быть ориентирована на уровень города.

Ответы [ 3 ]

5 голосов
/ 11 марта 2010
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);
0 голосов
/ 13 декабря 2016

После выполнения поиска, когда у вас есть местоположения, вы можете использовать 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

0 голосов
/ 24 июля 2012

Я нашел следующую статью очень полезной. используя пример кода, я могу достичь введите описание ссылки здесь это.

Я попробовал код в drupal, и он работает.

...