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
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
geocoders.Bing('DEV KEY').geocode('854 NE 58th St, Seattle')
returnerar tillägget komplett med ett postnummer? PS, inte