4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Julia] GMT.jl を使って地理情報の可視化

Posted at

経緯 データの前処理

最近、緯度経度を特徴量として持つデータの異常値を削除する方法を探しています。データが大陸上ではなく海洋上にあるデータを削除したいとき、みなさんどうなさっているのでしょうか。思いついた方法として、

  • なんらかのAPIを用いて緯度経度をチェックする
  • 地図にプロットし, 海洋上にプロットされたデータをうまいこと削除する
  • 一個一個地道に見ていく

こんなところでしょうか。

実際にやってみたのは、二つ目のポチの「地図にプロットし, 海洋上にプロットされたデータをうまいこと削除する」です。これには、地図上に緯度経度を対応付けてプロットする必要があります。Juliaで探したところGMT.jlが良さそげだったのでこちらを利用してみます。

さて、今回は地図をプロットしたり、散布図追加したりするパッケージのレシピ紹介です。前処理についての記事ではないので、予めご了承ください。

GMT (The Generic Mapping Tools)

GMTは気象データや海洋データの可視化によく用いられるツールです。公式サイトによると、通常コマンドラインから使用するGMTですが、C, MATLAB, Julia, Python などでラップされたライブラリも提供されているようです。

JuliaでもGMTが使えるようなので、せっかくなのでJuliaで書いてみました。GMTの公式サイト(GMT.jlのほうではない)のほうがレシピがたくさんあるので、一旦そちらで検索するのもいいかもしれないですね。

install

記事制作時の環境です。

ver-info.jl
# julia
Julia Version 1.6.0
Commit f9720dc2eb (2021-03-24 12:55 UTC)
Platform Info:
  OS: Windows (x86_64-w64-mingw32)
  CPU: Intel(R) Core(TM) i5-10210U CPU @ 1.60GHz
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-11.0.1 (ORCJIT, skylake)

# GMT
GMT v0.38.2

# GhostScript
GhostScript 9.55.0

GMT.jlのインストールはJuliaのパッケージ管理モードを使って簡単にできます。

install.jl
] add GMT

ただ、手元の環境だとGMT.jlをインストールしただけでは、エラーが発生してしましました。同様のエラーが出たという方がJuliaのコミュニティにquestionを挙げていました。

questionにもある通り、GhostScriptを別途インストールすることでエラーが解消されます。

レシピ

GMTはオプションの数がかなり多く、その都度検索するというより一度作ったレシピをどこかに保存して置いて、随時それを参照するといったことを意識するといいかもしれません。

表示した地図に散布図を重ねる

赤い点は弊社テクノフェイスの位置です。

GMTjl_TF.png

show_tf.jl

using GMT

coast(
    #= 
    緯度経度の範囲指定 "経度左端/緯度下端/経度右端/緯度上端r"
    南緯:北緯 ⇔ -90:90
    西経:東経 ⇔ -180:180
    rは必須. 無いと表示がおかしくなる.
    =#
    region="139/41/146/46r", 
    # 地図の投影手法:今回はステレオ投影
    proj=(name=:stereographic, 
    center=(130,-30)), 
  # 外枠のフレームの設定
    frame=:ag, 
    # 解像度
    res=:auto,
  # km^2以下のポリゴンは表示しない => 値をちいさくすれば小さい湖なども表示できる
    area=5000, 
  # 大陸の色
    land=:green,
    # 海洋の色 
    ocean=:lightblue, 
    # 海岸線の種類
    shore=:thinnest, 
    figsize=20
)
scatter!(
        [141.3520392704521],
        [43.06257096671451],
        marker=:circle,
        fill=:red,
        label="TF",
        show=true # 重要! これがないと図が表示されない!!
)

境界線/海岸線の色を変える

image.png

change_shore.jl
coast(
    region=[-88 -70 18 24], 
    proj=(name=:eqdc, center=[-79 21], parallels=[19 23]),
    frame=:ag, 
    res=:intermediate,
    #=
    type
    1 : 国境
    2 : 南北アメリカ内の州の境界
    3 : 海上境界線
    a : すべての境界(1〜3)
    =#
    borders=(type=1, pen=("thick","red")),
    land=:green,
    #=
    海岸線の設定
    lebels
    1 : 海岸線
    2 : 湖岸
    3 : アイランド湖の湖岸?カナダの北東にある湖らしい
    4 : 湖内にある島の湖岸
    
    pen
    width
    color
    style
    =#
    shore=(lebels=(1,2), pen=(1, :blue, :solid)), 
    show=1
)

画像を保存する

save.jl
# 例1
coast(
    # 略
    savefig="保存したいPATH"
)

# 例2
coast(
    # 略
)
scatter!(
    # 略
    savefig="保存したいPATH"
)

参考文献

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?