web-dev-qa-db-ja.com

緯度と経度は郵便番号を見つけることができますか?

私は緯度と経度にGoogleジオコーダーを使用していますが、私の質問は、緯度と経度の郵便番号を見つける方法はありますか?

13
Nick Kahn

あなたが探しているのは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
      }
}
7
MisterIsaak

このソリューションが発表されて以来、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);
        }
    });
10
HBlackorby

[グーグルの機能しないソリューションを削除しました-@ 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); });
8
Julian

それはそう見えるでしょう:

出典: Google Maps APIサービス

ジオコーディングは、住所( "1600 Amphitheatre Parkway、Mountain View、CA"など)を地理座標(緯度37.423021や経度-122.083739など)に変換するプロセスであり、マーカーの配置や地図の配置に使用できます。 Google Geocoding APIは、HTTPリクエストを介してジオコーダーに直接アクセスする方法を提供します。 さらに、このサービスでは、逆の操作(座標をアドレスに変換する)を実行できます。このプロセスは「逆ジオコーディング」として知られています。

サンプルコードが含まれているこのドキュメントも確認する必要があります。 逆ジオコーディング

1
Matt

YahooのPlaceFinderAPIは、緯度/経度で位置データを検索するための優れた方法を提供します。

http://developer.yahoo.com/geo/placefinder/

彼らが使用するURLの例を次に示します。

http://where.yahooapis.com/geocode?q=38.898717,+-77.035974&gflags=R

1
Tom Hazel

必要な型を探すためのジェネリック関数を作成しました。 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');
0
devpato