プログラムで(および合法的に)住所の経度と緯度を取得する方法
-
03-07-2019 - |
質問
おそらく、Googleマップまたはそのようなサービスからこれを取得することが可能です。 (米国の住所だけでは十分ではありません。)
解決
お探しの用語はジオコーディングです。はい、Googleはこのサービスを提供しています。
他のヒント
前述の Googleジオコーディングウェブサービスに加えて、競合する Yahooが提供するサービスもあります。ユーザーインタラクションでジオコーディングが行われる最近のプロジェクトでは、両方のサポートを含めました。その理由は、特に米国以外では、より不明瞭な場所の取り扱いが大きく異なることを発見したためです。 Googleが最良の答えを出すこともあれば、Yahooが来ることもあります。
注意すべき点が1つあります。Googleが実際に自分の場所がわからないと判断した場合、失敗を示す602エラーが返されます。一方、Yahooは、悪い住所から市/県/州/などをはぎ取ることができる場合、その町の中心の位置を返します。したがって、結果が本当にあなたが望むものであるかどうかを確認するために、結果に注意を払う必要があります。このことを伝えるいくつかの結果には、補助的なフィールドがあります。Yahooはこのフィールドを「精度」と呼んでいます。 Googleはそれを「精度」と呼びます。
サービスに依存せずにこれを行う場合は、米国国勢調査のTIGERシェープファイル。
興味のある通りを検索すると、いくつかのセグメントがあります。各セグメントには開始アドレスと終了アドレスがあり、セグメントに沿って補間して家番号がセグメントのどこにあるかを見つけます。
これにより、経度/緯度のペアが提供されます。
ただし、オンラインサービスではアドレスの確認と修正が大量に行われることを忘れないでください。良好な結果を得るには複製も必要です。
また、無料のデータと同じくらい素晴らしいが、完璧ではないことに注意してください-最新の道路はそこにありません(Googleが使用するデータにあるかもしれません)。調査の不正確さ。しかし、ジオコーディングニーズの98%で完全に機能し、無料で、すべてを制御して、アプリの依存関係を減らします。
Openstreetmapsは、世界中のすべてをマッピングすることを目的としていますが、CCライセンスの下でデータを提供するので、タブを保持する価値はありません
ただし、他の多く(ほとんど?)の国は、料金を支払う必要がある政府またはサービスによってのみマップされます。大量のデータをジオコーディングする必要がない場合は、Google、Yahoo、または他の無料の世界的なマッピングサービスを使用すれば十分です。
大量のデータをジオコーディングする必要がある場合、テレアトラスなどの主要プロバイダーから地図データをリースするのが最適です。
-アダム
OpenStreetMap NameFinder 。これには、(潜在的に)全世界のwikiのようなオープンソースのストリートデータが含まれています。 NameFinderは8月末に存在しなくなりますが、 Nominatim が代わりになります。
Googleでは、1日あたり最大2.5k(25k)のHTTPリクエストで、Googleマップにデータを表示する必要があります。便利ですが、使用状況を監視する必要があります。
彼らは持っている
http://groups.google.com/group/Google-Maps-API/web/resources-non-google-geocoders
(Googleはこれを削除しました。重複またはキャッシュが見つかった場合、リンクします。)
...ダウンロードしたdb、無料のWebサービス、および GeoNames が見つかりました商用Webサービス。
Googleの利用規約では、ウェブサイトが消費者が自由に使用できる場合、ジオコーディングAPIを無料で使用できます。そうでない場合は、Enterprise Mapsのライセンスを取得する必要があります。
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;
}
ここで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
これは、MicrosoftのMapPoint Webサービスでも実行できます。
次の方法を説明するブログ投稿です。 http://www.codestrider.com/BlogRead。 aspx?b = b5e8e275-cd18-4c24-b321-0da26e01bec5
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"
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キーを使用する必要があることに注意してください。
ジオコードを作成するために100,000個のレコードのバッチがあり、Google APIの制限に達しました(そして、社内のエンタープライズアプリのためだったため、10,000ドル以上のプレミアムサービスにアップグレードする必要がありました)
したがって、代わりにこれを使用しました: http://geoservices.tamu.edu/Services/ Geocode / BatchProcess / -APIもあります。 (総費用は約200ドルでした)
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);
}
});
Pythonで geopy PyPI を使用して、緯度、経度、郵便番号などを取得します。 動作するサンプルコードを次に示します。
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')
Nominatim で-一部のアドレスが機能しないため、 を試しました。 MapQuest 。
正しく戻ります。
Mapquestは、1か月あたり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)
お役に立てば幸いです。
これは古い質問ですが、グーグルは定期的に緯度と経度を取得する方法を変えています。
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-address /