2009-07-21 9 views
6

Ich verwende den Google Geocoding-Dienst, um zu validieren, dass eine Stadt Name (plus Region und Land), die in unserem System eingegeben wurde, existiert, und die lat/long zu erhalten.Google Geocoding-Service gibt Antwort für gefälschte Adresse

Ich finde jedoch, dass es scheint, wenn Sie einen Tippfehler machen, und eine Antwort zurückgibt, selbst wenn Sie einen Fehler gemacht haben.

Zum Beispiel gibt eine Anfrage für "Beverton, Ontario, Kanada" die lat/long für Beaverton zurück, ohne Angabe, dass Sie den falschen Städtenamen angegeben haben.

ich die CSV-Antworttyp bin mit, und ich erhalte die 200 Antwortcode.

Kann ich den Dienst entweder daran hindern oder, noch besser, herausfinden, ob er das hat?

Bearbeiten: um zu klären ... Google korrigiert die Eingabe (wenn ich erwarten würde, dass es nur fehlschlägt) und ich muss wissen, ob es das getan hat.

+0

ich denke, die CSV-Antworttyp die am wenigsten detaillierte aller Optionen ist. Siehe meine Antwort unten für eine mögliche Alternative. –

+0

Ich konnte kein "Beverton, Ontario" mit einem Kartendienst finden. Bist du sicher, dass es korrekt ist? http://geonames.nrcan.gc.ca/search/search_e.php –

+0

Richtig, es gibt keine "Beverton" ... die Stadt ist "Beaverton" (man beachte das A) – Buzz

Antwort

3

Es gibt keine Möglichkeit für den Geocoder, damit Sie wissen, wenn sie denkt, dass Sie einen Tippfehler hatte. Ich stimme Sauls Antwort zu, dass es am besten ist, Ihre Anfrage mit der Antwort zu vergleichen.

Ich wollte nur darauf hinweisen, dass Sie mehrere Elemente Ihrer Eingabe gegen mehrere der Antwortwerte überprüfen müssen, um die Elemente zu finden, die übereinstimmen sollten. In diesem Fall wurde "Beaverton" innerhalb von "DependentLocalityName" gefunden.

<?xml version="1.0" encoding="UTF-8" ?> 
<kml xmlns="http://earth.google.com/kml/2.0"><Response> 
    <name>Beverton, Ontario, Canada</name> 
    <Status> 
    <code>200</code> 
    <request>geocode</request> 
    </Status> 
    <Placemark id="p1"> 

    <address>Beaverton, Brock, ON, Canada</address> 
    <AddressDetails Accuracy="4" xmlns="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0"><Country><CountryNameCode>CA</CountryNameCode><CountryName>Canada</CountryName><AdministrativeArea><AdministrativeAreaName>ON</AdministrativeAreaName><SubAdministrativeArea><SubAdministrativeAreaName>Durham Regional Municipality</SubAdministrativeAreaName><Locality><LocalityName>Brock</LocalityName><DependentLocality><DependentLocalityName>Beaverton</DependentLocalityName></DependentLocality></Locality></SubAdministrativeArea></AdministrativeArea></Country></AddressDetails> 
    <ExtendedData> 
     <LatLonBox north="44.4502166" south="44.4183470" east="-79.1199562" west="-79.1839858" /> 
    </ExtendedData> 

    <Point><coordinates>-79.1519710,44.4342840,0</coordinates></Point> 
    </Placemark> 
</Response></kml> 

Update:

Dies unmöglich sein kann, tatsächlich umzusetzen. Wenn Sie "Beverton, Ontario, Kanada" eingeben, woher wissen Sie, auf welches dieser drei Wörter Sie achten müssen? Zwei von ihnen passen gut zusammen. Was ist, wenn sie in einer anderen Reihenfolge eingegeben werden?

+0

Dies stellt sich als wahr heraus. Persönlich finde ich es seltsam, dass die API eine Antwort auf eine ganz andere Anfrage zurückgibt, als Sie angegeben haben, ohne es Ihnen zu sagen! – Buzz

+0

Es klingt für mich so, als ob der Geocoding-Service von Google Raum für Verbesserungen bietet.Vielleicht könnten sie irgendwie anzeigen, dass eine "unscharfe" Antwort in den Standortdaten bereitgestellt wurde. –

0

HINWEIS: über die answer by @Chris B See. Wie Chris betont, ist dies möglicherweise nicht möglich.

Haben Sie den CSV-Antworttyp verwenden? Wenn nicht, bieten die anderen Antworttypen wie KML genügend Details, um den Speicherort zu bestimmen, auf den sich die Koordinaten beziehen. Sie können Ihre Eingabe anhand des LocalityName-Elements der Antwort überprüfen.

<kml xmlns="http://earth.google.com/kml/2.0"> 
    <Response> 
    <name>1600 amphitheatre mountain view ca</name> 
    <Status> 
     <code>200</code> 
     <request>geocode</request> 
    </Status> 
    <Placemark> 
     <address> 
     1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA 
     </address> 
     <AddressDetails Accuracy="8"> 
     <Country> 
      <CountryNameCode>US</CountryNameCode> 
      <AdministrativeArea> 
      <AdministrativeAreaName>CA</AdministrativeAreaName> 
      <SubAdministrativeArea> 
      <SubAdministrativeAreaName>Santa Clara</SubAdministrativeAreaName> 
      <Locality> 
       <LocalityName>Mountain View</LocalityName> 
       <Thoroughfare> 
       <ThoroughfareName>1600 Amphitheatre Pkwy</ThoroughfareName> 
       </Thoroughfare> 
       <PostalCode> 
       <PostalCodeNumber>94043</PostalCodeNumber> 
       </PostalCode> 
      </Locality> 
      </SubAdministrativeArea> 
     </AdministrativeArea> 
     </Country> 
    </AddressDetails> 
    <Point> 
     <coordinates>-122.083739,37.423021,0</coordinates> 
    </Point> 
    </Placemark> 
    </Response> 
</kml> 
+0

Zusätzlich können Sie einen JSON- oder XML-Antworttyp verwenden, um die gleichen Daten zu erhalten. –

Verwandte Themen