So implementieren Sie Geokodierung mit Python

高洛峰
Freigeben: 2016-11-21 17:52:25
Original
2691 Leute haben es durchsucht

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:

So implementieren Sie Geokodierung mit Python

Ausleihen eines intuitiveren Bildes aus dem ESRI-Dokument

So implementieren Sie Geokodierung mit Python

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:

So implementieren Sie Geokodierung mit Python

Installation

pip install geocoder
Nach dem Login kopieren

Geokodierung

import geocoder
g = geocoder.google("1403 Washington Ave, New Orleans, LA 70130")
g = geocoder.arcgis(u"北京市海淀区上地十街10号")
g.latlng
Nach dem Login kopieren

Die Ausgabe ist

[29.9287839, -90.08421849999999]
Nach dem Login kopieren

Sie können auch den vollständigen Geojson anzeigen

g.geojson
Nach dem Login kopieren

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'}
Nach dem Login kopieren

Der Versuch, die chinesische Adresse direkt über Google abzufragen, schlug fehl

g = geocoder.google(u"北京市海淀区上地十街10号")
g.ok
Nach dem Login kopieren

Die Ausgabe ist

False
Nach dem Login kopieren

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
Nach dem Login kopieren

erfolgreich kodieren und die Ausgabe war

[40.050934, 116.30079]
Nach dem Login kopieren

Reverse Geocoding

g = geocoder.google([29.9287839, -90.08421849999999], method='reverse')

print g.address
print g.city
print g.state
print g.country
Nach dem Login kopieren

und die Ausgabe war

1403 Washington Ave, New Orleans, LA 70115, USA
New Orleans
LA
US
Nach dem Login kopieren

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
Nach dem Login kopieren

und die Ausgabe ist

Bai Du Da Sha, Haidian Qu, Beijing Shi, China, 100193
Beijing
Beijing Shi
CN
Nach dem Login kopieren

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
Nach dem Login kopieren

Die Ausgabe ist

None
北京市
北京市
CHN
Nach dem Login kopieren

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
Nach dem Login kopieren

Die Ausgabe ist

[43.6934, -79.4857]
Toronto
[51.05, 13.75]
Dresden
Nach dem Login kopieren

Abfrage des räumlichen Begrenzungsrahmens einer Stadt

g = geocoder.arcgis(u"山东")
g.bbox
Nach dem Login kopieren

Die Ausgabe ist

{'northeast': [38.976997, 121.976998], 'southwest': [33.022997, 116.022998]}
Nach dem Login kopieren

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.


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage