私は緯度と経度にGoogleジオコーダーを使用していますが、私の質問は、緯度と経度の郵便番号を見つける方法はありますか?
あなたが探しているのはaddress_components[]
results
配列内。たぶん、このようなものがうまくいくでしょう、それはそれにエラーがあるかもしれないので以下をタイプするだけです、しかし私はあなたが考えを得ると思います。
http://code.google.com/apis/maps/documentation/geocoding/#Results
function (request, response) {
geocoder.geocode({ 'address': request.term, 'latLng': centLatLng, 'region': 'US' }, function (results, status) {
response($.map(results, function (item) {
return {
item.address_components.postal_code;//This is what you want to look at
}
}
このソリューションが発表されて以来、Googleマップには新しいバージョンがあることに注意してください。
参照: https://developers.google.com/maps/documentation/geocoding/?csw=1#ReverseGeocoding
これは、Google Mapsv3の更新された例です。これは、JIssakが前述したアドレスコンポーネントを利用します。フォールバックがないことに注意する必要があります。郵便番号が見つからない場合は、何もしません。これは、スクリプトにとって重要な場合と重要でない場合があります。
var latlng = new google.maps.LatLng(p.coords.latitude, p.coords.longitude);
geocoder = new google.maps.Geocoder();
geocoder.geocode({'latLng': latlng}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
if (results[0]) {
for (j = 0; j < results[0].address_components.length; j++) {
if (results[0].address_components[j].types[0] == 'postal_code')
alert("Zip Code: " + results[0].address_components[j].short_name);
}
}
} else {
alert("Geocoder failed due to: " + status);
}
});
[グーグルの機能しないソリューションを削除しました-@ hblackorbyのソリューションを参照してください。]
これはopenstreetmap.orgを使用するバージョンで、googleのapiよりもはるかに単純です-coffeescript、次にjavascript:
getZip = (cb) ->
# try to populate Zip from geolocation/google geocode api
if document.location.protocol == 'http:' && navigator.geolocation?
navigator.geolocation.getCurrentPosition (pos) ->
coords = pos.coords
url = "http://nominatim.openstreetmap.org/reverse?format=json&lat=#{ coords.latitude }&lon=#{ coords.longitude }&addressdetails=1"
$.ajax({
url: url,
dataType: 'jsonp',
jsonp: 'json_callback',
cache: true,
}).success (data) ->
cb(data.address.postcode)
コンパイルされたJavaScriptは次のとおりです。
getZip = function(cb) {
if (document.location.protocol === 'http:' && (navigator.geolocation != null)) {
return navigator.geolocation.getCurrentPosition(function(pos) {
var coords, url;
coords = pos.coords;
url = "http://nominatim.openstreetmap.org/reverse?format=json&lat=" + coords.latitude + "&lon=" + coords.longitude + "&addressdetails=1";
return $.ajax({
url: url,
dataType: 'jsonp',
jsonp: 'json_callback',
cache: true
}).success(function(data) {
return cb(data.address.postcode);
});
});
}
};
次のように使用します。
getZip(function(zipcode){ console.log("Zip code found:" + zipcode); });
それはそう見えるでしょう:
ジオコーディングは、住所( "1600 Amphitheatre Parkway、Mountain View、CA"など)を地理座標(緯度37.423021や経度-122.083739など)に変換するプロセスであり、マーカーの配置や地図の配置に使用できます。 Google Geocoding APIは、HTTPリクエストを介してジオコーダーに直接アクセスする方法を提供します。 さらに、このサービスでは、逆の操作(座標をアドレスに変換する)を実行できます。このプロセスは「逆ジオコーディング」として知られています。
サンプルコードが含まれているこのドキュメントも確認する必要があります。 逆ジオコーディング
YahooのPlaceFinderAPIは、緯度/経度で位置データを検索するための優れた方法を提供します。
http://developer.yahoo.com/geo/placefinder/
彼らが使用するURLの例を次に示します。
http://where.yahooapis.com/geocode?q=38.898717,+-77.035974&gflags=R
必要な型を探すためのジェネリック関数を作成しました。 address_componentに郵便番号、国などがあるとは限りません。また、それらが常に同じインデックスにあるとは限りません。配列の長さが8、6などの場合があります。 TypeScriptで実行しましたが、いくつか変更を加えてVanillaJSにしました。
getPlaceTypeValue(addressComponents: Places[], type: string): string {
let value = null;
for (const [i] of addressComponents.entries()) {
if (addressComponents[i].types.includes(type)) {
value = addressComponents[i].long_name;
break;
}
}
return value;
}
[〜#〜]または[〜#〜]
getPlaceTypeValue(addressComponents: any[], type: string): string {
return (addressComponents.find(({ types }) => types.includes(type)) || {}).long_name || null;
}
使用例:
this.placesService.getPlaceTypeValue(address.address_components, 'postal_code');
this.placesService.getPlaceTypeValue(address.address_components, 'country');