Problema ao Plotar Mapa em R

8

Ao traçar o gadmmapa da Rússia R, tenho um problema no meridiano de 180 graus, onde parte da região russa é plotada separadamente. Você pode vê-lo no gráfico usando o código a seguir (é a borda esquerda e a parte está à direita). Alguém pode sugerir como evitar esse problema?

Aqui está uma versão curta do código para minha pergunta:

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
fonte

Respostas:

5

Projete os dados. Este exemplo usa uma projeção estereográfica polar centralizada perto do meio da Rússia (longitude 105 graus leste):

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

Mapa

A região do problema está no canto superior direito. Você pode ver que essa região foi dividida em duas partes e, em virtude da projeção, remontada em uma área contígua: o limite comum é visível. É assim que está nos dados: é explicitamente representado como dois recursos separados. Para remover a divisão visível, você precisaria mesclar as duas partes (uma operação muito mais fácil com um GIS do que com R).

whuber
fonte
Só uma pergunta mais estúpida, por favor, se você não se importa, eu estou querendo saber como isso pode ser feito para traçar apenas um polígono a partir do mapa, como Moscou apenas para exemplo
Ruvin Rafailov
2
A página de ajuda spmenciona que esta classe suporta "métodos incluindo impressão / exibição, plotagem, subconjunto, [, [[, \ $, nomes, dim, resumo, ..." A página de ajuda para subsetmostra sua sintaxe. O truque é saber qual campo usar para encontrar Moscou! Eu o encontrei olhando para valores únicos de todos os campos, finalmente chegando levels(gadm$NAME_1). Isso levou a spplot(subset(gadm.prj, subset=(NAME_1=="Moskva")),"regions"), o que faz o truque.
whuber
Entendi! muito obrigado novamente, você realmente me salvou, eu tive um problema como eu didnt't saber sobre subconjunto Syntaxis
Ruvin Rafailov
7

Vejo que whuber já me venceu, mas vou postar minha resposta de qualquer maneira.

Se você deseja manter os dados na projeção de longlat, pode adicionar o parâmetro " Longitudinal Wrapping " à string Proj4.

library(rgdal)

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

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

Isso centralizará seu mapa na longitude 105 graus leste. insira a descrição da imagem aqui

ialm
fonte
1
+1 É bom ver essa opção disponível em spTransform.
whuber