2016-07-29 11 views
0

ich die Position von einem Breitengrad bekommen und eine Länge gegeben:Google Geocoder zurückkehrt unterschiedliche geografische Breite und Länge von Anforderungswerten

getLocationFromCoords(lat, lng) { 
    var geocoder = new google.maps.Geocoder(); 
    var latLng = new google.maps.LatLng(parseFloat(lat), parseFloat(lng)); 
    geocoder.geocode({ 
     'latLng': latLng 
    }, function (results, status) { 
     if (status === google.maps.GeocoderStatus.OK) { 
      if (typeof results[0].geometry.location != 'undefined') { 

       console.log(lat, lng); 
       console.log(results[0].geometry.location.lat(), results[0].geometry.location.lng()); 

       // set the location 
      } else { 
       //... 
      } 
     }); 
    }); 
} 

Das Problem ist, dass die Breite und Länge von results[0].geometry.location von den Werten abweichen von die Anfrage. Der obige Code wird in der Konsole:

38,9067339 1,4205983

38,9069681 1,4205133000000387

So bin ich etwas fehlt? Warum sind nicht die gleichen Werte?

+1

Was Sie versuchen zu tun? LatLong zu Adresse oder Adresse zu LatLong? –

+0

@ TuğcaEker - LatLong zu Adresse (die auch die Lat enthält und lang). – Manolo

+1

Ok. Sie wenden ** Reverse geocoding ** an, um die Koordinate in Adresse zu konvertieren. Sie können nicht genau denselben GeoLocation-Standort abrufen, da Google Ihnen den nächsten Datensatz zurückgibt. Wie ich sehe, gibt es nur 20-30 Meter zwischen Erwartung und Ergebnis. Mach dir keine Sorgen, es ist normal. –

Antwort

1

Geocodierung oder Reverse Geocoding kann nicht exakt ergeben Ergebnis. Wenn Sie die Adresse zu LatLong geokodieren, erhalten Sie den am besten geeigneten und nächsten Datensatz von Google. Das ist normales Verhalten. Auch das offizielle Beispiel von Google hat dasselbe Verhalten. (kein Fehler oder Problem).

Überprüfen Sie diese fiddle;

function initMap() { 
 
    var map = new google.maps.Map(document.getElementById('map'), { 
 
    zoom: 8, 
 
    center: {lat: 40.731, lng: -73.997} 
 
    }); 
 
    var geocoder = new google.maps.Geocoder; 
 
    var infowindow = new google.maps.InfoWindow; 
 

 
    document.getElementById('submit').addEventListener('click', function() { 
 
    geocodeLatLng(geocoder, map, infowindow); 
 
    }); 
 
} 
 

 
function geocodeLatLng(geocoder, map, infowindow) { 
 
    var input = document.getElementById('latlng').value; 
 
    var latlngStr = input.split(',', 2); 
 
    var latlng = {lat: parseFloat(latlngStr[0]), lng: parseFloat(latlngStr[1])}; 
 
    geocoder.geocode({'location': latlng}, function(results, status) { 
 
    if (status === 'OK') { 
 
     if (results[1]) { 
 
     map.setZoom(11); 
 
     var marker = new google.maps.Marker({ 
 
      position: latlng, 
 
      map: map 
 
     }); 
 
     infowindow.setContent(
 
     \t results[1].formatted_address + "<br />" + results[1].geometry.location 
 
     ); 
 
     infowindow.open(map, marker); 
 
     } else { 
 
     window.alert('No results found'); 
 
     } 
 
    } else { 
 
     window.alert('Geocoder failed due to: ' + status); 
 
    } 
 
    }); 
 
}
html, body { 
 
    height: 100%; 
 
    margin: 0; 
 
    padding: 0; 
 
} 
 
#map { 
 
    height: 100%; 
 
} 
 
#floating-panel { 
 
    position: absolute; 
 
    top: 10px; 
 
    left: 25%; 
 
    z-index: 5; 
 
    background-color: #fff; 
 
    padding: 5px; 
 
    border: 1px solid #999; 
 
    text-align: center; 
 
    font-family: 'Roboto','sans-serif'; 
 
    line-height: 30px; 
 
    padding-left: 10px; 
 
} 
 
#floating-panel { 
 
    position: absolute; 
 
    top: 5px; 
 
    left: 50%; 
 
    margin-left: -180px; 
 
    width: 350px; 
 
    z-index: 5; 
 
    background-color: #fff; 
 
    padding: 5px; 
 
    border: 1px solid #999; 
 
} 
 
#latlng { 
 
    width: 225px; 
 
}
<div id="floating-panel"> 
 
    <input id="latlng" type="text" value="40.714224,-73.961452"> 
 
    <input id="submit" type="button" value="Reverse Geocode"> 
 
</div> 
 
<div id="map"></div> 
 
<!-- Replace the value of the key parameter with your own API key. --> 
 
<script async defer 
 
src="https://maps.googleapis.com/maps/api/js?callback=initMap"> 
 
</script>

0

Geocodierungs (passend Standorten Breiten-Längen-Paaren und umgekehrt) ist nur genau, wenn sie eine bekannte Adresse oder einem bekannten Ort suchen. Es gibt Datenbanken, die genaue Informationen für alle realen Adressen liefern. Und es gibt Services und APIs, die sich auf die Verwendung dieser Art von Daten spezialisiert haben. Zum Beispiel suchen Adressvalidierungsdienste nach einer Liste realer Adressen. Sie analysieren die Adresseingabe und können feststellen, ob die Eingabe eine echte Adresse ist oder nicht. Für Personen, die diese Dienste nutzen (z. B. Personen, die mit dem Versand zu tun haben), ist genaue Genauigkeit wichtig bei ihren Adressen.

Viele Geocoding-Dienste bevorzugen es jedoch, einem Benutzer eine Antwort zu geben, selbst wenn es keine perfekte gibt - d. H. Wenn keine offiziellen Daten vorhanden sind, die mit der Eingabe übereinstimmen. Die Mapping-Dienste von Google beispielsweise liefern Ihnen ein Ergebnis, selbst wenn die Eingabe keine echte Adresse ist. Sie verwenden gute Algorithmen, um Ihnen eine geschätzte Schätzung auf einer Karte zu geben. Es gibt viele gute Dinge über Google-Dienste, aber eine der Schwächen ist, dass einige Antworten nicht exakt sein werden.

In anderen Fällen können große öffentliche Orte oder andere benannte Orte mit vielen Breiten- und Längengradpaaren übereinstimmen, aber die Daten, die mit dem Namen übereinstimmen, unterscheiden sich geringfügig von den Sucheingaben.

In Ihrem speziellen Fall fand Google vielleicht heraus, dass Ihre Breiten- und Längeneingabe sehr nahe an einem tatsächlichen Orientierungspunkt oder Ort war und davon ausgegangen wurde, dass dies das war, was Sie wollten. Oder der Ort ist groß (wie ein Park) und Googles Info für diesen Park zeigt einen anderen Ort als "die Mitte".

Googles Ergebnisse sind normalerweise nah, wie bereits erwähnt wurde. Wenn Sie einen dieser Dienste verwenden und Breiten- und Längengrad eingeben, nach einem entsprechenden Ort suchen und dann zurück in Breiten- und Längengrad konvertieren, ist wahrscheinlich eine geringfügige Änderung eingetreten.


(Full Disclosure: Ich arbeite für SmartyStreets, eine Adressvalidierung Firma.)

Verwandte Themen