2009-07-21 4 views
6

J'utilise le service de géocodage google pour valider qu'un nom de ville (plus la région et le pays) qui a été entré dans notre système existe, et pour obtenir le lat/long.Le service de géocodage Google renvoie une réponse pour une fausse adresse

Cependant, je trouve qu'il semble «deviner» si vous faites une faute de frappe, et renvoie une réponse même si vous avez fait une erreur. Par exemple, une requête pour "Beverton, Ontario, Canada" renvoie le lat/long pour Beaverton, sans indiquer que vous avez fourni le mauvais nom de ville. J'utilise le type de réponse CSV et je reçois le code de réponse 200. Puis-je soit empêcher le service de le faire, ou, mieux encore, savoir si elle a?

Éditer: pour clarifier ... Google corrige l'entrée (quand je m'attendrais à ce qu'il échoue) et j'ai besoin de savoir si cela a été fait.

+0

Je pense que le type de réponse CSV est le moins détaillé de toutes vos options. Voir ma réponse ci-dessous pour une alternative possible. –

+0

Je n'ai pas trouvé de «Beverton, Ontario» avec un service de cartographie. Êtes-vous sûr que c'est correct? http://geonames.nrcan.gc.ca/search/search_f.php –

+0

À droite, il n'y a pas de «Beverton» ... la ville est «Beaverton» (notez le A) – Buzz

Répondre

3

Le géocodeur ne peut pas vous avertir s'il pense avoir eu une faute de frappe. Je suis d'accord avec la réponse de Saul, que votre meilleur pari est de vérifier votre requête contre la réponse. Je voulais juste souligner que vous devrez vérifier plusieurs éléments de votre entrée par rapport à plusieurs valeurs de réponse, afin de trouver les éléments qui doivent correspondre. Dans ce cas, "Beaverton" a été trouvé à l'intérieur 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> 

Mise à jour:

Cela peut être impossible de mettre réellement en œuvre. Si votre contribution est «Beverton, Ontario, Canada», comment savez-vous lequel de ces trois mots vérifier? Deux d'entre eux vont très bien. Et s'ils sont entrés dans un ordre différent?

+0

Cela s'avère être vrai. Personnellement, je trouve cela étrange pour l'API de renvoyer une réponse pour une requête totalement différente de celle que vous avez fournie, sans vous le dire! – Buzz

+0

Il me semble que le service de géocodage de Google peut encore être amélioré.Peut-être pourraient-ils indiquer qu'une réponse «floue» a été fournie dans les données de localisation. –

0

NOTE: Voir la answer by @Chris B ci-dessus. Comme Chris le fait remarquer, cela peut être impossible à mettre en œuvre.

Avez-vous besoin d'utiliser le type de réponse CSV? Si ce n'est pas le cas, les autres types de réponse tels que KML fournissent suffisamment de détails pour déterminer l'emplacement auquel les coordonnées se réfèrent. Vous pouvez vérifier votre entrée par rapport à l'élément LocalityName de la réponse.

<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

En outre, vous pouvez utiliser un type de réponse JSON ou XML pour obtenir les mêmes données. –

Questions connexes