11

不規則なグリッドの質問にデータをプロットする効率的な方法の一部としてこの質問をしましたが、一般的なフィードバックは、元の質問をより扱いやすいチャンクに分割することでした. したがって、この新しい質問。

私は、寸法がスキャンライン (トラックの次元に沿って、つまり Y 軸) と地上のピクセル (トラックの次元に沿って、つまり X 軸) である不規則な 2 次元グリッド上に編成された衛星データを扱っています。各中心ピクセルの緯度と経度の情報は、補助座標変数と、4 つのコーナーの座標ペアに格納されます (緯度と経度の座標は、WGS84 基準楕円体で与えられます)。

12x10 の潜在的に不規則なグリッドと関連する表面温度測定値で構成される、おもちゃのデータ セットを作成してみましょう。

library(pracma) # for the meshgrid function
library(ggplot2)

num_sl <- 12 # number of scanlines
num_gp <- 10 # number of ground pixels
l <- meshgrid(seq(from=-20, to=20, length.out = num_gp), 
              seq(from=30, to=60, length.out = num_sl))

lon <- l[[1]] + l[[2]]/10
lat <- l[[2]] + l[[1]]/10

data <- matrix(seq(from = 30, to = 0, length.out = num_sl*num_gp), 
               byrow = TRUE, nrow = num_sl, ncol = num_gp) +
  matrix(runif(num_gp*num_sl)*6, nrow = num_sl, ncol = num_gp)

df <- data.frame(lat=as.vector(lat), lon=as.vector(lon), temp=as.vector(data))

lonデータにはlat、私が使用している元の製品で提供されている中心ピクセル座標が含まれており、2 次元マトリックスとして保存されています。その軸は、ground_pixel (X 軸) と scanline (Y 軸) です。マトリックス(data同じ次元) には、私の測定値が含まれています。次に、3 つのマトリックスをフラット化し、データ フレームに格納します。

地表ピクセルを (四角形として) マップ上にプロットし、それに応じて温度測定値を記入したいと思います。

私が得るタイルを使用して:

ggplot(df, aes(y=lat, x=lon, fill=temp)) + 
  geom_tile(width=2, height=2) +
  geom_point(size=.1) +
  borders('world', colour='gray50', size=.2) + 
  coord_quickmap(xlim=range(lon), ylim=range(lat)) +
  scale_fill_distiller(palette='Spectral') +
  theme_minimal()

タイルの使用

しかし、それは私が求めているものではありません。遊んで、タイルを互いに「接触」させることもできますwidthが、もちろん、実際に投影された地面のピクセルをマップ上heightにプロットするという目標に近づくことさえできません。 たとえば、Python の xarray は、ピクセルの中心座標が与えられると、ピクセルの境界を自動的に推測できます。

Xarray ソリューション

質問

Rで同じ結果を達成する方法はありますか? 多分sfパッケージを使用していますか?

この質問への回答でそれが行われていることがわかりますが、使用に関する回答sfは、さまざまな投影法と潜在的に通常のグリッドを扱っているため、私には少しわかりませんが、私の場合は再作成する必要はないと思います私のデータを投影し、さらに、私のデータは規則的なグリッド上にありません。

これが不可能な場合は、製品でピクセル境界情報を使用することに頼ることができると思いますが、これに取り組むのが簡単ではないことが判明した場合、別の質問のトピックになる可能性があります.

4

2 に答える 2