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

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).


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


1
+1 É bom ver essa opção disponível em spTransform.
whuber
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.