Подтвердить что ты не робот

Как заставить API Карт Google установить правильный уровень масштабирования для страны?

Существует ли автоматическая установка уровня масштабирования в зависимости от размера страны, на которой была сосредоточена карта?

maps.google.com делает именно то, что мне нужно, так что, например, если я ищу Россию, я получаю такой масштаб, что Россия просто подходит на экране, а когда я ищу Кубу, я получаю более высокий масштаб, поэтому что Куба просто подходит.

Есть ли способ предоставить Maps Api местоположение страны и получить соответствующий уровень масштабирования.

Если нет, я предполагаю, что мне придется вручную (тьфу!) создать свою собственную таблицу для этой информации. Или эта информация свободно доступна где-то?

4b9b3361

Ответ 1

Для 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);

На приведенных ниже снимках экрана показаны результаты использования вышеуказанной техники при поиске России и Кубы:

Zoom on Russia and Cuba

Ответ 2

Для 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);
      }
    });

Ответ 3

Если вы не хотите использовать клиента геокодирования из Google, из-за ограничений использования вы можете использовать свой собственный список. Вы можете получить один из этого github repo.

Вот пример кода с использованием функции jQuery getJSON и API google maps v3:

    function initialize() {
      // read the list of countries
     $.getJSON('countries.json', function (countries) {

         // will use the country with index 40 (Cyprus)
         var index_country = 40;
         var myOptions = {
             center: new google.maps.LatLng(
                 countries[index_country].center_lat,
                 countries[index_country].center_lng),
         }
         var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

         // set the bounds of the map
         var bounds = new google.maps.LatLngBounds(
             new google.maps.LatLng(countries[index_country].sw_lat, countries[index_country].sw_lng),
             new google.maps.LatLng(countries[index_country].ne_lat, countries[index_country].ne_lng) );

         map.fitBounds(bounds);
     });
 }

Ответ 4

Если вы не используете google maps api и просто используете их геокодирование, вы можете использовать эту формулу:

var url = 'http://maps.google.com/maps/geo?q=YOUR_QUERY&output=json&oe=utf8&sensor=false&key=YOUR_KEYback=geoCodeDone';
jQuery.getScript(url);


function geoCodeDone(data)
{
    if (data.Status.code == 200)
    {
        lng = data.Placemark[0].Point.coordinates[0];
        lat = data.Placemark[0].Point.coordinates[1];

        var east  = data.Placemark[0].ExtendedData.LatLonBox.east;
        var west  = data.Placemark[0].ExtendedData.LatLonBox.west;

        var zoom = 11 - Math.round(Math.log(Math.abs(west-east))/Math.log(2));
    }
}