Problema con el trazado del mapa en R

8

Mientras trazo el gadmmapa de Rusia R, tengo un problema en el meridiano de 180 grados, donde parte de la región rusa se traza por separado. Puede verlo en el diagrama usando el siguiente código (es el borde izquierdo y la parte está a la derecha). ¿Alguien puede sugerir cómo evitar este problema?

Aquí hay una versión corta del código para mi pregunta:

require(sp)

rus<-url("http://www.gadm.org/data/rda/RUS_adm1.RData")
print(load(rus))
gadm$regions = as.factor(1:88)
spplot(gadm,"regions")

Mapa

Ruvin Rafailov
fuente

Respuestas:

5

Proyectar los datos. Este ejemplo utiliza una proyección estereográfica polar centrada cerca del centro de Rusia (longitud 105 grados este):

require(rgdal)
proj4.str <- CRS("+init=epsg:3413 +lon_0=105")
gadm.prj <- spTransform(gadm, proj4.str)
spplot(gadm.prj, "regions")

Mapa

La región del problema está en la esquina superior derecha. Puede ver que esta región se ha dividido en dos partes y, en virtud de la proyección, se ha vuelto a montar en un área contigua: el límite común es visible. Así es como está en los datos: se representa explícitamente como dos características separadas. Para eliminar la división visible, necesitaría fusionar las dos piezas (una operación mucho más fácil de hacer con un SIG que con R).

whuber
fuente
Solo una pregunta estúpida más, por favor, si no le importa, me pregunto cómo se puede hacer para trazar solo un polígono del mapa, como Moscú solo, por ejemplo
Ruvin Rafailov
2
La página de ayuda spmenciona que esta clase admite "métodos que incluyen print / show, plot, subset, [, [[, \ $, names, dim, summary, ..." La página de ayuda para subsetmuestra su sintaxis. ¡El truco es saber qué campo usar para encontrar Moscú! Lo encontré mirando a valores únicos de todos los campos, finalmente posándose en levels(gadm$NAME_1). Esto llevó a spplot(subset(gadm.prj, subset=(NAME_1=="Moskva")),"regions"), lo que hace el truco.
whuber
¡Entendido! muchas gracias de nuevo, realmente me salvaste, tuve un problema porque no sabía sobre la sintaxis de subconjuntos
Ruvin Rafailov
7

Veo que Whuber ya me ganó, pero publicaré mi respuesta de todos modos.

Si desea mantener los datos en la proyección longlat, puede agregar el parámetro " Ajuste longitudinal " a la cadena Proj4.

library(rgdal)

p4 <- projection(gadm)
p4_new <- paste(p4, "+lon_wrap=105")

gadm_new <- spTransform(gadm, CRS(p4_new))
spplot(gadm_new, "regions")

Esto centrará su mapa en longitud 105 grados este. ingrese la descripción de la imagen aquí

ialm
fuente
1
+1 Es bueno ver esta opción disponible en spTransform.
whuber