【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')

f:id:sfuno:20210403120248j:plain


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')

f:id:sfuno:20210403120251j:plain

*1:よく考えると、そもそもGMT本家もこういう仕様だった気が…

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で実行してみました。

qiita.com

実行してみるには直接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

実行

f:id:sfuno:20200504090716j:plain


計算終了後の画面です。かなり遅いので、やはりOpen MPIを使用したほうが良いのでしょうか…

可視化してみたところ、一応ちゃんと動いてるように見えましたが、NetCDF導入時のエラーが気になるところです。

GMT5で地図にスケールをつける

【更新履歴】2020.2.2 スクリプト内のコメントを修正

 

f:id:sfuno:20200101162215j:plain

 

公式サイトの情報を参考に、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を変更しています。

自然災害リスクを調べる:アパートの引っ越しを想定して

【更新履歴】
・「地形区分に基づく液状化の発生傾向図」公開に伴い加筆(2020年12月18日)
 
以前の記事では、国土交通省の「重ねるハザードマップ」の利用方法を中心に、自然災害関連の情報を調べる方法を紹介しました。今回は、アパートの引っ越しを想定して、自然災害リスクの低い地域を探す方法を紹介します。
 
基本戦略としては、地震動・液状化津波・高潮・土砂災害・洪水の危険性を考慮して、なるべく低地は避けて地盤の強固な場所を見つけるという方針です。しかし実際には、そうした土地は家賃が高かったり利便性が悪かったりもするので、リスクと便益のバランスをとることは大事です。どういう種類の災害にどの程度のリスクを許容できるかは、自分や周囲の環境に大きく依存します。自分の生活や体調、家族構成等を考えて、災害に対して身を守ることが可能かどうかをよく検討すべきです。
 
土地の特徴をおおまかに把握する
まず、「重ねるハザードマップ」を活用して、複数の地域の土地の特性を調べます。使い方については、以前の記事を参考にしてください。

 
「重ねるハザードマップ」で表示できる情報ごとに、どういった土地にリスクがあるかを考えてみます。
 
・「災害種別で選択」>「土砂災害」
 ここで塗りつぶされる地域は、特にリスクがあると認識されている場所です。特に、「急斜面崩壊危険箇所」は危険が大きいと言えます。地震で崩れるのを前もって知ることはできません。もしそこに住みたい場合、十分対策が施されているかどうかを調べるべきでしょう。
 
・「災害種別で選択」>「津波」および「洪水」
 ここで塗りつぶされる地域は、特にリスクがあると認識されている場所です。こうした場所に住む場合、命を守る対策を十分にとり、かつ家財等の流出の可能性を考慮すべきでしょう。なお、想定浸水範囲に含まれていなくても、少なくともその近辺では同様の心構えでいたほうがよいでしょう。
 
・「すべての情報から選択」>「土地の特徴・成り立ち」>「地形分類」
 表示した上で任意の地点をクリックすると、その場所で想定される地形の自然災害リスクが表示されます。一般的には、台地・段丘の上が最もリスクが低いと思われます。地形と自然災害の関係については、国土地理院の解説があります。
 
・「すべての情報から選択」>「土地の特徴・成り立ち」>「大規模盛土造成地」
 阪神・淡路大震災東日本大震災等の大規模地震時において、谷や沢を埋めたり、傾斜地盤上に盛土した大規模な造成宅地において、盛土の崩壊や地すべりによる被害が発生しました(「大規模盛土造成地」の解説より引用)。したがって、該当する土地はリスクが高いと言えます。
 
・「すべての情報から選択」>「土地の特徴・成り立ち」>地形区分に基づく液状化の発生傾向図
 液状化の発生しやすさを確認できます。「地形分類」データが整備されていない場所もカバーされているようですが、おそらく精度は落ちていると思われます。
最新の自然災害関連情報を把握する
土地の特徴をおおまかに把握すると、住みたい土地がある程度絞られるかもしれません。その後は、市町村のハザードマップで、最新の情報を確認します。地域によっては、「重ねるハザードマップ」に掲載されているよりも、詳細な地震動や液状化などのハザードマップを公開していることもあります。*1
 
「重ねるハザードマップ」の地図画面の右端にある「危」マークを選択し、任意の地点をクリックすると、該当地域の「わがまちハザードマップ」へのリンクがあるので、移動して情報を確認することができます。
さいごに
今回はアパートの引っ越しを想定しましたが、もし土地やマンションを買うのであれば、古地図や空中写真をもとに、土地の履歴をより詳細に把握するのも良いと思います。最終的にはピンポイントに地盤の強度を知らべたほうが良いのかもしれません。ジャパンホームシールド株式会社の地盤サポートマップを見ると分かるように、近距離でも地盤の強度はかなり異なります。
 
紹介した方法の利用は自己責任でお願いします。ご意見やご指摘は歓迎いたします。

*1:地震動や津波においては都道府県の想定よりも古いものである場合もあります。不安であれば都道府県が公開している防災情報も参考にしてもよいでしょう。ただし、地震動に関しては、より良い地盤を選べば被害も小さくなるので、引っ越し時に気にしすぎることはないと思います。

GMT5のおすすめリンク集

このブログでは度々GMT(Generic Mapping Tools)について書いていますが、スクリプトの詳しい解説を含めることはできていません。そこで、GMT5(ver.5)に関して詳しい情報を公開してくださっているWebサイトを紹介しておこうと思います。
 
なお、最新版はver.6.0.0(2019/12/14現在)で、ver.5と互換性がありますが、一部変更点があります。ver.6ではユーザーのミスを減らすような改善がなされているので、はじめてGMTを導入するならver.6のほうが良いでしょう。私はまだ使用していないのですが、図の中に図を描くのが楽になっている点がかなり良さそうです。
 
ver6とver5の違いについては、以下の情報が参考になります。
https://docs.gmt-china.org/6.0/appendix/modes-difference/
 
ちなみに、ver5とver4には大きな違いがあり、例えば下記の解説があります。
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
GMT v.5.1 一歩めのガイド(産総研・堀川さん)
 https://staff.aist.go.jp/h.horikawa/byproduct.html
 GMT4の内容ですが、概要など参考になる部分があります。
 

スクリプト

GMTサンプルスクリプト集(日本自動車研究所・早崎さん)
 http://www.hysk.sakura.ne.jp/Linux_tips/GMT_img_script/
GMT historical collection(公式)
 http://gmt.soest.hawaii.edu/doc/5.3.2/Gallery.html
 GMTの機能を使って走向傾斜の記号や柱状図を描くPerlのプログラムを利用できます。
 

モジュールの機能

 誰かのスクリプトで知らないモジュールやオプションが出てきたら、公式のwikiで確認します。マニュアルもDLしておき、デフォルトパラメータやCPTの一覧など、必要に応じて参照すると良いです。
GMTオンラインマニュアル日本語版(松田さん)
 http://gmt.shin-gen.jp/
 残念ながらver4.1.4の情報なので、ver5とは異なる部分も多いです。ただし、モジュールの概要を掴むのに参照しても良いと思います。
・いちから始めるGMT(KDOさん)
 http://kdo.la.coocan.jp/gmt00_index.html
 各モジュールの使い方を説明してくれていて、大変参考になります。ただしver4の情報であることには注意が必要です。
 

カラーパレット集

・Scientific colour maps
 http://www.fabiocrameri.ch/colourmaps.php
 クールなユニバーサルカラーのカラーパレットを利用できます。ver6では一部デフォルトで採用されているようです。