Heim  >  Artikel  >  Backend-Entwicklung  >  So implementieren Sie Geokodierung mit Python

So implementieren Sie Geokodierung mit Python

高洛峰
高洛峰Original
2016-11-21 17:52:252688Durchsuche

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

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.


Stellungnahme:
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
Vorheriger Artikel:Python-ListengeneratorNächster Artikel:Python-Listengenerator