Как я могу получить название страны после драгенд и автозаполнения с Google Maps? - PullRequest
0 голосов
/ 21 октября 2018

Это код, который я использую:

  defaultLatLong = {
    lat: 45.4667971, 
    lng: 9.1904984
  };

  var map = new google.maps.Map(document.getElementById('map-canvas_1'), {
    center: defaultLatLong,
    zoom: 2,
    mapTypeId: 'roadmap',
    disableDefaultUI: true,
    zoomControl: true
  });

  var input = document.getElementById('location-text-box');

  var autocomplete = new google.maps.places.Autocomplete(input);

  autocomplete.bindTo('bounds', map);

  var marker = new google.maps.Marker({
    map: map,
    position: defaultLatLong,
    draggable: true,
    clickable: true
  });

  google.maps.event.addListener(marker, 'dragend', function(marker) {

    locationsArray.push(country);
    console.log(country);
    var latLng = marker.latLng;
    currentLatitude = latLng.lat();
    currentLongitude = latLng.lng();
    var latlng = {
      lat: currentLatitude,
      lng: currentLongitude
    };
    var geocoder = new google.maps.Geocoder;
    geocoder.geocode({
      'location': latlng
    }, function(results, status) {
      if (status === 'OK') {
        if (results[0]) {
          input.value = results[0].formatted_address;
        } else {
          window.alert('No results found');
        }
      } else {
        window.alert('Geocoder failed due to: ' + status);
      }
    });
  });

  autocomplete.addListener('place_changed', function() {
    var place = autocomplete.getPlace();
    if (!place.geometry) {
      return;
    }
    if (place.geometry.viewport) {
      map.fitBounds(place.geometry.viewport);
    } else {
      map.setCenter(place.geometry.location);
    }
    marker.setPosition(place.geometry.location);
    currentLatitude = place.geometry.location.lat();
    currentLongitude = place.geometry.location.lng();
  });

Я попробовал следующее, поскольку использовал его с другим кодом googlemaps, но он не работает, так как выдает ошибку:

  google.maps.event.addListener(marker, 'dragend', function(marker) {
    var country = filtered_array.length ? filtered_array[0].long_name: "";

Ошибка:

Uncaught ReferenceError: Filter_array не определен

В идеале я хотел бы получить всю информацию:

Адрес, название страны и т. Д.

Ответы [ 2 ]

0 голосов
/ 28 июня 2019

Попробуйте следующий код, чтобы получить страну, провинцию / штат и город:

geocoder.geocode({'location': latLng}, function(results, status) {
    if (status === 'OK') {
        if (results[0]) {                
            //map.setZoom(11);

            $.each(results[0].address_components, function(i, address_component){
                console.log(address_component.long_name);
                switch(address_component.types[0]){
                    case "country": {
                        console.log("Country: " + address_component.short_name);
                        break;
                    } case "administrative_area_level_1": {
                        console.log("Province/State:" + address_component.short_name);
                        break;
                    } case "administrative_area_level_2": {
                        console.log("City: " + address_component.short_name);
                        break;
                    }
                }
            });
        } else {
            window.alert('No results found');
        }
    } else {
        window.alert('Geocoder failed due to: ' + status);
    }
});
0 голосов
/ 21 октября 2018

Получил свой ответ.Так как я использую autocomplete и dragend, нам нужно loop с результатами после обратного вызова:

Так что найдите в коде, размещенном в вопросе для драже input.value = results[0].formatted_address;, и выполните:

var arrAddress = results[0].address_components;
$.each(arrAddress, function (i, address_component) {
  console.log(address_component.long_name); // here's your town name
});

А затем для автозаполнения найдите currentLongitude = place.geometry.location.lng();, а затем выполните

var arrAddress = place.address_components;
$.each(arrAddress, function (i, address_component) {
  console.log(address_component.long_name);
});

Теперь все детали адреса можно сохранить в разных inputs или vars

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...