2009-07-21 22 views
6

Sistemimizde girilmiş bir şehir adının (bölge ve ülke) bulunduğunu ve lat/long değerini almak için google geocoding hizmetini kullanıyorum. Ancak, bir yazım hatası yaparsanız ve bir hata yapmış olsanız bile bir yanıt döndürdüğünüzü sanırım 'sanırım' gibi görünüyor. Örneğin, "Beverton, Ontario, Canada" için bir istek, yanlış şehir adı verdiğinizi belirten Beaverton için lat/long değerini döndürür.Google geocoding hizmeti, sahte adrese yanıtı döndürür

CSV yanıt türünü kullanıyorum ve 200 yanıt kodunu alıyorum.

Ya hizmetin bunu yapmasını engelleyebilir miyim, yoksa daha iyisi, olup olmadığını öğrenebilir miyim?

Düzenleme: açıklığa kavuşturmak ... Google girişi düzeltir (sadece başarısız olmasını beklediğimde) ve bunu yapıp yapmadığını bilmem gerekir.

+0

Bence CSV yanıt türü, tüm seçeneklerin en az detayıdır. Olası bir alternatif için cevabımı aşağıya bakın. –

+0

Herhangi bir harita hizmeti ile bir "Beverton, Ontario" bulamadık. Doğru olduğuna emin misin? http://geonames.nrcan.gc.ca/search/search_e.php –

+0

Doğru, "Beverton" yok ... şehir "Beaverton" (not A) – Buzz

cevap

3

Coğrafi kod yazıcının bir yazım hatası olduğunu düşündüğünüzü bilmesini sağlamanın bir yolu yoktur. Saul'un cevabına katılıyorum, en iyi bahisten cevabınızı sorguya karşı kontrol etmektir.

Sadece eşleşmesi gereken öğeleri bulmak için girdinizin çeşitli öğelerini, yanıt değerlerinin birkaçına karşı kontrol etmeniz gerektiğini belirtmek istedim. Bu durumda, "DependentLocalityName" içinde "Beaverton" bulundu.

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

Güncelleme:

Bu aslında uygulamak imkansız olabilir. Girişiniz "Beverton, Ontario, Kanada" ise, bu üç kelimeden hangisinin kontrol edileceğini nasıl biliyorsunuz? İki tanesi iyi bir şekilde eşleşecek. Ya farklı bir sıraya girilirse?

+0

Bu, doğru olduğu ortaya çıkıyor. Şahsen, API'nın size vermeden, verdiğinizden tamamen farklı bir istek için bir cevap vermesi garip olduğunu düşünüyorum! – Buzz

+0

Google'ın coğrafi kodlama hizmetinin iyileştirme alanı olduğu gibi geliyor.Belki de bir şekilde konum verilerinde "bulanık" bir yanıt verildiğini gösterebilirler. –

0

NOT: Yukarıdaki answer by @Chris B bakınız. Chris'in işaret ettiği gibi, bunu uygulamak imkansız olabilir.

CSV yanıt türünü kullanmak zorunda mısın? Aksi takdirde, KML gibi diğer yanıt türleri, koordinatların başvurduğu yeri belirlemek için yeterli bilgi sağlar. Girdinizi yanıt veren LocalityName öğesine karşı doğrulayabilirsiniz.

<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

Ayrıca, aynı verileri elde etmek için bir JSON veya XML yanıt tipi kullanabilirsiniz. –

İlgili konular