library(terra)
<- "ne_50m_land/ne_50m_land.shp"
lshp <- vect(lshp)
l50 plot(l50, border="brown", col="bisque", background="lightblue")
8 地図
NaturalEarthのデータを使って地図を描いてみます。
8.1 地理情報データ
点を結んだベクトルデータがshp形式で、ラスタ(画像)データがtif形式で提供されています。 中解像度5千万分の1(1:50m、1 cm \(=\) 500 km)自然(Physical)ベクトル形式の中から陸(Land)を使います。 Downloadsから目的のファイルへのリンクを見つけて、展開するとne_50m_land
というフォルダができます。 フォルダごと作業ディレクトリに配置してください。
地理データを扱うパッケージterraを使います。 vect()
にshpファイルのパスを与えて読み込み、ベクトルオブジェクト(SpatVector
)を生成します。
陸が多角形として定義されているので、col
に薄い茶色ビスク"bisque"
を指定し、背景background
となる海を水色"lightblue"
に塗り、境界border
である海岸線は茶色"brown"
にしました。 Rの色の名前はAn overview of color names in Rを参照してください。
8.2 描画範囲
描画範囲を日本域に限定してみましょう。
plot(l50, border="brown", col="bisque", background="lightblue",
ext=ext(120, 150, 20, 50))
8.3 地図投影
地図投影にはprojが使われています。 投影したいベクトル座標参照系(crs: coordinate reference system)を指定する文字列をproject()
に与えます。 投影については、Projectionsや や(Evenden 1991)を参照してください。
axes=FALSE
で座標を消し、ext
で描画範囲を絞ります。 経線と緯線はgraticule
で引くことができます。
<- "+proj=stere +lon_0=135e +lat_0=90n"
newcrs <- project(l50, newcrs)
l50p plot(l50p, axes=FALSE, col="bisque", background="lightblue",
ext=ext(-1e+7, 1e7, -1e7, 1e7))
<- graticule(30, 30, crs=newcrs)
g plot(g, add=TRUE)
8.4 ベクトルデータの処理
日付変更線を中心した地図を描いてみましょう。 NaturalEarthのデータの経度は−180°から180°で、本初子午線0°が中心です。 西半球と東半球を切り取り、西半球の経度を正にずらして、貼り合わせれば良さそうです。 1. crop()
で東半球(0°から180°まで)と西半球(−180°から0°まで)をそれぞれ切り取ります。 2. shift()
で西半球を360°ずらします。 3. rbind()
で二つをくっつけます。 左端を本初子午線以外にすることができるように、函数にパラメタを与えられるようにし、既定値は0とします。
<- function(v, dlon=0) {
shift.lon <- crop(v, ext(dlon, 180, -90, 90))
e <- crop(v, ext(-180, dlon, -90, 90))
w <- shift(w, 360)
w rbind(e, w)
}<- shift.lon(l50)
l50s plot(l50s, border="brown", col="bisque", background="lightblue")
よく見るとロシアのチュコト半島と南極に線が入っていますが、日付変更線を重ねると隠れるので気にしないことにします。
30°Wからの地図も描いてみます。
<- shift.lon(l50, -30)
l50s plot(l50s, border="brown", col="bisque", background="lightblue")