Problème avec le traçage de la carte dans R

8

En traçant la gadmcarte de la Russie R, j'ai un problème au méridien à 180 degrés, où une partie de la région russe est tracée séparément. Vous pouvez le voir sur l'intrigue en utilisant le code suivant (c'est le bord gauche et la partie est à droite). Quelqu'un peut-il suggérer comment éviter ce problème?

Voici une version courte du code de ma question:

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

Carte

Ruvin Rafailov
la source

Réponses:

5

Projetez les données. Cet exemple utilise une projection stéréographique polaire centrée près du milieu de la Russie (longitude 105 degrés est):

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

Carte

La région à problème est en haut à droite. Vous pouvez voir que cette région a été divisée en deux parties et, grâce à la projection, réassemblée en une zone contiguë: la frontière commune est visible. C'est comme ça dans les données: il est explicitement représenté comme deux fonctionnalités distinctes. Pour supprimer la scission visible, vous devez fusionner les deux pièces (une opération beaucoup plus facile à faire avec un SIG qu'avec R).

whuber
la source
Juste une autre question stupide, s'il vous plaît, si cela ne vous dérange pas, je me demande comment cela peut être fait pour tracer un seul polygone de la carte, comme Moscou uniquement par exemple
Ruvin Rafailov
2
La page d'aide pour spmentionne que cette classe prend en charge "les méthodes incluant print / show, plot, subset, [, [[, \ $, names, dim, summary, ..." La page d'aide pour subsetaffiche sa syntaxe. L'astuce est de savoir quel champ utiliser pour trouver Moscou! Je l'ai trouvé en regardant les valeurs uniques de tous les domaines, enfin en descendant levels(gadm$NAME_1). Cela a conduit à spplot(subset(gadm.prj, subset=(NAME_1=="Moskva")),"regions"), ce qui fait l'affaire.
whuber
je l'ai! merci beaucoup encore, vous m'avez vraiment sauvé, j'ai eu un problème car je ne connaissais pas la syntaxe des sous-ensembles
Ruvin Rafailov
7

Je vois que whuber m'a déjà battu, mais je posterai quand même ma réponse.

Si vous souhaitez conserver les données dans la projection longue, vous pouvez ajouter le paramètre " Enveloppement longitudinal " à la chaîne Proj4.

library(rgdal)

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

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

Cela centrera votre carte à 105 degrés de longitude est. entrez la description de l'image ici

ialm
la source
1
+1 C'est agréable de voir cette option disponible dans spTransform.
whuber