Отображение карты Google, которая показывает выбранный адрес

#jquery #api #google-maps

#jquery #API #google-карты

Вопрос:

Итак, пользователь выбирает страну, затем с помощью виджетов автозаполнения они могут выбрать район, город и область, в которых они живут. Выбранные ими значения объединяются в адрес, который следует использовать для вызова Google Maps API и отображения карты, на которой отмечен адрес… К сожалению, это не работает… Я получаю это исключение в Firebug:

неперехваченное исключение: [Исключение… «Компонент вернул код ошибки: 0x80004005 (NS_ERROR_FAILURE) [nsIDOMViewCSS.getComputedStyle]» nsresult: «0x80004005 (NS_ERROR_FAILURE)» местоположение: «JS frame ::http://maps.gstatic.com/intl/en_us/mapfiles/api-3/4/11a/main.js :: Xk :: строка 55″ данные: нет]

Вот мой код:

тег скрипта с этим src="http://maps.google.com/maps/api/js?sensor=false"

 var address = selectedArea   ', '   selectedCity   ', '   selectedDistrict   ', Lebanon';

var geocoder = new google.maps.Geocoder();
geocoder.geocode({ 'address': address }, function (results, status) {
    if (status == google.maps.GeocoderStatus.OK) {
        var map = new google.maps.Map($("#addressMap"));
        map.setCenter(results[0].geometry.location);
        var marker = new google.maps.Marker({
            map: map,
            position: results[0].geometry.location
        });
    } else {
        alert("Geocode was not successful for the following reason: "   status);
    }
});
  

Итак, что происходит?

Ответ №1:

При создании объекта map вы предоставляете объект jQuery, но он исключает объект DOM. Попробуйте сам объект DOM.

Я также добавил некоторые параметры, уровень масштабирования и тип карты.

Вот окончательный код:

 var address = selectedArea   ', '   selectedCity   ', '   selectedDistrict   ', Lebanon';

var geocoder = new google.maps.Geocoder();
geocoder.geocode({ 'address': address }, function (results, status) {
    if (status == google.maps.GeocoderStatus.OK) {
        var mapOptions = { zoom: 8, mapTypeId: google.maps.MapTypeId.ROADMAP };
        var map = new google.maps.Map(document.getElementById('addressMap'), mapOptions);
        map.setCenter(results[0].geometry.location);
        var marker = new google.maps.Marker({
            map: map,
            position: results[0].geometry.location
        });
    } else {
        alert("Geocode was not successful for the following reason: "   status);
    }
});
  

Комментарии:

1. Идеально! Сработало именно так, как я хотел! Спасибо 🙂

2. У меня создалось впечатление, что document.getElementById(‘addressMap’) был эквивалентен $ (‘div#addressMap’). Очевидно, что нет. Спасибо, что помогли мне.

3. @AdamWaite document.getElementById() возвращает объект DOM, $() возвращает объект jQuery.

4. вы всегда можете выполнить .get(0) для объекта jQuery, чтобы получить (первый) элемент DOM.