LoginSignup
2
3

More than 5 years have passed since last update.

Pythonで世界地図-6

Last updated at Posted at 2018-05-22

グラフで座標を取得する方法がわかったので、

座標から経度・緯度を求める

方法を探しました。

実行例
./map1.py 東京
(全ての都市で使えるわけではなさそうです。ではなくて時間が掛かって失敗しているのか?何回かやれば表示されました。ローマ字だとすぐに表示されるようです。)

地図上をクリックすると、緯度・経度が表示されます。

間違っていたので修正しました。

map1.py
#!/usr/bin/python3
# coding: UTF-8

from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import numpy as np
from pygeocoder import Geocoder
import sys

font = {'family':'IPAGothic'} #日本語Fontを指定

args = sys.argv
argc = len(args) # 引数の個数

if (argc != 2):   # 引数がない場合
    print ('./map1.py 目的地の名称')
    quit()

area_name = args[1]

try:
    result = Geocoder.geocode(area_name)
    lon1 = float(result.longitude)
    lat1 = float(result.latitude)
except:
    quit()

map = Basemap(llcrnrlon=lon1-2,llcrnrlat=lat1-2,urcrnrlon=lon1+2,urcrnrlat=lat1+2,resolution='h',projection='cyl')

map.shadedrelief() #標高図
map.drawcoastlines()

map.drawmeridians(np.arange(0, 360, 10))
map.drawparallels(np.arange(-90, 90, 10))

try:
  while True:
    a=plt.ginput(n=1)[0]  #クリックして座標を取得
    b=map(a[0], a[1], inverse=True) #座標を緯度・経度に変換
    plt.title("東経{}° 北緯{}°".format(b[0],b[1]), **font)
except:
  pass

plt.show()

image.png
今、気が付きましたが、これを指定するとグラフの右下に表示される座標が、緯度・経度に代わっています。

2点間距離を求める

地図上を2箇所クリックする。

変更点

from mpl_toolkits.basemap import pyproj

try:
  while True:
    aa=plt.ginput(n=1)[0]  #クリックして座標を取得
    bb=map(aa[0], aa[1], inverse=True) #座標を緯度・経度に変換
    cc=plt.ginput(n=1)[0]  
    dd=map(cc[0], cc[1], inverse=True) 
    map.drawgreatcircle(bb[0],bb[1],dd[0],dd[1],linewidth=2,color='b')  #大圏コース
    gc = pyproj.Geod(a=map.rmajor,b=map.rminor) # ポイント間の距離計算
    az1, az2, dist12 = gc.inv(bb[0],bb[1],dd[0],dd[1])
    plt.title("2点間の距離= {} km".format(dist12/1000), **font)
except:
  pass

image.png

ウインドウの中で地球を動かすことができるか?

私が調べた範囲ではできないような気がする。

plt.show()を終了させることが、できなかった。
無限ループでウインドウの右上のXボタンで終了させて、次の表示まで10秒程度表示なしで繰り返すことくらいしか出来なかったので、アニメgifにしました。
白黒の地球で数分程度?、なんか寂しいので標高図(山の高さにより色が違う)にすると、ファイルサイズは3〜5倍程度だが、無限ループで360枚pngファイルを作成しようと思ったら、メモリ不足?作成時間はだんだん長くなるわ、エラーで止まるわ4時間程度かかった。
最後20枚程度は1枚1枚作成したら、それほど時間がかからなかった。メモリを開放しなければいけなかったのか?。

色の付いたアニメgifは出来ましたが、サイズオーバーでアップできませんでした。

a.gif

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3