Heim >Backend-Entwicklung >Python-Tutorial >So implementieren Sie Geokodierung mit Python
Am Beispiel der Logistikbranche analysiert dieser Artikel die Anwendungsmethoden von PostgreSQL und Greenplum in der Logistikbranche im Hinblick auf die Verarbeitung geografischer Standortinformationen, optimale Pfadalgorithmen und maschinelles Lernen. Darin wurde das Problem der Konvertierung von Adressen in Koordinaten erwähnt. Ein professionellerer Begriff wäre „Geokodierung“, d Standortinformationen ( 40.116) oder umgekehrt.
Geokodierungskonzept
Viele kartenbezogene Anbieter bieten entsprechende APIs an, und wir können diese APIs direkt verwenden, um diese Informationen zu erhalten. Zum Beispiel die Geocoding-API von Baidu.
Geokodierungs-API ist eine Art Schnittstelle, die zur Bereitstellung von Konvertierungsdiensten von Adressen in Längen- und Breitengradkoordinaten oder von Längen- und Breitengradkoordinaten in Adressen verwendet wird. Benutzer können zum Senden C#, C, Java und andere Entwicklungssprachen verwenden Anfragen und Empfang von JSON- und XML-Rückgabedaten. Die Geokodierungs-API umfasst Geokodierungs- und umgekehrte Geokodierungsfunktionen:
Ausleihen eines intuitiveren Bildes aus dem ESRI-Dokument
Geokodierung : Das heißt, die Längen- und Breitengradinformationen von Baidu können von der detaillierten strukturierten Adresse bis zur Straße abgerufen werden. Beispiel: „Nr. 27, Zhongguancun South Street, Haidian District, Peking“ Das Ergebnis der Adressauflösung ist „lng“. :116.31985,lat:39.959836". Gleichzeitig unterstützt die Geokodierung auch die direkte Analyse der Namen von Sehenswürdigkeiten und Wahrzeichen, um den Breiten- und Längengrad von Baidu zurückzugeben. Das Ergebnis der Adressanalyse von „Baidu Building“ ist beispielsweise „lng:116.30815,lat:40.056885“. .
Umgekehrte Geokodierung: Das heißt, umgekehrte Geokodierung, die strukturierte Adressinformationen aus Baidu-Längen- und Breitengradinformationen erhält. Beispiel: „lat:31.325152,lng:120.558957“ Das Ergebnis der umgekehrten Geokodierung ist „Bezirk Huqiu, Suzhou“. Stadt, Provinz Jiangsu Nr. 318 Tayuan Road“.
Eine Sache muss jedoch erklärt werden: Wenn Sie die API von Baidu nutzen möchten, müssen Sie über ein Baidu-Konto verfügen und den entsprechenden Schlüssel beantragen. Tatsächlich verfügen neben Baidu auch Google, ESRI, Microsoft Bing usw. über ähnliche Geokodierungsdienste. Die meisten dieser Dienste verfügen jedoch nicht über spezielle Bibliotheken für Python und ihre JSON-Strukturen sind untereinander inkonsistent. Deshalb hat der Python-Meister, der sich auf den Umgang mit Unzufriedenheit spezialisiert hat, ein spezielles Geokodierungstool Geocoder entwickelt, um die Dienste dieser verschiedenen Hersteller zu integrieren und zu vereinheitlichen.
Geokodierungstool Geocoder
Werfen wir zunächst einen Blick auf die Geokodierungsdienste der Unternehmen, die es unterstützt:
Installation
pip install geocoder
Geokodierung
import geocoder g = geocoder.google("1403 Washington Ave, New Orleans, LA 70130") g = geocoder.arcgis(u"北京市海淀区上地十街10号") g.latlng
Die Ausgabe ist
[29.9287839, -90.08421849999999]
Sie können auch den vollständigen Geojson anzeigen
g.geojson
Die Ausgabe ist
{'bbox': [-90.0855674802915, 29.9274349197085, -90.0828695197085, 29.9301328802915], 'geometry': {'coordinates': [-90.08421849999999, 29.9287839], 'type': 'Point'}, 'properties': {'accuracy': u'ROOFTOP', 'address': u'1403 Washington Ave, New Orleans, LA 70130, USA', 'bbox': [-90.0855674802915, 29.9274349197085, -90.0828695197085, 29.9301328802915], 'city': u'New Orleans', 'confidence': 9, 'country': u'US', 'county': u'Orleans Parish', 'encoding': 'utf-8', 'housenumber': u'1403', 'lat': 29.9287839, 'lng': -90.08421849999999, 'location': '1403 Washington Ave, New Orleans, LA 70130', 'neighborhood': u'Garden District', 'ok': True, 'place': u'ChIJGyFHWc2lIIYRYSoneaXAUiw', 'postal': u'70130', 'provider': 'google', 'quality': u'street_address', 'state': u'LA', 'status': 'OK', 'status_code': 200, 'street': u'Washington Ave'}, 'type': 'Feature'}
Der Versuch, die chinesische Adresse direkt über Google abzufragen, schlug fehl
g = geocoder.google(u"北京市海淀区上地十街10号") g.ok
Die Ausgabe ist
False
Mit Baidu sollte es in Ordnung sein, aber ich habe es nicht getan den entsprechenden Schlüssel beantragen. Auf Arcgis umgestellt und konnte
g = geocoder.arcgis(u"北京市海淀区上地十街10号") g.latlng
erfolgreich kodieren und die Ausgabe war
[40.050934, 116.30079]
Reverse Geocoding
g = geocoder.google([29.9287839, -90.08421849999999], method='reverse') print g.address print g.city print g.state print g.country
und die Ausgabe war
1403 Washington Ave, New Orleans, LA 70115, USA New Orleans LA US
Wechseln Sie zur chinesischen Adresse
g = geocoder.google([40.050934, 116.30079], method='reverse') print g.address print g.city print g.state print g.country
und die Ausgabe ist
Bai Du Da Sha, Haidian Qu, Beijing Shi, China, 100193 Beijing Beijing Shi CN
Versuchen Sie es mit dem ArcGIS-Dienst
g = geocoder.arcgis([40.050934, 116.30079], method='reverse') print g.address print g.city print g.state print g.country
Die Ausgabe ist
None 北京市 北京市 CHN
Google wandelt es ins Englische um, aber die Adresse ist relativ vollständig. Obwohl arcgis auf Chinesisch ist, wird die detaillierte Adresse tatsächlich als „Keine“ ausgegeben, was nützlich ist.
Andere
Die Funktionen des Geocoders sind mehr als das, er kann auch IP (einschließlich Ihrer eigenen) überprüfen.
g = geocoder.ip('199.7.157.0') print g.latlng print g.city g = geocoder.ip('me') print g.latlng print g.city
Die Ausgabe ist
[43.6934, -79.4857] Toronto [51.05, 13.75] Dresden
Abfrage des räumlichen Begrenzungsrahmens einer Stadt
g = geocoder.arcgis(u"山东") g.bbox
Die Ausgabe ist
{'northeast': [38.976997, 121.976998], 'southwest': [33.022997, 116.022998]}
Zusammenfassung
Räumliche Informationen können durch Textinformationen wie Verwaltungseinheiten und physische geografische Gebiete beschrieben oder durch Koordinatensysteme und Zahlen (Postleitzahlen usw.) identifiziert werden. Mithilfe der Geokodierungstechnologie können geografische Standortelemente räumlicher Informationen mit entsprechenden Textinformationen verknüpft werden. In diesem Artikel wird hauptsächlich das Geokodierungstool Geocoder vorgestellt, das die von Karten und anderen verwandten Herstellern bereitgestellten Geokodierungsdienste bequem und schnell nutzen kann, um den im Text beschriebenen Standort in Längen- und Breitengrade auf der Karte umzuwandeln oder die entsprechenden Koordinaten über einen bestimmten Standort auf der Karte zu erhalten Karte. Textbeschreibung der Standortinformationen.