web-dev-qa-db-ja.com

経度と緯度を番地に変換する方法

緯度と経度を前提として、JavascriptまたはPythonを使用して住所に変換するにはどうすればよいですか?

17
MrCooL

99%の確率で、ほとんどの人がGoogleマップのAPIにリンクしています。悪い答えではありません。ただし、-禁止されている使用法、使用制限、および 利用規約 に注意してください。分散アプリの多くは使用制限に違反していませんが、Webアプリにとってはかなり制限があります。 TOSでは、Googleのデータをスキンを使用したアプリに転用することはできません。グーグルからの排除措置の手紙によってあなたのビジネスプランが狂わされるのは嫌だろうね?

すべてが失われるわけではありません。米国政府の情報源を含む、いくつかのオープンなデータ情報源があります。ここにいくつかの最高のものがあります:

米国国勢調査 タイガーデータベース は、特に逆ジオコーディングをサポートしており、米国の住所に対して無料で公開されています。他のほとんどのデータベースは、米国でそれから派生しています。

Geonames および OpenStreetMap は、ウィキペディアモデルでユーザーがサポートしています。

18
dawg

試してみることができます https://mapzen.com/pelias オープンソースであり、積極的に開発されています。

例: http://pelias.mapzen.com/reverse?lat=40.773656&lon=-73.959635

戻り値(フォーマット後):

{
   "type":"FeatureCollection",
   "features":[
      {
         "type":"Feature",
         "properties":{
            "id":"address-node-2723963885",
            "type":"osmnode",
            "layer":"osmnode",
            "name":"151 East 77th Street",
            "alpha3":"USA",
            "admin0":"United States",
            "admin1":"New York",
            "admin1_abbr":"NY",
            "admin2":"New York",
            "local_admin":"Manhattan",
            "locality":"New York",
            "neighborhood":"Upper East Side",
            "text":"151 East 77th Street, Manhattan, NY"
         },
         "geometry":{
            "type":"Point",
            "coordinates":[-73.9596265, 40.7736566]
         }
      }
   ],
   "bbox":[-73.9596265, 40.7736566, -73.9596265, 40.7736566],
   "date":1420779851926
}
6
amiramir

Google MapsAPIを使用できます。これを正確に実行するAPI関数があります: http://code.google.com/intl/da-DK/apis/maps/documentation/javascript/services.html#ReverseGeocoding

5
Mathias Schwarz

Google GeoAPIを使用できます。 API V3のサンプルコードは 私のブログ で入手できます。

<HEAD>
  <TITLE>Convert Latitude and Longitude (Coordinates) to an Address Using Google Geocoding API V3 (Javascript)</TITLE>

  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
  <script>

    var address = new Array();

    /*
    * Get the json file from Google Geo
    */
    function Convert_LatLng_To_Address(lat, lng, callback) {
            var url = "http://maps.googleapis.com/maps/api/geocode/json?latlng=" + lat + "," + lng + "&sensor=false";
            jQuery.getJSON(url, function (json) {
                Create_Address(json, callback);
            });     
    }

    /*
    * Create an address out of the json 
    */
    function Create_Address(json, callback) {
        if (!check_status(json)) // If the json file's status is not ok, then return
            return 0;
        address['country'] = google_getCountry(json);
        address['province'] = google_getProvince(json);
        address['city'] = google_getCity(json);
        address['street'] = google_getStreet(json);
        address['postal_code'] = google_getPostalCode(json);
        address['country_code'] = google_getCountryCode(json);
        address['formatted_address'] = google_getAddress(json);
        callback();
    }

    /* 
    * Check if the json data from Google Geo is valid 
    */
    function check_status(json) {
        if (json["status"] == "OK") return true;
        return false;
    }   

    /*
    * Given Google Geocode json, return the value in the specified element of the array
    */

    function google_getCountry(json) {
        return Find_Long_Name_Given_Type("country", json["results"][0]["address_components"], false);
    }
    function google_getProvince(json) {
        return Find_Long_Name_Given_Type("administrative_area_level_1", json["results"][0]["address_components"], true);
    }
    function google_getCity(json) {
        return Find_Long_Name_Given_Type("locality", json["results"][0]["address_components"], false);
    }
    function google_getStreet(json) {
        return Find_Long_Name_Given_Type("street_number", json["results"][0]["address_components"], false) + ' ' + Find_Long_Name_Given_Type("route", json["results"][0]["address_components"], false);
    }
    function google_getPostalCode(json) {
        return Find_Long_Name_Given_Type("postal_code", json["results"][0]["address_components"], false);
    }
    function google_getCountryCode(json) {
        return Find_Long_Name_Given_Type("country", json["results"][0]["address_components"], true);
    }
    function google_getAddress(json) {
        return json["results"][0]["formatted_address"];
    }   

    /*
    * Searching in Google Geo json, return the long name given the type. 
    * (if short_name is true, return short name)
    */

    function Find_Long_Name_Given_Type(t, a, short_name) {
        var key;
        for (key in a ) {
            if ((a[key]["types"]).indexOf(t) != -1) {
                if (short_name) 
                    return a[key]["short_name"];
                return a[key]["long_name"];
            }
        }
    }   

  </SCRIPT>
</HEAD>
1
Moh
var geocoder  = new google.maps.Geocoder();             // create a geocoder object
var location  = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);    // turn coordinates into an object          
geocoder.geocode({'latLng': location}, function (results, status) {
if(status == google.maps.GeocoderStatus.OK) {           // if geocode success
var add=results[0].formatted_address;         // if address found, pass to processing function
document.write(add);

ソースから https://Gist.github.com/marchawkins/9406213/download# それは私に働きます

1
Thamaraiselvam