Javascript 如何使用地图反转地理编码?

Javascript 如何使用地图反转地理编码?,javascript,jquery,google-maps,leaflet,google-geocoder,Javascript,Jquery,Google Maps,Leaflet,Google Geocoder,我正在使用传单在地图上显示标记,当我单击标记时,我得到它的lat和lng,然后我将它们发送到谷歌地图地理编码器以检索地址名: var markerCoords = []; circle.on('click', function (e) { var curPos = e.target.getLatLng(); markerCoords.push(curPos.lng); markerCoords.push(curPos.lat); geocodeLatLng();

我正在使用传单在地图上显示标记,当我
单击
标记
时,我得到它的
lat
lng
,然后我将它们发送到谷歌地图地理编码器以检索地址名:

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);
        }
      });
    }
但它给了我:

注意

这条线很好

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

就像我做console.log一样,我得到了正确的
lat
lng

这可能是因为google api还没有加载,你可以尝试在其他脚本之前加载它,确保在调用api之前检查
console.log(“google api对象是”,geocoder)
并检查Geocode以验证google是否加载了。 编辑:您不需要geocoder作为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!");
        }

您的代码中有一个输入错误。您没有将对地理编码器的引用传递到
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
  });
}
var-markerCoords=[];
在('click',函数(e)上画圆圈{
var curPos=e.target.getLatLng();
markerCoords.push(curPos.lng);
markerCoords.push(当前位置横向);
地理编码器LATLNG(地理编码器)//
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
  });
}