覚え書きブログ

pythonでの地図表示

Pythonで地図を表示するためのライブラリとして、basemapというのがあるらしいので、早速使ってみた。

condaを使って、basemapと地図データをインストールする。

>conda install -c anaconda basemap
>conda install basemap-data-hires

さっそく、Basemapモジュールをpythonで読み込んでみると、以下のようなエラーがでた。

>python
>>> from mpl_toolkits.basemap import Basemap
Traceback (most recent call last):
  File "map_error.py", line 5, in <module>
    from mpl_toolkits.basemap import Basemap
  File "/home/hachiya/anaconda3/lib/python3.6/site-packages/mpl_toolkits/basemap/__init__.py", line 155, in <module>
    pyproj_datadir = os.environ['PROJ_LIB']
  File "/home/hachiya/anaconda3/lib/python3.6/os.py", line 669, in __getitem__
    raise KeyError(key) from None
KeyError: 'PROJ_LIB'

よく分からないエラーなので、ググってみたところ、basemapの問題ではなくて、使い方の問題だという話になっていた。
https://github.com/conda-forge/basemap-feedstock/issues/30

そして、Basemapの前に以下のコードを入れると解決するとのこと。

import os
import conda

conda_file_dir = conda.__file__
conda_dir = conda_file_dir.split('lib')[0]
proj_lib = os.path.join(os.path.join(conda_dir, 'share'), 'proj')
os.environ["PROJ_LIB"] = proj_lib

from mpl_toolkits.basemap import Basemap

以下のサイトを参考に、日本地図上の所定の座標にテキストを描画するmap.pyというpythonコードを作成して、実行してみた。
qiita.com

import numpy as np
import matplotlib.pyplot as plt
import os
import conda

#-----------------
# added by Hachiya
conda_file_dir = conda.__file__
conda_dir = conda_file_dir.split('lib')[0]
proj_lib = os.path.join(os.path.join(conda_dir, 'share'), 'proj')
os.environ["PROJ_LIB"] = proj_lib
#-----------------


from mpl_toolkits.basemap import Basemap

fig = plt.figure(figsize=(8,4))
m = Basemap(projection='merc',
                 resolution='h',
                 llcrnrlon=131,
                 llcrnrlat=33,
                 urcrnrlon=141,
                 urcrnrlat=38)

m.drawcoastlines(color='lightgray')
m.drawcountries(color='lightgray')
m.fillcontinents(color='white', lake_color='#eeeeee');
m.drawmapboundary(fill_color='#eeeeee')
#m.drawparallels(np.arange(31.0, 38.1, 1.0), labels = [1,0,0,0], fontsize=12)
#m.drawmeridians(np.arange(132.0, 140.1, 2.0), labels = [0,0,0,1], fontsize=12)

sumoto_lon = 134.7687
sumoto_lat = 34.3755
hiratsuka_lon = 139.3581
hiratsuka_lat = 35.3587

x1,y1 = m(sumoto_lon, sumoto_lat)
x2,y2 = m(hiratsuka_lon, hiratsuka_lat)
m.plot(x1, y1, 'm.', markersize=10)
m.plot(x2, y2, 'm.', markersize=10)
plt.text(x1 + 10000, y1 + 10000, u"sumoto")
plt.text(x2 + 10000, y2 + 10000, u"hiratsuka")

plt.show()
fig.savefig('map.png')

f:id:hirotaka_hachiya:20190127220038p:plain

和歌山でノースフェイスのダウンが無くなる

2019年1月14日の12時15分頃に、スーパーセンターオークワセントラルシティ和歌山店の理容室を出た男性の方。間違って私のノースフェイスのダウン(以下の写真を参照)を着ていったと思います。たいして高価なものではないですが、愛着があるものですので、出来たら理容室にご返却ください。よろしくお願いします。

f:id:hirotaka_hachiya:20190114221728j:plain

今日お昼頃に、スーパーセンターオークワセントラルシティ和歌山店にある理容室で、息子と一緒に散髪をし会計を済ませ帰ろうとしたら、ハンガーにかけておいたノースフェイスのダウンが無くなっていた。。。息子のダウンと隣同士で私のダウンを、私自信がかけたはずなのに、いざ帰ろうとしたら、息子のダウンはあるものの、私のダウンが無いのである。

私の前に一人散髪を済ませ出て行った方がいるという(息子と店長さんの証言)ので、理容室の周辺や、オークワの中や、100円ショップさらには、スポーツゼビオのなかを探してみたものの見当たらない。。。こういったことは初めて経験するので、どう対応してよいのかわからないので、とりあえず110番して警察に来てもらった。

警察が、店長さんや私から状況を聞いて、さらに、監視カメラの画像を理容室の本社に確認してもらったところ、年配の男性の方が着ていったとのこと、そして、私のノースフェイスとのダウンとは、色や素材が全く異なるダウンが残されていたとのこと

警察の説明は以下の通りだった。

ー監視カメラ画像は、理容室本社の方に確認してもらい、外から誰かが入ってきて取っていったなどの事件性はないことがわかった
ー年配の方が持ってい行って、自分のダウンを残しているので、故意とは言い切れない。常識のある人なら、直ぐに返しにくるはず
ー監視カメラ画像は、個人情報の問題があるので、警察も見ることができない
ー残されたダウンに対する指紋採取などの捜査は、汚してしまうので出来ない
ー着ていった方の特徴は聞いたので、記録として残しておき、合致する場合には職質をするなどの対応をする

これに対して私の主張は以下の通りである。

ー色や着た時の感触で違うのは明確。良識や常識があり正しい判断できる人なら、そもそも着る前に気づくし、万が一着たとしても、直ぐに戻すはずなのに、まだ戻しに来ない
ー故意であろうがなかろうが、被害を受けたという事実に変わりはない
ー故意かどうか客観的に判断ができないという理由で、この事案を終わりにするのであれば、法律や警察の捜査の隙間を狙って簡単に犯罪を起こせてしまうではないか
ー監視カメラの画像を入手することに個人情報の問題があるというが、私のダウンに個人を特定できるもの(免許証など)が入っていたら、私の個人情報が一方的に侵害されてしまう
ー私にも、誰が私のダウンを持っていったかを知る権利がある。もし似たような方が私のダウンを着ていたら声をかけたい。

この主張を受けて警察は、以下のように対応してくださった。

ー理容室本社が許可するのであれば、私のダウンを持っていった方の監視カメラ画像を見れるようにする
ー他にも同様の被害が連続して起きれば、事件性があると判断し捜査を始める。

私の主張と警察官の指導により、店長さんは以下のように対応してくださった。

ー理容室本社が許可したので、私のダウンを持っていった方の様子がわかる監視カメラの画像を提供
ー1か月以内に、その方が理容室に来た際は、声掛けをする

[2019年1月15日 追記]
監視カメラ画像を見させて頂きましたが、思っていたよりもご年配の方でした。故意ではなく、間違って持って行った可能性が高いと思うようになりました。

この事案に関わっている沢山の方々(警察、店長さん、店員さん)は親切に対応してくださいました。ありがとうございました。

LinuxからのGoogle driveのマウント

有料版のGoogle driveの「Google one」だが、2TBを年間たった13,000円で利用することができる。
one.google.com

ちなみに、iCloudも対抗してなのか、Google oneがiCloudに対抗しているのかわからないが、2TBを同じ料金で利用することができる。
support.apple.com

今回は、そんなgoogle driveを、以下のサイトを参考にubuntuからマウントしてみた。
http://mogi2fruits.net/blog/os-software/linux/ubuntu/4263/


1)まず、google drive関連のパッケージ用のレポジトリをインストールしupdate

> sudo add-apt-repository ppa:alessandro-strada/ppa
> sudo apt-get update

2)次に、google drive関連のパッケージをインストール

> sudo apt-get install google-drive-ocamlfuse

3)次に、google driveへの認証をする。

> google-drive-ocamlfuse

ブラウザ(Firefox)が立ち上がり、googleのいつもの認証の画面がでるので、ユーザID(メールアドレス)とパスワードを入力する。
すると以下のようなエラーがでた。
「(/usr/lib/firefox/firefox:22945): dconf-WARNING **: Unable to open /var/lib/snapd/desktop/dconf/profile/user: Permission denied」
とりあえずブラウザーを終了し、次に進む。

4)マウント先のフォルダを作成

> mkdir GoogleDrive

5)最後にマウント

> google-drive-ocamlfuse GoogleDrive
> df
...
google-drive-ocamlfuse   15728640   12417520    3311120  79% /home/hachiya/GoogleDrive

ちゃんとdfでマウントの一覧にgoogle-drive-ocamlfuseが表示されて、普通にアクセスすることができた。
ちょっとレスポンスが遅いが、自宅、職場、出先問わずデータを共有できるのはとても便利。