如何获得地址从晚和液化天然气

How to get address from lat and lng?

本文关键字:天然气 何获得 地址      更新时间:2023-09-26

我有两套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);
        }

在这,后期&局域网得到正确。但是地址并不存储在变量中。错在哪里?

我正在使用这种方法,它对我来说是完美的。请过目一下。

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;
    }

这里Google geocode是 asynchonous 类型的函数调用。

从文档:

访问地理编码服务是异步的,因为Google地图API需要调用外部服务器。因此,你需要传递回调方法以在完成时执行请求。这个回调方法处理结果。请注意Geocoder可以返回多个结果。

所以你不能像那样得到地址,而是使用常用的方法叫做 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