Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What is going on with this article?
@kojikanao

pythonでGeocoding

More than 1 year has passed since last update.

久しぶりにPythonのライブラリを試したので、備忘録として。
使ったのはgeopy と geocoder
Google Colabを使ったのでpythonのversionは3です。
https://colab.research.google.com/drive/1LlQ2131p4JV3IY9xOyZcGp_Wg3fRk2p3

インストール パッケージ

$ pip install geopy geocoder

https://github.com/geopy/geopy
https://github.com/DenisCarriere/geocoder

code geocoder

import geocoder

my_location = geocoder.ip('me')
my_location.geojson

Colabで実行したので、orgがGoogleになっています。
西の方のアドレスが出てくるのかと思ったんですが、ちゃんと自動で物理的に近いサーバに繋がるようになっているっぽいです。
ちなみに、コードを実行した場所はNYのダウンタウンです。

{'features': [{'geometry': {'coordinates': [-74.006, 40.7143],
    'type': 'Point'},
   'properties': {'address': 'New York City, New York, US',
    'city': 'New York City',
    'country': 'US',
    'hostname': '169.205.229.35.bc.googleusercontent.com',
    'ip': '35.229.205.169',
    'lat': 40.7143,
    'lng': -74.006,
    'ok': True,
    'org': 'AS15169 Google LLC',
    'postal': '10004',
    'raw': {'city': 'New York City',
     'country': 'US',
     'hostname': '169.205.229.35.bc.googleusercontent.com',
     'ip': '35.229.205.169',
     'loc': '40.7143,-74.0060',
     'org': 'AS15169 Google LLC',
     'postal': '10004',
     'readme': 'https://ipinfo.io/missingauth',
     'region': 'New York',
     'timezone': 'America/New_York'},
    'state': 'New York',
    'status': 'OK'},
   'type': 'Feature'}],
 'type': 'FeatureCollection'}
# 緯度経度
my_location.latlng

# 住所
my_location.address

住所は番地までは出てこないので、対応するデータの粒度が都市サイズとかだと、
ゴニョゴニョ簡単に出来そうです。

[40.7143, -74.006]
'New York City, New York, US'

code geopy

from geopy.geocoders import Nominatim
# locator作成
geolocator = Nominatim(user_agent="user", timeout=10)
location = geolocator.geocode('New York City, New York, US')
location.latitude, location.longitude
location = geolocator.reverse("40.7127281 -74.0060152")
location.address

比較のためにgeocoderが表示した住所を使ってみました。
geopyの方が細かく出るみたいです、Googleマップで見る限り、アドレスの精度は結構良さげです。
https://www.google.com/maps/place/40%C2%B042'45.8%22N+74%C2%B000'21.7%22W/@40.7127281,-74.0066803,18z/data=!3m1!4b1!4m5!3m4!1s0x0:0x0!8m2!3d40.7127281!4d-74.0060152

(40.7127281, -74.0060152)
'New York City Hall, 260, Broadway, Civic Center, Manhattan Community Board 1, Manhattan, New York County, New York, 10000, United States of America'

最後に東京タワーとタイムズスクウェアの距離を確認してみました。

from geopy import distance

loc_tokyo = geolocator.geocode("Tokyo tower, Tokyo, Japan")
loc_times_square = geolocator.geocode("Times Square, Manhattan, NY")
src = (loc_tokyo.latitude, loc_tokyo.longitude)
dist = (loc_times_square.latitude, loc_times_square.longitude)
distance.distance(src, dist).km
distance.distance(src, dist).miles

簡単に出せました。ただ、loc_tokyoの住所を見たら、
'東京タワー, 東京タワー通り, 麻布, 南青山6, 港区, 東京都, 105-0011, 日本 (Japan)'という知らない住所になりました。
多分、lat & lon でちゃんと東京とNYの場所を設定するば、精度は上がるのだと思います。

10870.216621346974 # km
6754.439461884453 # mile
0
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
kojikanao
software engineer in nyc ITP resident researcher2018-19 #creativecoding #physicalcomputing
engineerlife
技術力をベースに人生を謳歌する人たちのコミュニティです。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
0
Help us understand the problem. What is going on with this article?