Jag har precis börjat med GeoPy och har varit kör några tester för att bestämma kvaliteten på de olika tillgängliga geokodrarna. Jag har märkt att Bings geokodare är mer exakt än Googles (för mina ändamål, åtminstone), men istället för att returnera ett postnummer returnerar Bing <built-in function zip> snarare än postnummer. Några tankar om varför / sätt att korrigera detta?

Här är min testkod:

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) 

Min utdata är:

<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 verkar vara mer konsekvent och ger bara ett enda korrekta resultat snarare än två resultat. Det enda problemet är att Bing inte verkar vilja returnera ett postnummer, av någon anledning, utan returnerar en sträng som innehåller adressen och <built-in function zip>.

Kommentarer

  • Jag kan ' inte verkar återge detta beteende – Jag ser postnummer för varje exempelpost. Kan du lägga upp mer information om ditt operativsystem, pythonversion, geopy-version osv …?
  • BTW, den här frågan verkar mer lämpad för stackoverflow.com.
  • I ' använder Linux Mint 10, Python 2.7, GeoPy 0.94.1. Vad använder du? Konstigt att det ' fungerar för dig, så geocoders.Bing('DEV KEY').geocode('854 NE 58th St, Seattle') returnerar tillägget komplett med ett postnummer? PS, inte
  • Jag ' m som kör OS X Lion, Python 2.7.2, GeoPy 0.94.2 (att ' är vad PIP drog ner). Ja, jag ser de faktiska postnummer för bing-resultat, inte < inbyggd funktion zip >.
  • Okej, det ser ut som det var problemet. Jag fick en vän att köra koden och han fick samma resultat som du. Det ser ut som att problemet, vad det än var, löstes i GeoPy 0.94.2. Avinstallerat 0.94.1, installerat 0.94.2 och det ' är allt bra nu.

Svar

Inte säker på om detta skulle hjälpa, men du kan använda en adressverifieringsleverantör som inkluderar geokodning. Jag är en utvecklare på SmartyStreets, bara en sådan leverantör. Kolla in det här exempel på JSON-svar (bläddra nedåt.

Google och Bing är bra adress approximation tjänster men du kan stöta på problem med deras licensavtal beroende på vad du försöker åstadkomma. Vi erbjuder en gratis plan för alltid för kunder med låg användning, och den är helt gratis för ideella organisationer.

Kommentarer

  • Hej, det här ser ut jättebra, jag tror att jag ' ska försöka ge det här en chans. Du ' har rätt, det här är bättre när det gäller licensavtal för mitt projekt. Tack.
  • Av nyfikenhet, var kommer dina data ifrån?
  • Våra uppgifter kommer från USPS, som SmartyStreets är en CASS-certifierad licenstagare med. en.wikipedia.org/wiki/Coding_Accuracy_Support_System

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *