2009-07-21 10 views
6

Estoy usando el servicio de geocodificación de google para validar que existe un nombre de ciudad (más región y país) que ha sido ingresado en nuestro sistema y para obtener lat/long.El servicio de geocodificación de Google devuelve la respuesta para la dirección falsa

Sin embargo, me parece que parece 'adivinar' si hace un error tipográfico, y devuelve una respuesta incluso si cometió un error.

Por ejemplo, una solicitud para "Beverton, Ontario, Canadá" devuelve lat/long para Beaverton, sin indicación de que haya proporcionado el nombre de la ciudad equivocado.

Estoy usando el tipo de respuesta CSV y obtengo el código de respuesta 200.

¿Puedo evitar que el servicio haga esto o, mejor aún, averiguar si lo ha hecho?

Editar: para aclarar ... Google está corrigiendo la entrada (cuando esperaría que simplemente falle) y necesito saber si lo ha hecho.

+0

Creo que el tipo de respuesta CSV es el menos detallado de todas sus opciones. Vea mi respuesta a continuación para una posible alternativa. –

+0

No pude encontrar un "Beverton, Ontario" con ningún servicio de mapas. ¿Estás seguro de que es correcto? http://geonames.nrcan.gc.ca/search/search_e.php –

+0

Derecho, no hay "Beverton" ... la ciudad es "Beaverton" (observe la A) – Buzz

Respuesta

3

No hay forma de que el geocoder le diga si cree que tuvo un error tipográfico. Estoy de acuerdo con la respuesta de Saul, que su mejor opción es verificar su consulta en contra de la respuesta.

Solo quería señalar que tendrá que verificar varios elementos de su entrada contra varios de los valores de respuesta, para encontrar los elementos que deben coincidir. En este caso, "Beaverton" se encontró dentro de "DependentLocalityName".

<?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> 

Actualización:

esto puede ser imposible de implementar en realidad. Si su opinión es "Beverton, Ontario, Canadá", ¿cómo sabe cuál de esas tres palabras debe verificar? Dos de ellos coincidirán bien. ¿Qué sucede si se ingresan en un orden diferente?

+0

Esto resulta ser cierto. Personalmente, creo que es extraño que la API devuelva una respuesta para una solicitud totalmente diferente a la que nos proporcionó, ¡sin decírselo! – Buzz

+0

Me parece que el servicio de geocodificación de Google tiene margen de mejora.Quizás podrían de alguna manera indicar que se ha proporcionado una respuesta "borrosa" en los datos de ubicación. –

0

NOTA: Ver la answer by @Chris B anteriormente. Como Chris señala, esto puede ser imposible de implementar.

¿Tienes que usar el tipo de respuesta CSV? De lo contrario, los otros tipos de respuesta como KML proporcionan suficientes detalles para determinar la ubicación a la que se refieren las coordenadas. Puede verificar su entrada contra el elemento LocalityName de la respuesta.

<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

Además, puede usar un tipo de respuesta JSON o XML para obtener los mismos datos. –

Cuestiones relacionadas