Eu sou novo no R e estou usando o pacote raster. Tenho um problema ao extrair polígonos de um arquivo raster existente. Se eu usar
extract(raster, poly_shape)
Na varredura, sempre cria uma lista com os dados. O que eu realmente quero é extrair outro arquivo raster que eu possa carregar com o ArcGIS novamente. Depois de ler um pouco mais, acho que a função de recorte é o que realmente preciso. Mas quando eu tento usar essa função
crop(raster, poly_shape)
Eu recebo este erro:
Error in .local(x, y, ...) : extents do not overlap
In addition: Warning message:
In intersect(extent(x), extent(y)) : Objects do not overlap
Os arquivos raster e poly_shape são iguais para as duas funções. Você pode me dizer o que poderia estar errado aqui? É certo que a função de corte crie outra varredura e não uma lista?
Edição : A função extensão () não funciona para mim. Ainda obtenho o mesmo erro. Mas tenho certeza que os 2 conjuntos de dados se sobrepõem! Com o
extract(raster, poly_shape)
Eu recebo os dados certos. Apenas como uma lista e não como uma varredura como eu quero tê-la. Acabei de carregar os conjuntos de dados no ArcGIS antes e eles se encaixam muito bem, portanto não verifiquei a projeção. Agora eu tentei
projection(raster) # "+proj=laea +lat_0=52 +lon_0=10 +x_0=4321000 +y_0=3210000 +ellps=GRS80 +units=m +no_defs"
projection(poly_shape) # "+proj=utm +zone=32 +ellps=GRS80 +units=m +no_defs"
e você pode ver que as projeções não se encaixam. A função extrair parece capaz de transformar automaticamente os arquivos da maneira correta. Eu sei disso porque fiz o seguinte:
- Eu cortei a parte exata do polígono que extraí no R também no ArcGIS
- Calculei a soma de todos os valores do polígono R extraído (lista)
- Calculei a soma de todas as células raster que recortei no ArcGIS
Os 2 têm exatamente o mesmo resultado, então acho que a conclusão deve ser que a função extrair funcionou corretamente. Agora eu tenho duas opções, eu acho:
- Preciso de uma maneira de tirar um Raster da lista extraída novamente ou
- Os 2 conjuntos de dados (raster + poly_shape) precisam usar a mesma projeção e a função de corte deve funcionar
O que você sugeriria fazer aqui?
Respostas:
A função extrair está se comportando exatamente como deveria. Você pode forçar a função de corte a usar a extensão do polígono e depois mascarar o objeto para retornar a varredura exata que representa a área do polígono. Se você continuar recebendo o erro, isso significa que seus dados não se sobrepõem.
Lembre-se de que o R não realiza projeção "on the fly"; portanto, verifique suas projeções. Você pode verificar se suas extensões se sobrepõem usando a função "extension ()".
Aqui está um exemplo de corte usando a extensão do polígono e mascarando a varredura resultante usando o polígono "rasterizado".
fonte
spTransform
dosp
pacote (que às vezes é carregado automaticamente com outros pacotes R espaciais) permite reprojetar para que os dois arquivos estejam na mesma projeção, por exemplo.good_poly=spTransform(spolygon, CRSobj=crs(raster_file))
O que eu realmente procurei foi a
mask()
função.mask(raster, poly_shape)
funciona sem erros e retorna o que procurei.
fonte
projection(raster) = projection(poly_shape)
e o contrárioprojection(poly_shape) = projection(raster)
, mas em ambos os sentidos produzir o mesmo erro:Error in .local(x, y, ...) : extents do not overlap In addition: Warning message: In intersect(extent(x), extent(y)) : Objects do not overlap
. Existe uma maneira de ver qual projeção é usada em tempo real usando a função extract () (porque essa obviamente funciona)?mask(raster, poly_shape)
funciona sem erros e retorna o que procurei.A extensão funciona muito bem ... Eu acho que o Xmin, Xmax, Ymin e Ymax da sua extensão são diferentes dos X e Y da sua varredura - ou seja, eles estão no lado oposto
fonte