web-dev-qa-db-ja.com

gstatでクリギングするためにRでグリッドを作成する

lat    long
7.16   124.21
8.6    123.35
8.43   124.28
8.15   125.08

これらの座標を考慮してください。これらの座標は、降雨データを測定する気象観測所に対応しています。

Rのgstatパッケージのイントロでは、meuseデータセットを使用しています。このチュートリアルのある時点で: https://rpubs.com/nabilabd/118172 、みんなはこのコード行で「meuse.grid」を利用します。

data("meuse.grid")

私はそのようなファイルを持っておらず、それを作成する方法がわかりません。これらの座標を使用してファイルを作成できますか?または、少なくとも、カスタムエリアのカスタムグリッドを作成する方法(つまり、GADMの管理境界を使用しない)について説明している資料を紹介してください。

おそらくこれを間違って表現しているので、この質問がRに精通した人々にとって意味があるかどうかさえわかりません。それでも、いくつかの方向性、または少なくともヒントを聞きたいです。どうもありがとう!

Rでの合計noobと統計。

編集:私が投稿したチュートリアルがどのように見えるかを確認してください。それが私が作りたいものです。

編集2:この方法は実行可能でしょうか? https://rstudio-pubs-static.s3.amazonaws.com/46259_d328295794034414944deea60552a942.html

8
ace_01S

クリギング用のグリッドを作成するための私のアプローチを共有します。同じタスクを達成するためのより効率的またはエレガントな方法はおそらくありますが、これがいくつかの議論を促進するための出発点になることを願っています。

元のポスターは10ピクセルごとに1kmを考えていましたが、それは多分多すぎます。セルサイズが1km * 1kmのグリッドを作成します。また、元のポスターにはグリッドの原点が指定されていなかったので、少し時間をかけて適切な出発点を決定します。また、Spherical Mercator射影座標系が射影に適していると思います。これは、Googleマップまたはオープンストリートマップの一般的な予測です。

1.パッケージをロードします

以下のパッケージを使用します。 sprgdal、およびrasterは、空間分析に役立つ多くの関数を提供するパッケージです。 leafletmapviewは、空間データをすばやく探索的に視覚化するためのパッケージです。

# Load packages
library(sp)
library(rgdal)
library(raster)
library(leaflet)
library(mapview)

2.駅の場所の探索的視覚化

4つの駅の位置を調べるためのインタラクティブマップを作成しました。元のポスターはこれら4つの測点の緯度と経度を提供していたので、緯度/経度の投影でSpatialPointsDataFrameを作成できます。緯度/経度投影の[〜#〜] epsg [〜#〜]コードが4326であることに注意してください。 EPSGコードの詳細については、このチュートリアルを参照してください( https://www.nceas.ucsb.edu/~frazier/RSpatialGuides/OverviewCoordinateReferenceSystems.pdf )。

# Create a data frame showing the **Latitude/Longitude**
station <- data.frame(lat = c(7.16, 8.6, 8.43, 8.15),
                      long = c(124.21, 123.35, 124.28, 125.08),
                      station = 1:4)

# Convert to SpatialPointsDataFrame
coordinates(station) <- ~long + lat

# Set the projection. They were latitude and longitude, so use WGS84 long-lat projection
proj4string(station) <- CRS("+init=epsg:4326")

# View the station location using the mapview function
mapview(station)

mapview関数は、インタラクティブマップを作成します。このマップを使用して、グリッドの原点に適したものを決定できます。

3.原点を特定します

地図を調べた結果、原点は経度123と緯度7のあたりにある可能性があると判断しました。この原点は、グリッドの左下にあります。次に、球形メルカトル図法で同じ点を表す座標を見つける必要があります。

# Set the Origin
ori <- SpatialPoints(cbind(123, 7), proj4string =  CRS("+init=epsg:4326")) 
# Convert the projection of ori
# Use EPSG: 3857 (Spherical Mercator)
ori_t <- spTransform(ori, CRSobj = CRS("+init=epsg:3857"))

最初に、原点の緯度と経度に基づいてSpatialPointsオブジェクトを作成しました。その後、spTransformを使用してプロジェクトの変換を実行しました。オブジェクトori_tは、球形メルカトル図法を使用した原点になりました。 SphericalMercatorのEPSGコードは3857であることに注意してください。

座標の値を確認するには、次のようにcoordinates関数を使用できます。

coordinates(ori_t)
     coords.x1 coords.x2
[1,]  13692297  781182.2

4.グリッドの範囲を決定します

次に、セルのサイズとセルの数に応じて、4つのポイントすべてをカバーできるグリッドの範囲とクリギングに必要な領域を決定する必要があります。次のコードは、情報に基づいてエクステントを設定します。セルサイズは1km * 1 kmと決めましたが、x方向とy方向の両方で適切なセル数を実験する必要があります。

# The Origin has been rounded to the nearest 100
x_ori <- round(coordinates(ori_t)[1, 1]/100) * 100
y_ori <- round(coordinates(ori_t)[1, 2]/100) * 100

# Define how many cells for x and y axis
x_cell <- 250
y_cell <- 200

# Define the resolution to be 1000 meters
cell_size <- 1000

# Create the extent
ext <- extent(x_ori, x_ori + (x_cell * cell_size), y_ori, y_ori + (y_cell * cell_size)) 

作成した範囲に基づいて、すべて0に等しい数のラスターレイヤーを作成できます。次に、mapview関数を再度使用して、ラスターと4つのステーションが適切に一致するかどうかを確認できます。

# Initialize a raster layer
ras <- raster(ext)

# Set the resolution to be
res(ras) <- c(cell_size, cell_size)
ras[] <- 0

# Project the raster
projection(ras) <- CRS("+init=epsg:3857")

# Create interactive map
mapview(station) + mapview(ras)

私はこのプロセスを数回繰り返しました。最後に、セルの数をx方向とy方向でそれぞれ250200にすることにしました。

5.空間グリッドを作成します

これで、適切な範囲のラスターレイヤーが作成されました。最初に、このラスターを将来の使用のためにGeoTiffとして保存できます。

# Save the raster layer
writeRaster(ras, filename = "ras.tif", format="GTiff") 

最後に、パッケージgstatのクリギング関数を使用するには、ラスターをSpatialPixelsに変換する必要があります。

# Convert to spatial pixel
st_grid <- rasterToPoints(ras, spatial = TRUE)
gridded(st_grid) <- TRUE
st_grid <- as(st_grid, "SpatialPixels")

st_gridは、クリギングで使用できるSpatialPixelsです。

これは、適切なグリッドを決定するための反復プロセスです。プロセス全体を通じて、ユーザーは分析のニーズに応じて、投影、原点、セルサイズ、またはセル数を変更できます。

9
www

@yzwと@Edzerは、通常の長方形グリッドを作成するための良い点を示しますが、場合によってはする必要があります。 )通常はクリギングのために、定義されたポリゴン上に不規則なグリッドを作成します。

これはまばらに文書化されたトピックです。 1つの良い答えはここにあります 。私はそれを以下のコードで拡張します:

組み込みのmeuseデータセットについて考えてみます。 meuse.gridは不規則な形状のグリッドです。 独自の調査領域用にmeuse.gridのようなグリッドを作成するにはどうすればよいですか?

library(sp)
data(meuse.grid)
ggplot(data = meuse.grid)+geom_point(aes(x=x, y=y))

enter image description here

SpatialPolygonと呼ばれる不規則な形のSpatialPolygonsDataFrameまたはspdfを想像してみてください。最初にその上に正長方形のグリッドを作成し、次にその正グリッド内のポイントを不規則な形状のポリゴンでサブセット化します。

1. SpatialPolygonsDataFrameの上に長方形のグリッドを作成します

grd <- makegrid(spdf, n = 100)
colnames(grd) <- c('x','y')

2.グリッドをSpatialPointsに変換し、これらのポイントをポリゴンでサブセット化します。

grd_pts <- SpatialPoints(coords = grd, 
                         proj4string=CRS(proj4string(spdf)))

# find all points in `grd_pts` that fall within `spdf`
grd_pts_in <- grd_pts[spdf, ]

3.クリギングに使用できるクリップされたグリッドを視覚化します。

# transform grd_pts_in back into a data frame
gdf <- as.data.frame(coordinates(grd_pts_in)) 

ggplot(gdf) +
  geom_point(aes(x=x,y=y))
4
Rich Pauloo

スタディエリアがポリゴンとしてあり、SpatialPolygonsとしてインポートされている場合は、パッケージラスターを使用してラスタライズするか、sp::spsampleを使用してサンプリングタイプregularを使用してサンプリングできます。

このようなポリゴンがない場合は、expand.gridを使用し、seqを使用してlong値とlat値のシーケンスを生成し、長方形のlong/lat領域に定期的に広がるポイントを作成できます。

4
Edzer Pebesma