我想从经度和纬度获取城市名称。 我正在使用以下代码,但它返回整个地址,包括城市名称,邮政编码,省份和国家/地区。 我只想要城市名称。
$.ajax({ url:'http://maps.googleapis.com/maps/api/geocode/json?latlng='+position.coords.latitude+','+position.coords.longitude+'&sensor=true',
success: function(data){
alert(data.results[4].formatted_address);
}
});
请查看地理编码的结果
{
"long_name" : "Vancouver",
"short_name" : "Vancouver",
"types" : [ "locality", "political" ]
},
答案 0 :(得分:6)
由于API中数据类型的性质,formatted_address总是会返回一个完整的地址字符串。您需要直接引用address_components数组中的位置类型。
因此,例如,您需要在返回的address_components数组中搜索位置类型:
for (var i = 0; i < data.results[4].address_components.length; i++) {
for (var j = 0; j < data.results[4].address_components[i].types.length; j++) {
if(data.results[4].address_components[i].types[j] == 'locality') {
var city_name = data.results[4].address_components[i].long_name;
alert(city_name);
}
}
}
答案 1 :(得分:0)
我遇到了一个问题,并不是所有地方都有结果[4],所以我循环了所有地方。
url = "http://maps.googleapis.com/maps/api/geocode/json?latlng="+lat+","+lng+"&sensor=true";
$.ajax(url).done(function(data) {
for (var i = 0; i < data.results.length; i++) {
for (var j = 0; j < data.results[i].address_components.length; j++) {
for (var k = 0; k < data.results[i].address_components[j].types.length; k++) {
if (data.results[i].address_components[j].types[k] === 'locality') {
var city_name = data.results[i].address_components[j].long_name;
}
}
}
}
}
注意:这也是自原始帖子以来使用更新jQuery AJAX语法..
答案 2 :(得分:0)
您需要检查一些变量以确保代码适用于每个职位,即使地点/城市不存在:
var url = 'http://maps.googleapis.com/maps/api/geocode/json?latlng='+latitude+','+longitude+'&sensor=false'
$.ajax({
dataType: "json",
url: url,
async: false,
scriptCharset: "utf-8",
contentType: "application/json; charset=utf-8",
success: function(json)
{
var found_city = false;
if (json && json.results.length > 0)
{
for (var k=0; k < json.results.length; k++ ) {
if (json.results[k].address_components) {
for (var i = 0; i < json.results[k].address_components.length; i++) {
if (json.results[k].address_components[i]) {
for (var j = 0; j < json.results[k].address_components[i].types.length; j++) {
if(json.results[k].address_components[i].types[j] == 'locality') {
var city_name = json.results[k].address_components[i].long_name;
alert(city_name);
found_city = true
}
}
}
}
}
}
}
if (!found_city) {
alert("City not found!");
}
}
})
.fail(function( jqxhr, textStatus, error ) {
var err = textStatus + ", " + error;
alert("Request Failed: " + err );
});