Как поменять геокод с карты? - PullRequest
0 голосов
/ 09 декабря 2018

Я использую листовку для отображения маркеров на карте, когда я click на marker, я получаю lat и lng, затем отправляю их на Геокодер карт Google , чтобы получить имя адреса:

var markerCoords = [];
circle.on('click', function (e) {
    var curPos = e.target.getLatLng();
    markerCoords.push(curPos.lng);
    markerCoords.push(curPos.lat);
    geocodeLatLng();
});

    var geocoder = new google.maps.Geocoder;
    function geocodeLatLng(geocoder) {
      var latlng = {lat: parseFloat(markerCoords[1]), lng: parseFloat(markerCoords[0])};
      geocoder.geocode({'location': latlng}, function(results, status) {
        if (status === 'OK') {
          if (results[0]) {
            console.log(results[0].formatted_address);
          } else {
            window.alert('No results found');
          }
        } else {
          window.alert('Geocoder failed due to: ' + status);
        }
      });
    }

Но это дает мне:

Cannot read property 'geocode' of undefined

ПРИМЕЧАНИЕ

Эта строка в порядке

var latlng = {lat: parseFloat(markerCoords[1]), lng: parseFloat(markerCoords[0])};

Как будто я делаю console.log, я получаю правильные lat и lng

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

В вашем коде есть опечатка.Вы не передаете ссылку на геокодер в функцию geocodeLatLng, поэтому она null внутри функции:

var markerCoords = [];
circle.on('click', function (e) {
    var curPos = e.target.getLatLng();
    markerCoords.push(curPos.lng);
    markerCoords.push(curPos.lat);
    geocodeLatLng(geocoder);  // <============================================== **here**
});

var geocoder = new google.maps.Geocoder;
function geocodeLatLng(geocoder) { 
  var latlng = {lat: parseFloat(markerCoords[1]), lng: parseFloat(markerCoords[0])};
  geocoder.geocode({'location': latlng}, function(results, status) {
  // ... code to process the result
  });
}
0 голосов
/ 09 декабря 2018

Вероятно, это связано с тем, что Google API еще не загружен, вы можете попробовать загрузить его перед другими скриптами, чтобы убедиться, что отметили console.log("google api object is", geocoder) и Geocode, чтобы проверить, загрузился ли Google перед вызовом API.Редактировать: вам не нужен геокодер в качестве параметра в функции geocodeLatLng, как указывает @geocodezip, он будет неопределенным, если вы его не передадите.Поскольку параметр будет иметь приоритет над внешней областью, когда имена переменных совпадают.

Следующая процедура даст вам адрес текущей позиции пользователя, вы можете передать любой lat, lng и получить его адрес: -

//getting location address from latitude and longitude with google api
    navigator.geolocation.getCurrentPosition(success, error);
        function success(position) {
                var lat = position.coords.latitude;
                var long = position.coords.longitude;
                var geocoder = new google.maps.Geocoder;
                console.log("google api object is", geocoder)                
                var latlng = { lat: lat, lng: long };
                geocoder.geocode({ 'location': latlng }, function (results, status) {

                    if (status === 'OK') {
                        if (results[0]) {

                       console.log(results[0].formatted_address);// this will be actual full address
                        } else {
                            alert('No results found');
                        }
                    } else {
                        alert('Geocoder failed due to: ' + status);

                    }
                });

        }


        function error(err) {
            alert("Allow location services!");
        }
...