ホームページ  >  記事  >  バックエンド開発  >  Python でジオコーディングを実装する方法

Python でジオコーディングを実装する方法

高洛峰
高洛峰オリジナル
2016-11-21 17:52:252688ブラウズ

物流業界を例として、この論文では、地理的位置情報処理、最適なパス アルゴリズム、および機械学習の観点から、物流業界における PostgreSQL と Greenplum の適用方法を分析します。住所を座標に変換する問題については、より専門的な用語として「ジオコーディング」、つまり北京市海淀区上地十番街 10 号などの住所を知り、対応する経度と緯度を取得する方法について言及しました。位置情報 (40,116)、またはその逆。

ジオコーディングの概念

多くの地図関連ベンダーが関連 API を提供しており、これらの API を直接使用してこの情報を取得できます。たとえば、Baidu の Geocoding API です。

ジオコーディング API は、住所から経度および緯度の座標へ、または経度および緯度の座標から住所への変換サービスを提供するために使用されるインターフェイスの一種で、ユーザーは C#、C++、Java などの開発言語を使用してリクエストを送信および受信できます。データを JSON および XML で返します。ジオコーディング API には、住所解析およびリバース ジオコーディング機能が含まれています:

Python でジオコーディングを実装する方法

ESRI 文書からより直感的な図を借用します

Python でジオコーディングを実装する方法

ジオコーディング: つまり、住所解析、道路と同じくらい詳細な構造化住所から Baidu の緯度と経度の情報を取得します例: 「北京市海淀区中関村南街 27 号」のアドレス解決結果は「lng:116.31985,lat:39.959836」となります。同時に、ジオコーディングは、名所やランドマークの建物の名前を直接解析して、Baidu の緯度と経度を返すこともサポートしています。たとえば、「Baidu Building」の住所解析の結果は「lng:116.30815,lat:40.056885」です。 。

逆ジオコーディング: つまり、Baidu の経度と緯度の情報から構造化された住所情報を取得する逆住所解決です。 例: 「lat:31.325152,lng:120.558957」 逆住所解決の結果は「318 Tayuan Road, Huqiu District」となります。 、江蘇省蘇州市番号」。

ただし、1 つ説明する必要があるのは、Baidu の API を使用したい場合は、Baidu アカウントを取得し、対応するキーを申請する必要があるということです。実際、Baidu に加えて、Google、ESRI、Microsoft の Bing なども同様のジオコーディング サービスを提供しています。ただし、これらのサービスのほとんどには Python 専用のライブラリがなく、Json 構造が相互に矛盾しています。そこで、不満を専門とする Python マスターは、これらの異なるメーカーのサービスを統合して統合するための特別なジオコーディング ツール geocoder を作成しました。

ジオコーダー

まず、サポートされている企業のジオコーディング サービスを確認してください:

Python でジオコーディングを実装する方法

インストール

pip install geocoder

ジオコーディング

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

出力は

[29.9287839, -90.08421849999999]

です。完全な geojson

g.geojson

の出力も表示できます。

{'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'}

、Googleを使用して中国のアドレスを直接クエリしようとすると、失敗しました

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

出力は

False

Baiduを使用すると問題ないはずですが、対応するキーを申請していませんでした。 arcgis に切り替えて、正常にエンコードできるようになります

g = geocoder.arcgis(u"北京市海淀区上地十街10号")
g.latlng

出力は

[40.050934, 116.30079]

リバース ジオコーディング

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

print g.address
print g.city
print g.state
print g.country

出力は

1403 Washington Ave, New Orleans, LA 70115, USA
New Orleans
LA
US

中国の住所に変更します

g = geocoder.google([40.050934, 116.30079], method='reverse')
print g.address
print g.city
print g.state
print g.country

出力は

Bai Du Da Sha, Haidian Qu, Beijing Shi, China, 100193
Beijing
Beijing Shi
CN

arcgis サービスを使ってみます

g = geocoder.arcgis([40.050934, 116.30079], method='reverse')
print g.address
print g.city
print g.state
print g.country

出力は

None
北京市
北京市
CHN

Googleが英語に変換しますが、住所は比較的完成しています。 arcgis は中国語ですが、実際には詳細な住所が None として出力されるので便利です。

その他

ジオコーダーの機能はそれだけではなく、IP (自分のものを含む) もチェックできます。

g = geocoder.ip('199.7.157.0')
print g.latlng
print g.city
g = geocoder.ip('me')
print g.latlng
print g.city

出力は

[43.6934, -79.4857]
Toronto
[51.05, 13.75]
Dresden

都市の空間境界ボックスのクエリ

g = geocoder.arcgis(u"山东")
g.bbox

出力は

{'northeast': [38.976997, 121.976998], 'southwest': [33.022997, 116.022998]}

概要

空間情報は、行政区画や物理的地理的領域などのテキスト情報で表すこともできますし、座標系や数値(郵便番号など)で識別することもできます。ジオコーディング技術を使用すると、空間情報の地理的位置要素を対応するテキスト情報に関連付けることができます。この記事では主に geocoder ジオコーディング ツールを紹介します。このツールは、地図やその他の関連メーカーが提供するジオコーディング サービスを便利かつ迅速に使用して、テキストで記述された位置を地図上の経度と緯度に変換したり、地図上の特定の位置を通じて対応する座標を取得したりできます。地図上の位置情報の説明。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。