【PyGMT】枠や目盛り線を前面にする
PyGMTを初めて使ってみたのですが、coastで地図を描いたら、枠や目盛りよりも塗りが前面になってしまい戸惑いました。
結論から言うと、枠や目盛りを前面にするには、coastより先にframeの設定を書かないようにすればOKでした。*1
例を挙げます。以下は公式ページのサンプルスクリプトですが、陸域の塗りが枠・目盛り・目盛り線よりも前面に来ています。
import pygmt fig = pygmt.Figure() fig.basemap( region=[-150, -30, -60, 60], projection="I-90/15c", frame="afg" ) fig.coast( borders=["1/0.5p,black", "2/0.5p,red", "3/0.5p,blue"], land="gray" ) fig.savefig('test.jpg')
coastより先にbasemapが書かれていたところを、coastですべてのパラメータを指定すると、枠・目盛り・目盛り線が前面になりました。
import pygmt fig = pygmt.Figure() fig.coast( region=[-150, -30, -60, 60], projection="I-90/15c", frame="afg", borders=["1/0.5p,black", "2/0.5p,red", "3/0.5p,blue"], land="gray" ) fig.savefig('test2.jpg')
python-docxで日本語フォントを設定
python-docxでは、下記のようにしてデフォルトのフォントを変更することができます。
doc = Document()
style = doc.styles['Normal']
font = style.font
font.name = 'メイリオ'
しかし、ここで変更されるのは半角英数字だけのようです。検索すると以下のような解決方法もあるのですが、私の環境ではうまくいきませんでした。
pythonのメモ: python-docxで日本語のフォントを指定
そこで、デフォルトのスタイルを変更するのは諦めて、すべてのparagraphについて個別に設定する方法でごり押しすることにしました。日本語の文章をすべて挿入した後、下記のような処理を記述しておくと、日本語フォントがすべてメイリオになりました。
for paragraph in doc.paragraphs:
for run in paragraph.runs:
run.font.name = "メイリオ"
run._element.rPr.rFonts.set(qn('w:eastAsia'), run.font.name)
ただし、表の中の日本語フォントについては、以下のように別途設定する必要がありました。表の中のparagraphはdoc.paragraphsには含まれないみたいです。
for table in doc.tables:
for row in table.rows:
for cell in row.cells:
for paragraph in cell.paragraphs:
for run in paragraph.runs:
run.font.name = "メイリオ"
run._element.rPr.rFonts.set(qn('w:eastAsia'), run.font.name)
Yahoo!防災速報とgoo防災アプリ:何が違う?どう使い分ける?
昨今はスマートフォン向けの防災アプリが充実しています。中でも、Yahoo!防災速報とgoo防災アプリは代表的なアプリです。現在地や登録した場所の防災情報をプッシュ通知で知らせてくれたり、マップ機能で視覚的に分かりやすく情報提供してくれるという特徴があります。しかし、両アプリとも総合防災アプリとして機能が充実しているがゆえに、一見すると両者の違いが分かりづらい側面があります。本記事では、両アプリの機能の違いを整理し、使い分けについて検討します。
Yahoo!防災速報の特徴
・洪水・土砂災害の危険度情報をマップに表示可能
危険情報の面的な把握が可能です。大雨警報(浸水害)の危険度分布には対応していないので、浸水害は対象外となっています。
・洪水の浸水想定区域や土砂災害警戒区域等をマップに表示可能
洪水の浸水想定区域は計画規模の想定になっています(想定最大規模ではない)。土砂災害については、地すべりは対象外です。
・ユーザーからの投稿をマップに表示可能
土砂災害と洪水の危険情報、ライフラインに関するユーザーの投稿が表示されます。
・情報の種類が多い
熱中症情報・防犯情報・豪雨情報はgoo防災アプリにない情報です。
・ハザードマップへのリンク有り
全国の自治体のハザードマップへのリンクがあります。現在地の位置情報から探すこともできます。
goo防災アプリの特徴
・マップで表示される施設の種類が多い
避難施設のほか、病院や公衆電話などが表示可能です。Yahoo!防災速報は避難場所のみ。詳細は不明ですが、片方に表示されていてもう片方に表示されていない避難場所もあり、情報源が異なるようです。
・色別標高図をマップに表示可能
地形の起伏が分かりやすい機能です。標高で施設を絞りこむこともでき、施設をタップすると周辺の平均標高を知ることもできます(さすがに建物の高さは分かりませんが)。
・安否登録が直接可能
安否登録をまとめて検索できるJ-anpiと連携しています。アプリから安否情報を簡単に登録できるのは便利です。Yahoo!防災速報には、Web171やJ-anpiへのリンクがあります。
・地図データを保存可能
一定の範囲の地図をダウンロードしておくことができます。そのため、非常時にはオフラインで利用することができます。
・避難経路に勾配を表示可能
現在地から選択した施設までのルートを表示することができます。ルートは1つしか表示されません。避難訓練前にルートを検討するのには役立つかもしれません。
どう使い分ける?
両アプリに共通して言えることですが、プッシュ通知が最も役に立つ機能でしょう。両アプリである必要はありませんが、格安SIMでETWSに対応していない場合にはインストールが必須と言えます。また、当然ながら自治体の情報に比べると網羅性・最新性に劣るので、基本的には外出時を念頭において使うのが良いと思います。
では、両アプリは具体的にどう使い分けるべきでしょうか?
1)近くのハザード情報が知りたい:Yahoo!防災速報
直接自治体情報にあたるのがベストですが、Yahoo!防災速報では洪水の浸水想定区域や土砂災害警戒区域等を手軽に確認することができます。ただし、洪水は想定最大規模ではない点に注意が必要です。
2)近くの避難場所を探したい:どちらでも
直接自治体情報にあたるのがベストですが、両アプリとも周囲の避難場所を手軽に探すことができます。Yahoo!防災速報では、ファーストメディア株式会社が作成した避難場所情報を表示しているようです。goo防災アプリは不明ですが、見たところ情報源はYahooとは異なるようです。なお、少なくともYahoo!防災アプリで表示しているのは、「指定緊急避難場所」で、「指定避難所」ではありません(goo防災アプリは不明)。つまり、被災時に避難生活を送る場所(指定避難所)は表示されません。基本的にアプリは、自宅を離れているときに緊急的に使用するのが良いと思います。
3)近くの危険度が知りたい:Yahoo!防災速報
goo防災マップでは、今のところ危険度分布をマップ上で詳しく確認することができません。Yahoo!防災速報はビジュアル的にも綺麗に表示してくれます。ただし、浸水害の危険度分布は表示されないので、内水氾濫の危険度を確認したい場合、気象庁のスマホ向けページを参照するのが良いでしょう。
4)津波から避難したい:どちらかといえばgoo防災アプリ
周辺の地形や避難施設の標高がすぐに分かるのはgoo防災アプリです。ただし、どうやって逃げるか考えているうちに津波が来ます。そもそも沿岸部では事前に津波からの避難経路を確認しておく習慣をつけるのが一番です。
5)安否登録・確認したい:どちらかといえばgoo防災アプリ
goo防災アプリは、安否登録が直接可能なのが便利かもしれません。ただ、Yahoo!防災速報にもWeb171やJ-anpiへのリンクがあるので、大きく手間は変わらないと思います。安否確認には他にも便利なアプリがありますので(ココダヨなど)、あえて両アプリにこだわらなくても良い気はします。
【メモ】Windows Subsystem for LinuxでJAGURSを実行
iowa manさんの下記の記事をもとに、津波伝播・浸水計算プログラムであるJAGURSをWindows Subsystem for Linuxで実行してみました。
実行してみるには直接iowa manさんの記事を読むのが間違いなく良いのですが、Linux力がない自分の試行錯誤を晒しておくのも、何かの役に立つかもしれないと思って記事を書きます。結構誤りを含んでいる可能性があるので、ご注意ください。また、お気づきになった場合は、ご指摘いただけると助かります。
ここでは自分の環境でうまくいかなかったことや覚え書きのみを記すので、基本的な手順についてはiowa manさんの記事をご参照ください。
なおテキストエディタについては、私はviの使い方を覚えていないので、もともとWindowsに入れてたものを使いました。
ライブラリの導入
HDF5
NetCDFを入れるのに必要らしいのですが、NetCDFを入れるときにzlibも必要だと言われて困ったので、zlibを入れてからHDF5も導入することにしました(HDF5を入れる際に必須なのかは不明)。
導入には、下記の記事を参考にさせていただきました。
Ubuntu/Install_HDF5 - Takuya Miyashita
tar -zxf zlib-1.2.11.tar.gz
cd -zxf zlib-1.2.11
./configure --prefix=/home/(ユーザー名)/zlib
make
make install
zlibを導入したあとは、iowa manさんの記事のとおりHDF5を入れました。
.bashrcに加筆&sourceで反映、という作業はこの後のソフトのインストール後にも行いました。
NetCDF-C
最近のバージョンでは、NetCDFはCとFortranに分離していているようですが、NetCDF-Fortranを入れるのにはNetCDF-Cが必要らしいので、こちらからインストールしました。
下記のサイトを参考にさせていただきました。
https://www.unidata.ucar.edu/software/netcdf/docs/getting_and_building_netcdf.html
NetCDF: Building the NetCDF-4.2 and later Fortran libraries
Ubuntu/Install_NetCDF - Takuya Miyashita
configure実行時以降で、
CPPFLAGS='-I/home/(ユーザー名)/hdf5/include -I/home/(ユーザー名)/zlib/include' LDFLAGS='-L/home/(ユーザー名)/hdf5/lib -L/home/(ユーザー名)/zlib/lib' \
./configure --prefix=/home/(ユーザー名)/netcdf-c --disable-dap
make && make check
make install
とすると、make check時にdo_comps.shはPASSされましたが、ひとまずインストールはできました。どういう問題があるのかは、分からずじまいです。
ちなみに、permission deniedでエラーが出ることがあったのですが、下記のようにフォルダ全体に実行権限を与えると解決しました。
sudo chmod -R 774 netcdf-c-4.7.3
NetCDF-Fortran
NCDIR=/home/(ユーザー名)/netcdf-c
NFDIR=/home/(ユーザー名)/netcdf-fortran
CPPFLAGS=-I${NCDIR}/include LDFLAGS=-L${NCDIR}/lib \
./configure --prefix=${NFDIR}
make check
としましたが、"FAIL: nf03_test FAIL: f03tst_open_mem"というエラーが出ました。
sudo make install
一応、インストールはできました。問題はありますが…
FFTW3
Ver.3.3.8を導入しました。make時に、"makeinfo"がないというエラーが出たので、下記を実行してインストールしました。
sudo apt-get install texinfo
PROJ4
Ver.7.0.0を導入しようとしたのですが、make時に、"aclocal-1.16"がないと言われてしましました。自分の環境にインストールされているaclocalがVer1.15のようなので、自分でビルドしてみようとするもうまくいかず。
仕方ないので、aclocal-1.15を使っている古いバージョンのPROJ4(Ver.4.9.3)を導入しました。
Open MPI
なくても動くらしいので、とりあえず今回は入れないことにしました。
JAGURS
コンパイル
iowa manさんの記事を参考にしつつ、srcフォルダ内にgfortran用のmakefileのサンプルがあったので、そちらも見て編集しました。デフォルトではszipとcurlも利用するように設定しているようなのですが、今回は入れてないので削除しています。
curlはリモートアクセス用らしいのですが、szipがどういうときに使用されるようになっているのかは分かりません。
# FC: Specify Fortran90 compiler command.
FC=gfortran
# Added for displacement.
# PRJ4_DIR: Specify PROJ.4 install directory.
# CC&CFLAGS: Specify C compiler command and flags.
PROJ4_DIR=/home/(ユーザー名)/proj4
CC=gcc
CFLAGS=-g -I$(PROJ4_DIR)/include
# BASE: Specify basic compiler options.
BASE=-cpp -fconvert=big-endian
# FFTW3_INCLUDE_DIR: Specify FFTW3 include directory.
FFTW3_INCLUDE_DIR=/home/(ユーザー名)/fftw3/include
# FFTW3_LIB: Specify linker options to link FFTW3.
FFTW3_LIB=-L/home/(ユーザー名)/fftw3/lib -lfftw3
# OPT: Specify compiler options about optimization level.
OPT=-O2 -fopenmp -I$(FFTW3_INCLUDE_DIR)
# NETCDF: Specify the path to NetCDF-c library.
NETCDF=/home/(ユーザー名)/netcdf-c
# NETCDF: Specify the path to NetCDF-fortran library.
NETCDFF=/home/(ユーザー名)/netcdf-fortran
# LIBS: Specify linker options.
LIBS=-L$(NETCDFF)/lib -lnetcdff -L$(NETCDF)/lib -lnetcdf -L/home/(ユーザー名)/hdf5/lib -lhdf5_hl -lhdf5 -L$(PROJ4_DIR)/lib -lproj $(FFTW3_LIB)
# EXEC: Specify the name of executable.
EXEC=jagurs
################################################################################
### Set parameters here! ###
################################################################################
# PREC=REAL_DBLE: All calc. (except file I/O) is performed with double precision.
# DBLE_MATH: Only intrinsic math functions are performed with double precision.
# Else, all calc. is performed with single precision.
#PREC=DBLE_MATH
PREC=REAL_DBLE
# MPI=ON: MPI version is made.
# Else, serial version is made.
MPI=OFF
実行
計算終了後の画面です。かなり遅いので、やはりOpen MPIを使用したほうが良いのでしょうか…
可視化してみたところ、一応ちゃんと動いてるように見えましたが、NetCDF導入時のエラーが気になるところです。
GMT5で地図にスケールをつける
【更新履歴】2020.2.2 スクリプト内のコメントを修正
公式サイトの情報を参考に、GMT5でスケール付きの地図を作成してみたので紹介します。地形データにはETOPO1を使用しました。
#!/bin/sh
# parameter setting
# map region west/east/south/north
region=128/140/28/36
# map projection and scale
proj=M18
# frame
frame=WeSn
# xaxis (f: minor tick spacing)
xaxis=x4f2
# yaxis (f: minor tick spacing)
yaxis=y4f2
# master color table
cpt=seafloor
# color table min/max
cptlimit=-6000/0
# input bathymetry grid file name
grdfile=ETOPO1_Bed_g_gmt4.grd
# tmp bathymetry grid file name
tmpgrdfile=ETOP1_tmp.grd
# output color table file name
cptfile=my_seafloor.cpt
# output postscript file name
psfile=map.ps
# set default parameter
gmt set FORMAT_GEO_MAP dddF
# cut grid data
gmt grdcut $grdfile -R$region -G$tmpgrdfile
# make color table
gmt makecpt -C$cpt -T$cptlimit > $cptfile
# plot map
gmt grdimage $tmpgrdfile -R$region -J$proj -C$cptfile -K -V > $psfile
gmt pscoast -R -J -Da -Ggray -Wthinnest,black -K -O -V >> $psfile
# plot frame
gmt psbasemap -R -J -B$frame -B$xaxis -B$yaxis -K -O -V >> $psfile
# plot scale
gmt psbasemap -R -J -Lg136.4/28.5+c32N+w300k+f+l+jBL --MAP_SCALE_HEIGHT=10p --MAP_TICK_PEN_PRIMARY=white --FONT_ANNOT_PRIMARY=white --FONT_LABEL=white -O -V >> $psfile
# convert to raseter file
gmt psconvert $psfile -A -Tj -V
# remove tmpfile
rm -f $tmpgrdfile
私の理解が正しければ、"-Lg136.4/28.5+c32N+w300k+f+l+jBL"が意味するところは、以下のようになっています。
・北緯32度の距離での(+c32N)
・300 kmの長さのスケールバーを(+w300k)
・左下が(+jBL)
・緯度28.5経度136.4となるように(-Lg136.4/28.5)
・fancyモードで(+f)
・距離の単位(ここでは"km")をバーの上につけて(+l)描く
デフォルトだと黒で描かれて見にくいので、以下のパラメータを一時的に白にすることで見やすくしています。
・MAP_TICK_PEN_PRIMARY
・FONT_ANNOT_PRIMARY
・FONT_LABEL
また、デフォルトだとスケールバーの厚みが小さい印象があったので、MAP_SCALE_HEIGHTを変更しています。
自然災害リスクを調べる:アパートの引っ越しを想定して
土地の特徴をおおまかに把握する
ここで塗りつぶされる地域は、特にリスクがあると認識されている場所です。特に、「急斜面崩壊危険箇所」は危険が大きいと言えます。地震で崩れるのを前もって知ることはできません。もしそこに住みたい場合、十分対策が施されているかどうかを調べるべきでしょう。
表示した上で任意の地点をクリックすると、その場所で想定される地形の自然災害リスクが表示されます。一般的には、台地・段丘の上が最もリスクが低いと思われます。地形と自然災害の関係については、国土地理院の解説があります。
阪神・淡路大震災や東日本大震災等の大規模地震時において、谷や沢を埋めたり、傾斜地盤上に盛土した大規模な造成宅地において、盛土の崩壊や地すべりによる被害が発生しました(「大規模盛土造成地」の解説より引用)。したがって、該当する土地はリスクが高いと言えます。
液状化の発生しやすさを確認できます。「地形分類」データが整備されていない場所もカバーされているようですが、おそらく精度は落ちていると思われます。
最新の自然災害関連情報を把握する
さいごに
GMT5のおすすめリンク集
https://docs.gmt-china.org/6.0/appendix/modes-difference/
http://gmt.soest.hawaii.edu/doc/5.4.3/GMT_Docs.html#incompatibilities-between-gmt-5-and-gmt-4
最初に読むべき情報
http://ofgs.aori.u-tokyo.ac.jp/~okino/gmtscripts/index.html
スクリプト集
モジュールの機能
カラーパレット集
http://www.fabiocrameri.ch/colourmaps.php
クールなユニバーサルカラーのカラーパレットを利用できます。ver6では一部デフォルトで採用されているようです。