Re-projetando a varredura em R: avisa que os pontos projetados não são finitos?

8

1. Pergunta

Encontrei um aviso usando a função projectRaster () no pacote raster em R. Um exemplo completo e reproduzível é colado abaixo.

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

Minha pergunta é: Esse aviso é um problema que preciso corrigir se estiver trabalhando com dados terrestres? Em outras palavras, os dados são "perdidos". Este seria um grande problema para mim, se for. Se for esse o caso, você sabe se existe uma maneira de corrigi-lo?

Eu procurei uma solução para este problema online e encontrei alguma menção a ele aqui , aqui e aqui, mas acho que nenhum oferece uma resposta adequada para esse problema.

2. Carregue a biblioteca raster

  library(raster)

3. Primeiro, crie um mapa (longo lat) do mundo, com uma constante em cada célula da grade

Estou colocando uma constante em cada célula da grade para ver se consigo diagnosticar o problema de onde o aviso provavelmente afetará os dados, se houver.

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

4. Se você reprojetar o mapa (longo lat) em uma grade de área igual, ele produzirá a mensagem de aviso

   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

Penso que esta mensagem está basicamente dizendo que a re-projeção falhou para algumas das células da grade.

5. Mas se você traçar os dois mapas, não parecerá que esse aviso cause problemas para os dados

Ou seja, você não vê lacunas em branco nos dados plotados. Meu palpite é que as células perdidas são células não terrestres, no topo e na borda do mundo. Alguma ideia?

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)

insira a descrição da imagem aqui

Mike
fonte

Respostas:

8

Resposta curta: está tudo bem, e você pode agradecer rasterpor continuar a concluir, em vez de falhar, e por informar que alguns dados foram perdidos.

Resposta longa:

isso dependerá da projeção e, neste caso, provavelmente está apenas nas "bordas". qual é a aresta e como ela se manifesta para uma determinada instância de uma determinada família de projeção é a parte "depende".

Você pode ver que não são os pontos centrais das células perdidas:

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

Mas provavelmente são os cantos e, possivelmente, as bordas da própria célula. Talvez isso mostre que projetos rasterizados se baseiam na extensão das células, não apenas em seus pontos centrais.

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

Admito que esperava que fosse de onde vêm os valores ausentes, então talvez projectRasteresteja se estendendo um pouco mais ao norte e ao sul? Defina valores lá para latitude fora do intervalo -90/90 e você começará a receber o aviso. Vou acompanhar se tiver a chance de explorar mais.

Finalmente, você provavelmente deve usar um parâmetro elipsóide ou de dado explícito, ou seja, "+ proj = eck4 + ellps = WGS84".

mdsumner
fonte
Obrigado! Acabei de redefinir a extensão da varredura original para menor / maior que +/- 70 graus: rastertest.longlat <- raster (ncol = 4320, nrow = 2160, xmn = -180, xmx = 180, ymn = -70 , ymx = 70) e, em seguida, reprojetado usando: rastertest.eck4 <-projectRaster (rastertest.longlat, res = c (100000,100000), crs = "+ proj = eck4, método =" ngb ", over = T). aviso desaparece completamente, então eu acho que todos os valores em falta devem ocorrer +/- ~ 70 graus.
mike
@ Mike Sinto muito, mas esta não é uma solução aceitável, perder dados e informações não é uma solução. O Qgis e o Arcgis podem fazer esta operação sem problemas, deve haver algum problema com o projectRaster. Espero que o desenvolvedor possa participar.
Herman Toothrot
(-‸ლ) Convido você a demonstrar exatamente o que o QGIS e o Arc fazem neste caso, especular não é realmente útil. Temos acesso exatamente ao que está acontecendo no R aqui, não há nenhum problema real.
Mdsumner 12/1118
5

Esta não é uma resposta completa à minha pergunta original, em termos de todos os detalhes, mas fornece ao leitor interessado um lugar para ir.

Em geral, os dados são perdidos e distorcidos durante a reprojeção de rasters de projeções longlat para áreas iguais. Isso pode ser problemático para a análise global. Se você pode obter seus dados em formato vetorial, é melhor reprojetar usando esse formato.

Aqui está uma referência sobre o problema geral. E aqui outra sobre tentar quantificar a perda. Espero que ajude.

Mike
fonte