2

这个问题可能看起来很眼熟:我有一个地方的经纬度。我需要得到国家的名字。我知道我必须为此使用反向地理编码。但我的问题是,有时它会返回地区或国家/地区的缩写形式(例如美国代表美国或加利福尼亚州代表 CA)。有什么办法可以得到这个国家的全名?我无法通过这个简短的表格与我预先存储的国家数据库执行匹配操作。

我已经经历过这个这个。但这对我的问题没有多大帮助。

4

4 回答 4

5

地理编码器响应通常会返回几个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);
        }
      }
    );
  }
于 2012-05-22T16:12:37.607 回答
2

JSON 数组通常包含long_nameshort_name。你应该能够同时提取...

于 2012-05-22T11:56:29.447 回答
0

这是一个适用于谷歌街道地图和开放街道地图的 JSON/XML 解析器。

(唯一的问题是它需要一个 JSON 或 XML 对象作为其在版本 3 google 和 0.6 开放街道地图上测试的“回复”,并且效果很好)

注意:它返回一个对象 location.lat 或 location.lon 你也可以让它返回你想要的任何其他字段。

JSON.parse(text) // 其中 text 是来自 google 的回复或打开的街道地图 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;
}
于 2012-08-23T14:07:48.283 回答
0
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();
于 2014-08-29T16:24:04.060 回答