最近はPython使って位置情報をごりごり加工してますコンバンハ。

以前はMongoDBを使って半径XXKm以内にある建物を求めるってことをやりました。今回は2つの座標間の距離を求めてみます。すっごく簡単なのでオススメ。
パッケージはpyprojを使います。
pyprojインストール
$ pip install pyproj
コード
[python title="getdistance.py"]
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from pyproj import Geod
class GetDistance:
def get_distance(self, start, to):
"""
pyprojを使って距離を求める
"""
res = u'[ %(from)s ]から[ %(to)s ]まで %(distance_str)s (%(distance)s)'
q = Geod(ellps='WGS84')
fa, ba, d = q.inv(start['lon'], start['lat'], to['lon'], to['lat'])
print res % {
'from' : start['name'],
'to' : to['name'],
'distance_str' : self._cutdown(d),
'distance' : d,
}
def _cutdown(self, num):
"""
距離に単位をつけて返す
1000m以下の時はメートル表記、
それ以上の時はキロメートル表記で返す。
"""
val = int(round(num))
if val < 1000:
return '%sm' % val
else:
km = val * 0.001
return '%sKm' % round(km, 1)
if __name__ == '__main__':
# 東京タワー
tokyo_tw = {
'name': u'東京タワー',
'lat' : 35.65861,
'lon' : 139.745447,
}
# 芝公園
shiba_park = {
'name': u'芝公園',
'lat' : 35.654071,
'lon' : 139.749838,
}
# スカイツリー
skytree = {
'name': u'スカイツリー',
'lat' : 35.71007,
'lon' : 139.80948,
}
# 富士山
mt_fuji = {
'name': u'フジサーン',
'lat' : 35.360556,
'lon' : 138.727778,
}
g = GetDistance()
g.get_distance(tokyo_tw, shiba_park)
g.get_distance(tokyo_tw, skytree)
g.get_distance(skytree, mt_fuji)
g.get_distance(tokyo_tw, mt_fuji)
[/python]
実行結果:
[ 東京タワー ]から[ 芝公園 ]まで 642m (641.660523655) [ 東京タワー ]から[ スカイツリー ]まで 8.1Km (8136.21631144) [ スカイツリー ]から[ フジサーン ]まで 105.5Km (105484.921113) [ 東京タワー ]から[ フジサーン ]まで 98.1Km (98064.787889)
お手軽ー(・∀・)!
以前書いた「MongoDB使って任意の範囲内のデータを求める方法」と合わせて使うと面白いかと思います。