#はじめに
本当はQGISのプラグインの作り方にしようと思っていたけど、思っていたより不便で残念な出来だったのでガラッと変えました。
発震機構をQGISに落とし込もうとする人はいないのかもしれませんが、別の研究・調査に彩りを添えるのにいかがですか??
GMTでいいじゃん、、、って話ですが、QGISにさえ落とし込めればコマンドをいちいち打ったりしなくて良くなるのがGOODポイント。特にプレート境界とかの広い領域の話のときは拡大・縮小ができて移動もシームレスなのがよい点です。
###バージョンなど
・python3 == 3.7.6
・QGIS3 == 3.14.1
ビーチボール作成にはobspy を使います
#データのダウンロード
どこからでも良いですが、無難に気象庁からCMT解をzipファイルでダウンロードします
http://www.data.jma.go.jp/svd/eqev/data/bulletin/cmt.html
#プログラムの方針
データを整形し、QGISに読み込ませるデータを絞る。データ内にsvgファイル名を入れておく
機構をそれぞれsvgファイルに出力し、QGISではデータ内のファイル名と対応するsvgファイルを描画させるようにする。
##プログラム
ファイルフォーマットも書かれているので、必要なデータだけを整形します。
最低限必要なものとしては
発震年月日時刻・lon・lat・深さ・マグニチュード・走向・傾斜・すべり角
でしょうか。
QGISに読み込む際に必要になるので"id"として通し番号を振っておきます。
また、QGISに読み込ませやすい形式で出力しておきます。今回はcsvファイルで保存しています。
svgファイルの出力先はどこか一つのフォルダにまとめておきます。
実際のsvgファイルの作成は以下のように行っています。
from obspy.imaging.beachball import beachball
#seikeiはリスト['id','date','N','E','Depth', 'Magnitude', '走向', '傾斜角', 'すべり角']のリスト
def focal_maker():
for i in range(len(csvseikei)):
np = [float(seikei[i][6]),float(seikei[i][7]),float(seikei[i][8])] #strike,dip,rake
file_name = str(csvseikei[i][0])+'.svg'
dp = csvseikei[i][4] #depth
if dp == 0: #depthによって色を変えている
cl=[192,192,192]
elif 0<dp<=30:
cl=[255,0,0]
elif 30<dp<=100:
cl=[255,255,0]
elif 100<dp<=200:
cl=[0,255,0]
else:
cl=[0,0,255]
cl = list(map(lambda x: x/255, cl)) #RGBを0.0~1.0で指定する必要がある
beachball(np, facecolor=cl, outfile='./SVG_output/'+file_name)
if __name__ == '__main__':
focal_maker()
#QGISでの読み取り
いつもと同じようにid・発震年月日時刻・lon・lat・深さ・マグニチュード・走向・傾斜・すべり角が入ったcsvファイルを読み込みます。(別記事参照)
読み込んだレイヤのレイヤプロパティを開きます。シンポロジをクリック、右上のシンプルマーカーをクリックするとこのような画面になります。
「シンボルレイヤタイプ」のドロップダウンリストからSVGマーカーを選択します。
下の方にテキストボックスがあります(図だと"circle"と入力されている場所)。
右側のデータを格納できそうなボタン("データによって定義された上書き")をクリック>編集をクリック
すると式タブが開きます。
concat('svgファイルが入ったフォルダの絶対パス',"id",'.svg')
を打ち込み
OKをクリック
すると発震機構がプロットされるはずです。
あとはシンボルの大きさをマグニチュードに合わせて変化させたりすれば完成です。
QGIS バージョン3.14から時間によってシンボルの描画をコントロールできるようになりました。これまでデータを分けていたケース(例えば東北地方太平洋沖地震前後)でも一つのデータセットをQGISにぶち込めば良くなりそうなので結構便利だと思っています。
他人のプラグインとかを見ながらプラグイン作成はゆっくり進行中です
研究の進捗が芳しくないのでしばらく休憩します。
何かご意見等ございましたら
分からないことも一緒に悩むぐらいはできます。
twitterまでお気軽にご連絡ください@ohcelot
2020/08/09新規作成