来自纬度和经度的国家名称



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

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

地理编码器响应通常返回多个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_nameshort_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();

相关内容

  • 没有找到相关文章

最新更新