如何从lat和lng获取地址?

时间:2014-03-25 11:41:13

标签: javascript google-maps

我有两套lat和lng。

我想要两个地址并存储在一些变量中:

var geocoder = new google.maps.Geocoder();
        for(var i=0; i<json_devices.length; i++)
        {
            var lat = json_devices[i].latitude;
            var lng = json_devices[i].longitude;
            console.log(lat);
            console.log(lng);
            var latlng =  new google.maps.LatLng(lat,lng);
            geocoder.geocode({'latLng': latlng}, function(results, status) {
             if (status == google.maps.GeocoderStatus.OK) {
              if (results[1]) {
                address=results[1].formatted_address;
                   } else {
                    alert('No results found');
                  }
                } else {
                  alert('Geocoder failed due to: ' + status);
                }
            });
            console.log(address);
        }

在此,lat&amp; lan得到正确。但地址不存储在变量中。这是什么错误?

2 个答案:

答案 0 :(得分:0)

我正在使用这种方法,它对我来说非常适合。 请看一下。

public String getAddressFromLatLong(GeoPoint point) { 
        String address = "Address Not Found";
        Geocoder geoCoder = new Geocoder(
                getBaseContext(), Locale.getDefault());
        try {
            List<Address> addresses = geoCoder.getFromLocation(
                    point.getLatitudeE6()  / 1E6, 
                    point.getLongitudeE6() / 1E6, 1);

            if (addresses.size() > 0) {
                            address =addresses.get(0).getAddressLine(0);
                if(address.length()<=0)
                address =addresses.get(0).getSubLocality();
                 }
        }
        catch (Exception e) {                
            e.printStackTrace();
             }   
        return address;
    }

答案 1 :(得分:0)

此处Google地理编码是 asynchonous 类型的函数调用。

来自DOCS

  

自谷歌地图以来,访问地理编码服务是异步的   API需要调用外部服务器。出于这个原因,你   需要传递一个回调方法来完成后执行   请求。此回调方法处理结果。请注意   地理编码器可能会返回多个结果。

因此,您无法获得此类地址,而是使用名为 callback 的常用方法。

我在这里创建了一个示例代码来解释这个过程,可以自己修改。

var geocoder;

function codeLatLng(callback) {
    geocoder = new google.maps.Geocoder();
    var input = document.getElementById("latlng").value;
    var latlngStr = input.split(",", 2);
    var lat = parseFloat(latlngStr[0]);
    var lng = parseFloat(latlngStr[1]);
    var latlng = new google.maps.LatLng(lat, lng);
    geocoder.geocode({
        'latLng': latlng
    }, function (results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            if (results[1]) {
                address = results[1].formatted_address;
                callback(address);
            } else {
                alert("No results found");
            }
        } else {
            alert("Geocoder failed due to: " + status);
        }
    });
}

$('input[type="button"]').on('click', function () {
    codeLatLng(function (address) { //function call with a callback
        console.log(address);  // THE ADDRESS WILL BE OBTAINED
    })
});

JSFIDDLE