ホームページ >バックエンド開発 >Python チュートリアル >Python でジオコーディングを実装する方法
物流業界を例として、この論文では、地理的位置情報処理、最適なパス アルゴリズム、および機械学習の観点から、物流業界における PostgreSQL と Greenplum の適用方法を分析します。住所を座標に変換する問題については、より専門的な用語として「ジオコーディング」、つまり北京市海淀区上地十番街 10 号などの住所を知り、対応する経度と緯度を取得する方法について言及しました。位置情報 (40,116)、またはその逆。
ジオコーディングの概念
多くの地図関連ベンダーが関連 API を提供しており、これらの API を直接使用してこの情報を取得できます。たとえば、Baidu の Geocoding API です。
ジオコーディング API は、住所から経度および緯度の座標へ、または経度および緯度の座標から住所への変換サービスを提供するために使用されるインターフェイスの一種で、ユーザーは C#、C++、Java などの開発言語を使用してリクエストを送信および受信できます。データを JSON および XML で返します。ジオコーディング API には、住所解析およびリバース ジオコーディング機能が含まれています:
ESRI 文書からより直感的な図を借用します
ジオコーディング: つまり、住所解析、道路と同じくらい詳細な構造化住所から 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 を作成しました。
ジオコーダー
まず、サポートされている企業のジオコーディング サービスを確認してください:
インストール
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 ジオコーディング ツールを紹介します。このツールは、地図やその他の関連メーカーが提供するジオコーディング サービスを便利かつ迅速に使用して、テキストで記述された位置を地図上の経度と緯度に変換したり、地図上の特定の位置を通じて対応する座標を取得したりできます。地図上の位置情報の説明。