Właśnie zaczynam pracę z GeoPy i już przeprowadzam testy w celu określenia jakości różnych dostępnych geokoderów. Zauważyłem, że geokoder Bing jest dokładniejszy niż Google (przynajmniej do moich celów), ale zamiast zwracać kod pocztowy, Bing zwraca <built-in function zip> zamiast kodu pocztowego. Jakieś przemyślenia, dlaczego / jak to naprawić?

Oto mój kod testowy:

from geopy import geocoders g = geocoders.Google() b = geocoders.Bing("<DEV KEY HERE>") services = [g, b] def search_list(addylist): for address in addylist: for x in services: for place, (lat, lng) in x.geocode(address, exactly_one=False): print "%s: %s: %.9f, %.9f \n" % (x, place, lat, lng) addy1 = "513 N 36th Ave , Seattle" addy2 = "121 S First Street , La Conner" addy3 = "854 NE 58th St, Seattle" addylist = [addy1, addy2, addy3] search_list(addylist) 

Moje wyniki to:

<geopy.geocoders.google.Google object at 0x18e75d0>: 513 36th Ave, Seattle, WA 98122, USA: 47.606811900, -122.287247300 <geopy.geocoders.google.Google object at 0x18e75d0>: 513 N 36th St, Seattle, WA 98103, USA: 47.651385400, -122.351573800 <geopy.geocoders.bing.Bing object at 0x18e76d0>: 513 N 36TH St, Seattle, WA <built-in function zip>, United States: 47.651340485, -122.351692200 <geopy.geocoders.google.Google object at 0x18e75d0>: 121 1st St, La Conner, WA 98257, USA: 48.391576600, -122.496045800 <geopy.geocoders.google.Google object at 0x18e75d0>: 121 N 1st St, La Conner, WA 98257, USA: 48.394719800, -122.494525700 <geopy.geocoders.bing.Bing object at 0x18e76d0>: 121 S 1ST St, La Conner, WA <built-in function zip>, United States: 48.391513824, -122.495391846 <geopy.geocoders.google.Google object at 0x18e75d0>: 854 NE 58th St, Seattle, WA 98105, USA: 47.670977000, -122.317815000 <geopy.geocoders.bing.Bing object at 0x18e76d0>: 854 NE 58TH St, Seattle, WA <built-in function zip>, United States: 47.670978546, -122.317817688 

Bing wydaje się być bardziej spójny, zwracając tylko jeden poprawny wynik, a nie dwa wyniki. Jedynym problemem jest to, że z jakiegoś powodu Bing nie chce zwrócić kodu pocztowego, a raczej zwraca ciąg zawierający adres i <built-in function zip>.

Komentarze

  • Nie mogę ' odtworzyć to zachowanie – widzę kody pocztowe dla każdego przykładowego wpisu. Czy możesz wysłać więcej informacji o twoim systemie operacyjnym, wersji Pythona, wersji geopy itp.?
  • Przy okazji, to pytanie wydaje się bardziej pasować do stackoverflow.com.
  • I ' m korzystam z Linux Mint 10, Python 2.7, GeoPy 0.94.1. Czego używasz? Dziwne, że ' pracuje dla Ciebie, więc geocoders.Bing('DEV KEY').geocode('854 NE 58th St, Seattle') zwraca adres w komplecie z kodem pocztowym? PS, a nie
  • I ' korzystam z OS X Lion, Python 2.7.2, GeoPy 0.94.2 (to ' jest tym, co pobrał PIP). Tak, widzę rzeczywiste kody pocztowe dla wyników Bing, a nie < wbudowana funkcja zip >.
  • OK, wygląda na to, że to był problem. Mój przyjaciel uruchomił kod i uzyskał takie same wyniki jak ty. Wygląda na to, że problem, cokolwiek to było, został rozwiązany w GeoPy 0.94.2. Odinstalowano 0.94.1, zainstalowałem 0.94.2 i ' jest teraz w porządku.

Odpowiedź

Nie jestem pewien, czy to pomogłoby, ale możesz skorzystać z dostawcy weryfikacji adresu, który obejmuje geokodowanie. Jestem programistą w SmartyStreets, właśnie takim dostawcą. Zobacz ten przykład odpowiedzi JSON (przewiń w dół).

Google i Bing to świetne usługi przybliżania adresów, ale możesz napotkać problemy z ich umowami licencyjnymi w zależności od tego, co próbujesz osiągnąć. Oferujemy darmowy plan na zawsze dla klientów o niskim poziomie wykorzystania, który jest całkowicie bezpłatny dla organizacji non-profit.

Komentarze

  • Hej, to wygląda świetnie, myślę, że ' spróbuję tego spróbować. ' masz prawo, to jest lepsze pod względem umów licencyjnych za mój projekt. Dzięki.
  • Z ciekawości, skąd pochodzą twoje dane?
  • Nasze dane pochodzą z USPS, z którym SmartyStreets jest licencjobiorcą z certyfikatem CASS. en.wikipedia.org/wiki/Coding_Accuracy_Support_System

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *