Estou trabalhando com um conjunto de dados que inclui dados raster que estou combinando com mapas do rnaturalearth. A maior parte do que estou fazendo é manipular os dados raster usando o terra, para fazer coisas como agregação, reprojeção e, em seguida, várias operações raster usando o app (para coisas como tirar a média de várias camadas, etc.).
Para vários propósitos de visualização, às vezes eu quero cortar meus rasters e exibir dados regionais usando ggplot. Cortar o raster em si é fácil usando crop(), mas cortar o objeto sf é um pouco mais difícil. A solução que eu encontrei em tutoriais mais antigos agora gera um erro:
library(sf)
library(rnaturalearth)
world <- ne_countries(scale = "small", returnclass = "sf")
europe <- st_crop(world, xmin = -20, xmax = 45,
ymin = 30, ymax = 73)
Error in wk_handle.wk_wkb(wkb, s2_geography_writer(oriented = oriented, :
Loop 0 is not valid: Edge 0 crosses edge 78
Aparentemente, isso é causado pela mudança do espaço plano para a geometria esférica e pode ser resolvido desativando sf_use_s2():
sf_use_s2(FALSE)
europe <- st_crop(world, xmin = -20, xmax = 45,
ymin = 30, ymax = 73)
Spherical geometry (s2) switched off
although coordinates are longitude/latitude, st_intersection assumes that they are planar
Warning: attribute variables are assumed to be spatially constant throughout all geometries
Esta vinheta entra em muitos detalhes sobre geometria esférica em sf, mas não tenho certeza se estou captando todas as nuances, e tenho medo de inadvertidamente fazer algo para bagunçar a geometria sem perceber. Em geral, estou trabalhando com dados lat/lon (WGS84), e faço todas as minhas análises com lat/lon, então projeto para mollweide usando coord_sf() apenas para fins de visualização. Estou trabalhando amplamente com dados globais, que ocasionalmente visualizo em escalas mais locais. Então minha pergunta é:
Há algum problema em desligar sf_use_s2() para fins de cortar objetos sf? Devo ligá-lo novamente após executar esta operação?
Este aviso
Pode ser ignorado ao usar os dados para exibição (criando um mapa). E, mais geralmente, pode não ser muito importante, desde que a distância entre nós (vértices) em suas linhas/polígonos não seja muito grande. Você pode aumentar a distância mínima do nó com
terra::densify
(talvez haja um equivalente em sf).A mensagem poderia ser lida como sugerindo que o problema desapareceria se você transformasse os dados em uma projeção planar, mas esse não é o caso. A mensagem desapareceria, mas a possível imprecisão não seria corrigida.