2

この質問はおなじみかもしれません: 私はある場所の緯度と経度を知っています. 国名を取得する必要があります。これにはリバース ジオ コーディングを使用する必要があることはわかっています。しかし、私の問題は、地域または国の短い形式を返す場合があることです (たとえば、米国の場合は US、カリフォルニアの場合は 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_nameとの両方が含まれshort_nameます。両方を抽出できるはずです...

于 2012-05-22T11:56:29.447 に答える
0

これは、Google ストリート マップとオープン ストリート マップの両方で機能する JSON/XML パーサーです。

(唯一の問題は、バージョン 3 の Google および 0.6 のオープン ストリート マップでテストされた「応答」として JSON または XML オブジェクトが必要であり、うまく機能することです)

注: オブジェクト 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 に答える