Сервис геокодирования Google возвращает ответ на фальшивый адрес - PullRequest
6 голосов
/ 21 июля 2009

Я использую сервис геокодирования Google, чтобы проверить, что название города (плюс регион и страна), которое было введено в нашей системе, существует, и получить широту / долготу.

Тем не менее, я обнаружил, что он «угадывает», если вы делаете опечатку, и возвращает ответ, даже если вы допустили ошибку.

Например, запрос «Бевертон, Онтарио, Канада» возвращает лат / лонг для Бивертона без указания того, что вы указали неправильное название города.

Я использую тип ответа CSV и получаю код ответа 200.

Могу ли я запретить службе делать это или, еще лучше, узнать, есть ли у нее?

Редактировать: чтобы уточнить ... Google корректирует ввод (когда я ожидал, что он просто потерпит неудачу), и мне нужно знать, если он это сделал.

Ответы [ 3 ]

3 голосов
/ 22 июля 2009

Геокодер не может сообщить вам, если он считает, что вы опечатались. Я согласен с ответом Саула, что вам лучше всего проверить свой запрос на соответствие ответу.

Я просто хотел указать, что вам придется проверить несколько элементов вашего ввода по нескольким значениям ответа, чтобы найти элементы, которые должны совпадать. В этом случае «Бивертон» был найден внутри «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>

Обновление:

Это может быть невозможно на самом деле реализовать. Если вы вводите «Бевертон, Онтарио, Канада», как вы узнаете, какое из этих трех слов нужно проверить? Два из них будут совпадать просто отлично. Что если они введены в другом порядке?

0 голосов
/ 21 июля 2009

ПРИМЕЧАНИЕ. См. Ответ от @Chris B выше. Как указывает Крис, это может быть невозможно реализовать.

Нужно ли использовать тип ответа CSV? Если нет, другие типы ответов, такие как KML, предоставляют достаточно сведений для определения местоположения, к которому относятся координаты. Вы можете проверить свои данные по элементу LocalityName ответа.

<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 голосов
/ 21 июля 2009

Отвечает ли он «200 кодами успеха»? Есть вероятность, что он может дать вам другой код состояния.

Вот различные коды состояния, которые возвращает Google: http://code.google.com/apis/maps/documentation/reference.html#GGeoStatusCode

...