Ich fange gerade mit GeoPy an und bin es gewesen Ich habe festgestellt, dass der Geocoder von Bing genauer ist als der von Google (zumindest für meine Zwecke), aber anstatt eine Postleitzahl zurückzugeben, gibt Bing <built-in function zip>
statt der Postleitzahl. Irgendwelche Gedanken darüber, warum / wie dies korrigiert werden kann?
Hier ist mein Testcode:
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)
Meine Ausgabe lautet:
<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 scheint konsistenter zu sein und gibt nur ein einziges korrektes Ergebnis statt zwei Ergebnisse zurück. Das einzige Problem ist, dass Bing aus irgendeinem Grund keine Postleitzahl zurückgeben möchte, sondern eine Zeichenfolge mit der Adresse und <built-in function zip>
.
Kommentare
- Ich kann ' dieses Verhalten nicht reproduzieren – ich sehe Postleitzahlen für jeden Beispieleintrag. Können Sie posten? Weitere Informationen zu Ihrem Betriebssystem, Ihrer Python-Version, Ihrer Geopy-Version usw.?
- Übrigens scheint diese Frage besser für stackoverflow.com geeignet zu sein.
- I ' Ich verwende Linux Mint 10, Python 2.7, GeoPy 0.94.1. Was verwenden Sie? Seltsam, dass ' für Sie funktioniert, also
geocoders.Bing('DEV KEY').geocode('854 NE 58th St, Seattle')
gibt die Adresse mit einer Postleitzahl zurück? PS, nicht - Ich ' verwende OS X Lion, Python 2.7.2, GeoPy 0.94.2 (das ' ist das, was PIP heruntergezogen hat). Ja, ich sehe die tatsächlichen Postleitzahlen für Bing-Ergebnisse, nicht < integrierte Funktion zip >.
- Okay, das sieht so aus, als wäre es das Problem. Ich ließ den Code von einem Freund ausführen und er erzielte die gleichen Ergebnisse wie Sie. Es sieht so aus, als ob das Problem, was auch immer es war, in GeoPy 0.94.2 behoben wurde. Deinstalliert 0.94.1, 0.94.2 installiert und ' ist jetzt alles in Ordnung.
Antwort
Ich bin mir nicht sicher, ob dies helfen würde, aber Sie könnten einen Adressüberprüfungsanbieter verwenden, der Geokodierung enthält. Ich bin ein Entwickler bei SmartyStreets, genau ein solcher Anbieter. Schauen Sie sich diese Beispiel-JSON-Antwort an (scrollen Sie nach unten).
Google und Bing sind Hervorragende Adressannäherungsdienste, aber Sie können Probleme mit den Lizenzvereinbarungen bekommen, je nachdem, was Sie erreichen möchten. Wir bieten einen kostenlosen Plan für immer für Kunden mit geringer Nutzung an, der für gemeinnützige Organisationen absolut kostenlos ist.
Kommentare
- Hey, das sieht so aus Großartig, ich denke, ich ' werde versuchen, dies zu versuchen. Sie ' haben Recht, dies ist besser in Bezug auf Lizenzvereinbarungen Vielen Dank.
- Aus Neugier, woher kommen Ihre Daten?
- Unsere Daten stammen vom USPS, mit dem SmartyStreets ein CASS-zertifizierter Lizenznehmer ist. de.wikipedia.org/wiki/Coding_Accuracy_Support_System