2022年1月21日金曜日

ggRGB()

午前
・授業準備

午後
・修論・卒論手伝い(作図)
・卒論論文化(データ整理)

ここ数日の懸念事項であった、航空写真をggplotに取り込む方法が、どうにか決着した。

ggplot()で地図を扱う場合、library(OpenStreetMap)でbingの航空写真が使えるが、著作権がどうなっているのか良く分からないので、先々のことを考えると、違う方法を使いたかった。

国土地理院の地理院タイルで綺麗に出力できれば、それで良いのだが、場所や倍率によってはいまいちのことがある。なぜか学生はエラーが出るという切実な問題も、、、。

そこで、鳥取砂丘の航空写真は入手できるので、それを使うことにした。しかし、GISの知識に乏しいので色々と苦戦した。

まず、地図データの入ったGioTiffとい画像データがある。「.tif」だが、緯度経度の情報が含まれている。これは過去に使ったことがあったが、今回もらったものは、「.tif」と「.tfw」があり、まず悩んだ。

これは、「.tfw」に地理情報が入っており、GISのソフトなどでは、同じフォルダにおいておけば、「.tif」を開くだけで地理情報も読み込まれるみたい。

で、航空写真は全部で10枚程度、測地系は日本測地系2011であり、あとサイズが大きい。ということで、まずは、サイズを小さく(解像度を下げる)、そして、測地系をggplot()で使いやすいWGS84に変更することにした。これはQGISで地道に行った。また、全てのレイヤーも結合した。

で、これをggplot()で読み込む。結構、悩まされたが、終わってみればあっけない。

重要なのは、航空写真(ラスタデータ)の読み込みは、library(raster)のstack()を使う(カラー航空写真は3枚のラスタデータで構成されているため?)

もう一つ重要なのは、ggplot()ではなく、library(RStoolbox)のggRGB()をつかう。上記の通り、航空写真は赤、青、緑の3枚の画像を合わせることでカラーを表現をしているが、このような画像をggplot()で出力するために開発されたのがggRGB()である。これを見つけたらほぼ終わりでした。とても助かりました!

library(raster)
library(RStoolbox)
library(ggplot2)

#航空写真の読み込み
photo <- stack("***.tif") #重要!

#軌跡用のデータ読み込み:gpsを使ってロギングしたデータ
s_0615 <- st_read("***.gpx", layer = "tracks")
s_0610 <- st_read("***.gpx", layer = "tracks")

#点データ読み込み:xy座標データ
eriza <- read.csv("***.csv")

#ggplot作図の基本設定;何となく指定しているが、必須ではない。
mytheme <- theme(***)

#作図設定
map <- ggRGB(photo, r = 1, g = 2, b = 3) + #重要!
    geom_sf(data=s_0615, color=rgb(1, 0, 0, alpha=0.3), size=10) +
    geom_sf(data=s_0610, color=rgb(0, 0, 1, alpha=0.3), size=10) +
    geom_point(data=eriza, aes(x=lon, y=lat), 
    		size=10, shape=21, fill="green", color="white") +
    labs(x = "Longitude", y="Latitude")+
  mytheme

左上の黒塗りは、海のため航空写真のデータがない。