如何在PhoneGap中通过经纬度获取城市名称?

11
我可以从当前纬度和经度中获取完整地址,但是如何仅从完整地址中获取城市名称?以下是我的代码。

我可以从当前纬度和经度中获取完整地址,但是如何仅从完整地址中获取城市名称?以下是我的代码。

var geocoder;
geocoder = new google.maps.Geocoder();
var latlng = new google.maps.LatLng(latitude, longitude);
//alert("Else loop" + latlng);
geocoder.geocode({
    'latLng': latlng
}, function(results, status) {
    //alert("Else loop1");
    if (status == google.maps.GeocoderStatus.OK) {
        if (results[0]) {
            var add = results[0].formatted_address;
            alert("Full address is: " + add);
        } else {
            alert("address not found");
        }
    } else {
        //document.getElementById("location").innerHTML="Geocoder failed due to: " + status;
        //alert("Geocoder failed due to: " + status);
    }
});

可能是重复的问题:如何使用纬度和经度获取位置名称或城市?(https://dev59.com/cmUo5IYBdhLWcg3w7TCT) - Anto Jurković
6个回答

15
var geocoder;
geocoder = new google.maps.Geocoder();
var latlng = new google.maps.LatLng(latitude, longitude);

geocoder.geocode(
    {'latLng': latlng}, 
    function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
                if (results[0]) {
                    var add= results[0].formatted_address ;
                    var  value=add.split(",");

                    count=value.length;
                    country=value[count-1];
                    state=value[count-2];
                    city=value[count-3];
                    alert("city name is: " + city);
                }
                else  {
                    alert("address not found");
                }
        }
         else {
            alert("Geocoder failed due to: " + status);
        }
    }
);

使用“,”作为分隔符来拆分完整地址并获取城市名称。


6

一个干净的示例,用于从纬度和经度获取位置并解析结果。基于Google Reverse Geocoding

 var geocodingAPI = "https://maps.googleapis.com/maps/api/geocode/json?latlng=23.714224,78.961452&key=YOUR_SERVER_API_KEY";

 $.getJSON(geocodingAPI, function (json) {
     if (json.status == "OK") {
         //Check result 0
         var result = json.results[0];
         //look for locality tag and administrative_area_level_1
         var city = "";
         var state = "";
         for (var i = 0, len = result.address_components.length; i < len; i++) {
             var ac = result.address_components[i];
            if (ac.types.indexOf("administrative_area_level_1") >= 0) state = ac.short_name;
         }
         if (state != '') {
             console.log("Hello to you out there in " + city + ", " + state + "!");
         }
     }

 });

你觉得在这段代码中如何找到城市? 我认为应该通过 administrative_area_level_2。 - gagangupt16

2

您可以在此处查找文档:

https://developers.google.com/maps/documentation/geocoding/?hl=fr#ReverseGeocoding

但是,您可以在不对对象进行拆分的情况下查看“结果”中的城市项目。

因此,您可以执行以下操作:

country=results[0]['address_components'][6].long_name;
state=results[0]['address_components'][5].long_name;
city=results[0]['address_components'][4].long_name;

请注意,数字“4,5,6”可能因国家而异。所以最好这样测试:

使用Google反向地理编码获取街道、城市和国家


1
这是我正在做的方式。害怕使用逗号分隔符。
function ReverseGeoToCity(lat, lng, callback) {
    var latlng = new google.maps.LatLng(lat, lng);
    geocoder.geocode({'latLng': latlng}, function(results, status) {
    if (status == google.maps.GeocoderStatus.OK) {
      if (results[1]) {
            var properName = ", ";

            for(i=0; i<results[1].address_components.length; i++){
                if (results[1].address_components[i].types[0] == "locality")
                    properName = results[1].address_components[i].short_name + properName;
                if (results[1].address_components[i].types[0] == "administrative_area_level_1")
                    properName += results[1].address_components[i].short_name;
            }

            callback(properName);
      } else {
          alert('No results found');
      }
    } else {
        alert('Geocoder failed due to: ' + status);
    }
    });
}

1
请看谷歌逆地理编码
http://maps.google.com/maps/api/geocode/xml?latlng=YourLatitude,YourLongitude&sensor=false&key=API_KEY

这已经被问过了,这里

0
以下代码将帮助您从纬度和经度获取城市名称:
 var url = "https://maps.googleapis.com/maps/api/geocode/json?latlng="+lat+","+long+"&key=KEY_HERE&sensor=false";
        $.get(url, function(data) {
        var results = data.results;
            if (data.status === 'OK') 
            {
                //console.log(JSON.stringify(results));
                if (results[0]) 
                {
                    var city = "";
                    
                   var address_components = results[0].address_components;
                    
                    for (var i = 0; i < address_components.length; i++) 
                    {  state = address_components[i].long_name;    
                        }
                        if (address_components[i].types[0] === "locality" && address_components[i].types[1] === "political" ) {                                
                            city = address_components[i].long_name;   
                        }
                    }
                    alert("CITY : " + city );
               } 
               else 
               {
                   window.alert('No results found');
               }
            } 
            else 
            {
                window.alert('Geocoder failed due to: ' + status);
            
            }
        });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接