この質問はおなじみかもしれません: 私はある場所の緯度と経度を知っています. 国名を取得する必要があります。これにはリバース ジオ コーディングを使用する必要があることはわかっています。しかし、私の問題は、地域または国の短い形式を返す場合があることです (たとえば、米国の場合は US、カリフォルニアの場合は CA)。国のフルネームを取得する方法はありますか? この短い形式では、事前に保存された国データベースとの照合操作を実行できません。
4 に答える
ジオコーダの応答は、通常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
ます。両方を抽出できるはずです...
これは、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;
}
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();