这个问题可能看起来很熟悉:我有一个地方的纬度和经度。我需要得到国家的名字。我知道我必须为此使用反向地理编码。但我的问题是,有时它会返回地区或国家的简称(例如,美国代表美国或加利福尼亚州代表加利福尼亚(。有什么方法可以得到国家的全名吗?我无法通过此简短表单与预存储的国家/地区数据库执行匹配操作。
我已经经历了这个,这个。但这对我的问题没有多大帮助。
地理编码器响应通常返回多个results
,其中包括街角、交叉点、县和其他备用制图表达名称。我发现results[0]
是最好的描述。
诀窍是在结果中搜索"国家"。然后可以检索long_name。
点击地图
function getCountry(latLng) {
geocoder.geocode( {'latLng': latLng},
function(results, status) {
if(status == google.maps.GeocoderStatus.OK) {
if(results[0]) {
for(var i = 0; i < results[0].address_components.length; i++) {
if(results[0].address_components[i].types[0] == "country") {
alert(results[0].address_components[i].long_name);
}
}
}
else {
alert("No results");
}
}
else {
alert("Status: " + status);
}
}
);
}
JSON 数组通常同时包含 long_name
和 short_name
。您应该能够同时提取两者...
这是一个适用于谷歌街道地图和开放街道地图的 JSON/XML 解析器。
(唯一的问题是它需要一个 JSON 或 XML 对象作为它在版本 3 Google 和 0.6 开放街道地图上测试的"回复",并且效果很好(
注意:它返回一个对象 location.lat 或 location.lon,您也可以让它返回您想要的任何其他字段。
JSON.parse(text(//其中文本是来自谷歌或打开街道地图的回复XML.parse(text(//你可以自己制作将回复转换为 XML 或使用正则表达式来解析它。 如果有人有一个正则表达式版本来解析文本回复,那也可能有所帮助。
// Parser(ajax reply object, google/open, json/xml);
// takes the reply from google maps or open street maps and creates an object with location[lat/lon]
function Parser(reply, provider, type) {
var location = {};
if(reply != null) {
if(provider == "google") { // Google Street Maps
switch(type) {
case "xml":
location["lat"] = reply.getElementsByTagName("lat")[0].textContent;
location["lon"] = reply.getElementsByTagName("lng")[0].textContent;
break;
default: // json
location["lat"] = reply.results[0].geometry.location.lat;
location["lon"] = reply.results[0].geometry.location.lng;
}
}
else { // Open Street Maps
switch(type) {
case "xml":
location["lat"] = reply.getElementsByTagName("place")[0].getAttribute("lat");
location["lon"] = reply.getElementsByTagName("place")[0].getAttribute("lon");
break;
default: // json
location["lat"] = reply[0].lat;
location["lon"] = reply[0].lon;
}
}
}
return location;
}
function getLocation() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function (position) {
$.post("https://maps.googleapis.com/maps/api/geocode/json?latlng=" + position.coords.latitude + "," + position.coords.longitude + "&sensor=false", function (result) {
for (var i = 0; i < result['results'][0]['address_components'].length; i++) {
if (result['results'][0]['address_components'][i]['types'][0] == "country") {
alert(result['results'][0]['address_components'][i]['long_name']);
}
}
});
});
}
}
getLocation();