web-dev-qa-db-ja.com

プログラムで(および合法的に)住所の経度と緯度を取得する方法

おそらく、Google Mapsまたはそのようなサービスからこれを取得することが可能です。 (米国の住所だけでは十分ではありません。)

74
Ola Eldøy

お探しの用語はジオコーディングです。はい、Googleはこのサービスを提供しています。

70
Sijin

前述の Googleジオコーディングウェブサービス に加えて、競合する Yahooが提供するサービス もあります。ユーザーインタラクションでジオコーディングが行われる最近のプロジェクトでは、両方のサポートを含めました。その理由は、特に米国以外では、より不明瞭な場所の取り扱いが大きく異なることを発見したためです。 Googleが最良の答えを出す場合もあれば、Yahooが答えを出す場合もあります。

注意すべき点が1つあります。Googleが実際に自分の場所がわからないと判断した場合、失敗を示す602エラーが返されます。一方、Yahooは、悪い住所から市/県/州/などを剥ぎ取ることができる場合、その町の中心の位置を返します。そのため、実際に必要な結果であるかどうかを確認するには、結果に注意を払う必要があります。このことを示すいくつかの結果には補助フィールドがあります。Yahooはこのフィールドを「精度」と呼び、Googleはそれを「精度」と呼びます。

22
Tim Farley

サービスに依存せずにこれを行うには、米国国勢調査から TIGER Shapefiles をダウンロードします。

興味のある通りを検索すると、いくつかのセグメントがあります。各セグメントには開始アドレスと終了アドレスがあり、セグメントに沿って補間して家番号がセグメントのどこにあるかを見つけます。

これにより、lon/latペアが提供されます。

ただし、オンラインサービスでは大量のアドレスチェックと修正が行われるため、良好な結果を得るには複製も必要になることに注意してください。

また、無料のデータと同様にニースも完璧ではないことに注意してください-最新の道路はそこになく(Googleが使用しているデータにある可能性があります)、調査の不正確さのために道路が実際の位置からある程度外れている可能性があります。しかし、ジオコーディングニーズの98%で完全に機能し、無料で、すべてを制御するので、アプリの依存関係を減らすことができます。

Openstreetmapsは、世界中のすべてをマッピングすることを目的としていますが、CCライセンスの下でデータを提供するので、タブを保持する価値はありません。

ただし、多くの(ほとんどの?)他の国は、料金を支払う必要がある政府またはサービスによってのみマップされます。大量のデータをジオコーディングする必要がない場合は、Google、Yahoo、または他の無料の世界的なマッピングサービスを使用すれば十分です。

大量のデータをジオコーディングする必要がある場合は、テレアトラスなどの主要プロバイダーから地図データをリースするのが最適です。

-アダム

15
Adam Davis

OpenStreetMapNameFinder を試すこともできます。これには、(潜在的に)全世界のwikiのようなオープンソースのオープンソースのデータが含まれています。 NameFinderは8月末に存在しなくなりますが、代わりに Nominatim が使用されます。

9
peSHIr

Googleでは、1日あたり最大2.5k(25k)のHTTPリクエストで、Googleマップにデータを表示する必要があります。便利ですが、使用状況を監視する必要があります。

彼らは持っています

http://groups.google.com/group/Google-Maps-API/web/resources-non-google-geocoders

(Googleはこれを削除しました。重複またはキャッシュが見つかった場合は、リンクします。)

...私が見つけた GeoNames これには、ダウンロード可能なデータベース、無料のWebサービス、商用Webサービスの両方があります。

7
Richard Watson

Googleの利用規約では、ウェブサイトが消費者が無料で使用できる場合、ジオコーディングAPIを無料で使用できます。そうでない場合は、Enterprise Mapsのライセンスを取得する必要があります。

4
Craig Wohlfeil

Drupalおよびand PHP(および簡単に変更可能):

function get_lat_long($address) {
  $res = drupal_http_request('http://maps.googleapis.com/maps/api/geocode/json?address=' . $address .'&sensor=false');
  return json_decode($res->data)->results[0]->geometry->location;
}
3
Nate Wildermuth

こちらでGoogle Maps APIドキュメントをご覧ください。

http://code.google.com/apis/maps/documentation/services.html#Geocoding

また、Live Mapsを使用して国際住所でできることもあるようです。

http://virtualearth.spaces.live.com/blog/cns!2BBC66E99FDCDB98!1588.entry

2
Carl

Pythonでこれを行いたい場合:

import json, urllib, urllib2

address = "Your address, New York, NY"

encodedAddress = urllib.quote_plus(address)
data = urllib2.urlopen("http://maps.googleapis.com/maps/api/geocode/json?address=" + encodedAddress + '&sensor=false').read()
location = json.loads(data)['results'][0]['geometry']['location']
lat = location['lat']
lng = location['lng']
print lat, lng

Googleは、一定量を超えるとリクエストを調整するように見えるため、HTTPリクエストでAPIキーを使用することに注意してください。

2
Suman

R番地の緯度と経度を取得するコード

# CODE TO GET THE LATITUDE AND LONGITUDE OF A STREET ADDRESS WITH GOOGLE API
addr <- '6th Main Rd, New Thippasandra, Bengaluru, Karnataka'  # set your address here
url = paste('http://maps.google.com/maps/api/geocode/xml?address=', addr,'&sensor=false',sep='')  # construct the URL
doc = xmlTreeParse(url) 
root = xmlRoot(doc) 
lat = xmlValue(root[['result']][['geometry']][['location']][['lat']]) 
long = xmlValue(root[['result']][['geometry']][['location']][['lng']]) 
lat
[1] "12.9725020"
long
[1] "77.6510688"
2
Selva

これは、MicrosoftのMapPoint Webサービスでも実行できます。

方法を説明するブログ投稿は次のとおりです。 http://www.codestrider.com/BlogRead.aspx?b=b5e8e275-cd18-4c24-b321-0da26e01bec5

2
Stephen Curial

In python using geopy PyPI lattitude、langitude、zipcodeなどを取得するために使用されます。ここに実際のサンプルコードがあります。

from geopy.geocoders import Nominatim

geolocator = Nominatim(user_agent="your-app-id")

location = geolocator.geocode("Your required address ")

if location:
    print('\n Nominatim ADDRESS :',location.address)
    print('\n Nominatim LATLANG :',(location.latitude, location.longitude))
    print('\n Nominatim FULL RESPONSE :',location.raw)
else:
   print('Cannot Find')

InNominatim-一部のアドレスが機能しないため、試しました MapQuest
正しく戻ります。 Mapquestは、無料プラン15000トランザクション/月を提供します。それで十分です。

サンプルコード:

import geocoder
g = geocoder.mapquest("Your required address ",key='your-api-key')

for result in g:
   # print(result.address, result.latlng)
   print('\n mapquest ADDRESS :',result.address,result.city,result.state,result.country)
   print('\n mapquest LATLANG :', result.latlng)
   print('\n mapquest FULL RESPONSE :',result.raw)

それが役に立てば幸い。

1
Parthiban.S

ジオコードするために100,000個のレコードのバッチがあり、Google APIの制限に達しました(また、社内エンタープライズアプリのためだったため、10,000ドル以上のプレミアムサービスにアップグレードする必要がありました)

そこで、代わりにこれを使用しました: http://geoservices.tamu.edu/Services/Geocode/BatchProcess/ -APIもあります。 (総費用は約200ドルでした)

1
paras_doshi

kohatのような都市のJavaScriptでこれを試すことができます。

var geocoder = new google.maps.Geocoder();
var address = "kohat";
geocoder.geocode( { 'address': address}, function(results, status) {
var latitude = results[0].geometry.location.lat();
var longitude = results[0].geometry.location.lng();
alert(latitude+" and "+longitude);
  } 
});

enter image description here

1
Adiii

これは古い質問ですが、グーグルは定期的に緯度と経度を取得する方法を変えています。

HTMLコード

<form>
    <input type="text" name="address" id="address" style="width:100%;">
    <input type="button" onclick="return getLatLong()" value="Get Lat Long" />
</form>
<div id="latlong">
    <p>Latitude: <input size="20" type="text" id="latbox" name="lat" ></p>
    <p>Longitude: <input size="20" type="text" id="lngbox" name="lng" ></p>
</div>

JavaScriptコード

<script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap" async defer></script>

    <script>
    function getLatLong()
    {
        var address = document.getElementById("address").value;
        var geocoder = new google.maps.Geocoder();
        geocoder.geocode( { 'address': address}, function(results, status) {
            if (status == google.maps.GeocoderStatus.OK) {
                var latitude = results[0].geometry.location.lat();
                document.getElementById("latbox").value=latitude;
                var longitude = results[0].geometry.location.lng();
                document.getElementById("lngbox").value=longitude;
            } 
        });
    }
    </script>

詳細については、このリンクを参照してくださいhttps://www.phpkida.com/Java-script/get-latitude-longitude-from-アドレス/

0
Mukesh Jakhar