Memproyeksikan ulang raster di R: memberikan peringatan bahwa titik yang diproyeksikan tidak terbatas?

8

1. Pertanyaan

Saya telah menemukan peringatan menggunakan fungsi projectRaster () dalam paket raster di R. Contoh lengkap yang dapat direproduksi ditempelkan di bawah ini.

   Warning message:
   In rgdal::rawTransform(projto_int, projfrom, nrow(xy), xy[, 1],  :
   33940 projected point(s) not finite

Pertanyaan saya adalah: Apakah peringatan ini masalah yang harus saya perbaiki jika saya bekerja pada data terestrial? Dengan kata lain data "hilang". Ini akan menjadi masalah besar bagi saya jika memang demikian. Jika itu masalahnya, apakah Anda tahu jika ada cara saya bisa memperbaikinya?

Saya telah mencari solusi untuk masalah ini secara online dan menemukan beberapa menyebutkannya di sini , di sini & di sini, tetapi saya rasa tidak ada yang menawarkan jawaban yang cocok untuk masalah ini.

2. Muat perpustakaan raster

  library(raster)

3. Pertama-tama buat peta (panjang lat) dunia, dengan konstanta di setiap sel kisi

Saya meletakkan konstanta di setiap sel grid untuk melihat apakah saya dapat mendiagnosis masalah di mana peringatan cenderung mempengaruhi data, jika sama sekali.

 rastertest.longlat<-raster(ncol=360, nrow=180)
 values(rastertest.longlat)<-c(rep(1,n=180*360))

4. Jika Anda memproyeksi ulang peta (panjang lat) ke kotak area yang sama, itu menghasilkan pesan peringatan

   rastertest.eck4<-projectRaster(rastertest.longlat, res=c(100000,100000), crs="+proj=eck4",method="ngb", over=T)

Warning message:
 In rgdal::rawTransform(projto_int, projfrom, nrow(xy), xy[, 1],  :
33940 projected point(s) not finite

Saya pikir pesan ini pada dasarnya mengatakan bahwa proyeksi ulang gagal untuk beberapa sel kisi.

5. Tetapi jika Anda merencanakan dua peta, sepertinya peringatan ini tidak akan menimbulkan masalah bagi data

Itu adalah Anda tidak melihat celah putih dalam data yang diplot. Dugaan saya adalah bahwa sel-sel yang hilang adalah sel-sel non terestrial, di bagian atas dan ujung dunia. Ada ide?

par(mfrow=c(2,1))

plot(rastertest.longlat, col="blue")
data(wrld_simpl)
wrld <- spTransform(wrld_simpl, CRS('+proj=longlat'))
plot(wrld, add=TRUE)

plot(rastertest.eck4, col="blue") 
wrld <- spTransform(wrld_simpl, CRS('+proj=eck4'))
plot(wrld, add=TRUE)

masukkan deskripsi gambar di sini

mikrofon
sumber

Jawaban:

8

Jawaban singkat: tidak apa-apa, dan Anda dapat berterima kasih rasterkarena melanjutkan penyelesaian alih-alih gagal, dan karena memberi tahu Anda bahwa beberapa data hilang.

Jawaban panjang:

itu akan tergantung pada proyeksi, dan dalam hal ini mungkin hanya pada "the edge". apa tepi dan bagaimana itu memanifestasikan untuk contoh tertentu dari keluarga proyeksi yang diberikan adalah bagian "tergantung".

Anda dapat melihat bahwa itu bukan titik pusat sel yang hilang:

tpoints <- rgdal::project(coordinates(rastertest.longlat), "+proj=eck4")
sum(is.na(tpoints))
#[1] 0

Tapi itu mungkin adalah sudut, dan mungkin ujung sel. Ini mungkin menunjukkan bahwa proyek raster didasarkan pada luasnya sel, bukan hanya titik pusatnya.

 rgdal::project(as.matrix(expand.grid(x = c(-180, 0, 180), y = c(-90,0, 90))), "+proj=eck4")

Saya akui saya berharap bahwa dari mana nilai-nilai yang hilang itu berasal, jadi mungkin projectRastermemperluas sedikit lebih jauh ke utara dan selatan? Tetapkan nilai di sana untuk garis lintang di luar rentang -90/90 dan Anda mulai mendapatkan peringatan. Saya akan menindaklanjuti jika saya mendapat kesempatan untuk mengeksplorasi lebih banyak.

Akhirnya, Anda mungkin harus menggunakan parameter ellipsoid atau datum eksplisit, yaitu "+ proj = eck4 + ellps = WGS84".

mdsumner
sumber
Terima kasih! Saya baru saja mengatur ulang luasnya raster asli menjadi kurang / lebih besar dari +/- 70 derajat: rastertest.longlat <- raster (ncol = 4320, nrow = 2160, xmn = -180, xmx = 180, ymn = -70 , ymx = 70) dan kemudian diproyeksi ulang menggunakan: rastertest.eck4 <-projectRaster (rastertest.longlat, res = c (100000.100000), crs = "+ proj = eck4, metode =" ngb ", lebih = T). peringatan benar-benar menghilang, jadi saya pikir semua nilai yang hilang harus terjadi +/- ~ 70 derajat.
mike
@ Mike Maaf, tapi ini bukan solusi yang bisa diterima, kehilangan data dan informasi bukan solusi. Qgis dan Arcgis dapat melakukan operasi ini tanpa masalah, pasti ada beberapa masalah dengan projectRaster. Saya harap pengembang dapat
berbincang
(-‸ლ) Saya menyambut Anda untuk menunjukkan apa yang dilakukan QGIS dan Arc dalam kasus ini, berspekulasi tidak terlalu membantu. Kami memiliki akses ke persis apa yang terjadi di dalam R disini, tidak ada masalah yang sebenarnya.
mdsumner
5

Ini bukan jawaban lengkap untuk pertanyaan awal saya, dalam hal semua detail kasar, tetapi memberikan pembaca yang tertarik ke suatu tempat untuk pergi.

Secara umum data hilang dan terdistorsi selama proyeksi ulang raster dari longlat ke proyeksi area yang sama. Ini bisa menjadi masalah untuk analisis global. Jika Anda bisa mendapatkan data dalam format vektor, lebih baik memproyeksi ulang menggunakan format itu.

Berikut ini adalah satu referensi tentang masalah umum. Dan di sini lain mencoba untuk mengukur kerugian. Semoga itu bisa membantu.

mikrofon
sumber