Angeblich ist es möglich, dies von Google Maps oder einem solchen Dienst zu erhalten. (Nur US-Adressen sind nicht gut genug.)
Antworten:
Der Begriff, den Sie suchen, ist Geokodierung, und ja, Google bietet diesen Dienst an.
Neben dem oben genannten Google-Geokodierungs-Webdienst gibt es auch einen Konkurrenzdienst von Yahoo . In einem kürzlich durchgeführten Projekt, in dem die Geokodierung mit Benutzerinteraktion durchgeführt wird, habe ich Unterstützung für beide aufgenommen. Der Grund dafür ist, dass ich festgestellt habe, dass der Umgang mit dunkeleren Orten, insbesondere außerhalb der USA, sehr unterschiedlich ist. Manchmal hat Google die beste Antwort, manchmal Yahoo.
Ein Punkt, den Sie beachten sollten: Wenn Google wirklich glaubt, nicht zu wissen, wo sich Ihr Standort befindet, wird ein 602-Fehler zurückgegeben, der auf einen Fehler hinweist. Yahoo hingegen gibt den Standort des Zentrums dieser Stadt zurück, wenn es eine Stadt / Provinz / ein Bundesland / usw. aus Ihrer schlechten Adresse herausschälen kann. Sie müssen also auf die Ergebnisse achten, um zu sehen, ob sie wirklich das sind, was Sie wollen. In einigen Ergebnissen gibt es Zusatzfelder, die Sie darüber informieren: Yahoo nennt dieses Feld "Präzision" und Google nennt es "Genauigkeit".
Wenn Sie dies tun möchten, ohne sich auf einen Dienst verlassen zu müssen, laden Sie die TIGER Shapefiles aus der US-Volkszählung herunter .
Sie sehen die Straße nach, an der Sie interessiert sind und die mehrere Segmente hat. Jedes Segment hat eine Startadresse und eine Endadresse, und Sie interpolieren entlang des Segments, um herauszufinden, wo auf dem Segment Ihre Hausnummer liegt.
Dadurch erhalten Sie ein Lon / Lat-Paar.
Beachten Sie jedoch, dass bei Onlinediensten zahlreiche Adressüberprüfungen und -korrekturen erforderlich sind, die Sie ebenfalls duplizieren müssen, um gute Ergebnisse zu erzielen.
Beachten Sie auch, dass kostenlose Daten zwar nicht so schön sind, aber nicht perfekt - die neuesten Straßen sind nicht vorhanden (möglicherweise in den von Google verwendeten Daten), und die Straßen können aufgrund von Ungenauigkeiten bei der Umfrage um einen gewissen Betrag von ihrem tatsächlichen Standort abweichen. Aber für 98% der Geokodierungsanforderungen funktioniert es perfekt, ist kostenlos und Sie steuern alles, um Abhängigkeiten in Ihrer App zu reduzieren.
Openstreetmaps hat das Ziel, alles auf der Welt abzubilden, obwohl sie nicht ganz da sind, lohnt es sich, den Überblick zu behalten, da sie ihre Daten unter einer CC-Lizenz bereitstellen
Viele (die meisten?) Anderen Länder werden jedoch nur von der Regierung oder von Diensten kartiert, für die Sie eine Gebühr zahlen müssen. Wenn Sie nicht sehr viele Daten geocodieren müssen, reicht es möglicherweise aus, Google, Yahoo oder einige der anderen kostenlosen weltweiten Kartendienste zu verwenden.
Wenn Sie viele Daten geocodieren müssen, können Sie Kartendaten von einem großen Anbieter wie Teleatlas am besten leasen.
-Adam
Sie können auch den OpenStreetMap NameFinder ausprobieren , der Open-Source-Wiki-ähnliche Straßendaten für (möglicherweise) die ganze Welt enthält. NameFinder wird Ende August nicht mehr existieren, aber Nominatim ist sein Ersatz.
Google verlangt, dass Sie eine Google-Karte mit ihren Daten mit maximal 2,5.000 (bisher 25.000) HTTP-Anforderungen pro Tag anzeigen. Nützlich, aber Sie müssen die Nutzung beobachten.
Sie haben
http://groups.google.com/group/Google-Maps-API/web/resources-non-google-geocoders
(Google hat dies inzwischen entfernt. Wenn Sie ein Duplikat oder einen Cache sehen, werde ich darauf verlinken.)
... in dem ich GeoNames gefunden habe, das sowohl eine herunterladbare Datenbank als auch einen kostenlosen Webdienst und einen kommerziellen Webdienst enthält.
Mit den Nutzungsbedingungen von Google können Sie die Geokodierungs-API kostenlos verwenden, wenn Ihre Website wiederum für Verbraucher kostenlos ist. Wenn nicht, müssen Sie eine Lizenz für die Enterprise Maps erwerben.
Zur Verwendung mit Drupal und PHP (und leicht zu ändern):
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;
}
Sie können sich hier die Google Maps API-Dokumente ansehen, um damit zu beginnen:
http://code.google.com/apis/maps/documentation/services.html#Geocoding
Es scheint auch etwas zu sein, das Sie mit Live Maps für internationale Adressen tun können:
http://virtualearth.spaces.live.com/blog/cns!2BBC66E99FDCDB98!1588.entry
Sie können dies auch mit den MapPoint-Webdiensten von Microsoft tun.
Hier ist ein Blog-Beitrag, der erklärt, wie: http://www.codestrider.com/BlogRead.aspx?b=b5e8e275-cd18-4c24-b321-0da26e01bec5
R Code zum Abrufen des Breiten- und Längengrads einer Adresse
# 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"
Wenn Sie dies in Python tun möchten:
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
Beachten Sie, dass Google Anforderungen zu drosseln scheint, wenn mehr als eine bestimmte Menge angezeigt wird. Daher möchten Sie in Ihrer HTTP-Anforderung einen API-Schlüssel verwenden.
Ich hatte einen Stapel von 100.000 Datensätzen als Geocode und stieß auf das Limit der Google API (und da es sich um eine interne Unternehmens-App handelte, mussten wir auf ihren Premium-Service upgraden, der mehr als 10.000 US-Dollar beträgt).
Also habe ich stattdessen Folgendes verwendet: http://geoservices.tamu.edu/Services/Geocode/BatchProcess/ - sie haben auch eine API. (Die Gesamtkosten betrugen ca. 200 $)
Sie können dies in JavaScript für Städte wie Kohat versuchen
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);
}
});
In Python mit Geopy wird PyPI verwendet, um die Breite, Länge, Postleitzahl usw. abzurufen. Hier ist der funktionierende Beispielcode.
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')
In Nominatim - Einige Adressen funktionieren nicht, deshalb habe ich gerade MapQuest ausprobiert .
Es wird korrekt zurückgegeben. Mapquest bietet 15000 kostenlose Transaktionen pro Monat. Es reicht mir.
Beispielcode:
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)
Ich hoffe es hilft.
Ich weiß, dass dies eine alte Frage ist, aber Google ändert den Weg, um Längen- und Breitengrade regelmäßig zu ermitteln.
HTML Quelltext
<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-Code
<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>