おそらく、これは Google マップまたはそのようなサービスから取得できます。(米国の住所だけでは十分ではありません。)
15 に答える
あなたが探している用語はジオコーディングです。はい、Google はこのサービスを提供しています。
前述のGoogleジオコーディングWebサービスに加えて、 Yahooが提供する競合サービスもあります。ジオコーディングがユーザーインタラクションで行われる最近のプロジェクトでは、両方のサポートを含めました。その理由は、特に米国以外では、よりあいまいな場所の取り扱いが大きく異なることを発見したためです。グーグルが最良の答えを出すこともあれば、ヤフーを使うこともある。
注意すべき1つの落とし穴:Googleがあなたの場所がどこにあるかわからないと本当に思った場合、彼らは失敗を示す602エラーを返します。一方、Yahooは、あなたの悪い住所から市/州/州などをはがすことができる場合、その町の中心の場所を返します。したがって、結果が本当に必要なものであるかどうかを確認するために、結果に注意を払う必要があります。一部の結果には、これについて説明する補助フィールドがあります。Yahooはこのフィールドを「精度」と呼び、Googleはこのフィールドを「精度」と呼びます。
サービスに依存せずにこれを実行する場合は、米国国勢調査からTIGERシェープファイルをダウンロードします。
興味のある通りを調べます。この通りにはいくつかのセグメントがあります。各セグメントには開始アドレスと終了アドレスがあり、セグメントに沿って補間して、セグメントのどこに家番号があるかを見つけます。
これにより、lon/latペアが提供されます。
ただし、オンラインサービスでは、アドレスのチェックと修正が大量に行われるため、良好な結果を得るには、これらも複製する必要があることに注意してください。
また、無料のデータは素晴らしいですが、完璧ではありません。最新の道路はそこにありません(Googleが使用するデータに含まれている可能性があります)。また、調査の不正確さのために、道路が実際の場所からある程度ずれている可能性があります。しかし、ジオコーディングのニーズの98%は完全に機能し、無料であり、すべてを制御できるため、アプリの依存関係を減らすことができます。
Openstreetmapsは、世界中のすべてのものをマッピングすることを目的としていますが、CCライセンスの下でデータを提供するため、そこにあるわけではありません。
ただし、他の多くの国(ほとんど?)は、料金を支払う必要のある政府またはサービスによってのみマッピングされます。あまり多くのデータをジオコーディングする必要がない場合は、Google、Yahoo、またはその他の無料の世界規模のマッピングサービスを使用するだけで十分な場合があります。
大量のデータをジオコーディングする必要がある場合は、テレアトラスなどの主要プロバイダーから地図データをリースするのが最適です。
-アダム
また、 OpenStreetMap NameFinderを試すこともできます。これには、オープン ソースの wiki のような全世界の道路データが含まれています。NameFinder は 8 月末に廃止されますが、Nomintim がそれに取って代わります。
Google では、1 日あたり最大 2.5k (以前は 25k) の HTTP リクエストで、データを含む Google マップを表示する必要があります。便利ですが、使用法に注意する必要があります。
彼らは持っています
http://groups.google.com/group/Google-Maps-API/web/resources-non-google-geocoders
(その後、Google はこれを削除しました。重複またはキャッシュが見つかった場合は、そこにリンクします。)
...ダウンロード可能なデータベース、無料の Web サービス、および商用の Web サービスの両方を備えたGeoNamesを見つけました。
Googleの利用規約では、ウェブサイトが消費者に無料で使用できる場合は、ジオコーディングAPIを無料で使用できます。そうでない場合は、エンタープライズマップのライセンスを取得する必要があります。
Drupal および 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;
}
これは、MicrosoftのMapPointWebサービスを使用して行うこともできます。
方法を説明するブログ投稿は次のとおりです。http: //www.codestrider.com/BlogRead.aspx?b = b5e8e275-cd18-4c24-b321-0da26e01bec5
これを開始するには、こちらの Google Maps API ドキュメントを参照してください。
http://code.google.com/apis/maps/documentation/services.html#Geocoding
また、ライブマップを使用して国際住所に対してもできることのようです:
http://virtualearth.spaces.live.com/blog/cns!2BBC66E99FDCDB98!1588.entry
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 キーを使用する必要があることに注意してください。
住所の緯度と経度を取得する 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"
これは古い質問ですが、グーグルは緯度と経度を定期的に取得する方法を変更しています。
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>