Problem beim Zeichnen der Karte in R.

8

Beim Zeichnen der gadmKarte von Russland in habe Rich ein Problem am 180-Grad-Meridian, wo ein Teil der russischen Region separat dargestellt wird. Sie können es auf dem Plot mit dem folgenden Code sehen (es ist die Kante links und der Teil ist rechts). Kann jemand vorschlagen, wie dieses Problem vermieden werden kann?

Hier ist eine kurze Version des Codes für meine Frage:

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

Karte

Ruvin Rafailov
quelle

Antworten:

5

Projizieren Sie die Daten. In diesem Beispiel wird eine polare stereografische Projektion verwendet, die in der Nähe der Mitte Russlands zentriert ist (Länge 105 Grad Ost):

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

Karte

Die Problemregion befindet sich oben rechts. Sie können sehen, dass dieser Bereich in zwei Teile geteilt und aufgrund der Projektion wieder zu einem zusammenhängenden Bereich zusammengesetzt wurde: Die gemeinsame Grenze ist sichtbar. So ist es in den Daten: Es wird explizit als zwei separate Merkmale dargestellt. Um die sichtbare Teilung zu entfernen, müssten Sie die beiden Teile zusammenführen (eine Operation, die mit einem GIS viel einfacher als mit einem GIS durchgeführt werden kann R).

whuber
quelle
Nur noch eine dumme Frage, bitte, wenn Sie nichts dagegen haben, ich frage mich, wie es gemacht werden kann, nur ein Polygon von der Karte zu zeichnen, wie zum Beispiel nur Moskau
Ruvin Rafailov
2
Die Hilfeseite für spErwähnungen, dass diese Klasse "Methoden wie Drucken / Anzeigen , Plotten, Teilmenge, [, [[, \ $, Namen, Dim, Zusammenfassung, ..." unterstützt. Die Hilfeseite für subsetzeigt ihre Syntax. Der Trick besteht darin, zu wissen, auf welchem ​​Feld Moskau gefunden werden soll! Ich fand es, indem ich mir die einzigartigen Werte aller Felder ansah und schließlich ausstieg levels(gadm$NAME_1). Dies führte dazu spplot(subset(gadm.prj, subset=(NAME_1=="Moskva")),"regions"), was den Trick macht.
whuber
verstanden! Nochmals vielen Dank, Sie haben mich wirklich gerettet, ich hatte ein Problem, da ich nichts über die Syntax von Teilmengen wusste
Ruvin Rafailov
7

Ich sehe, dass Whuber mich schon geschlagen hat, aber ich werde meine Antwort trotzdem posten.

Wenn Sie die Daten in der Longlat-Projektion behalten möchten, können Sie der Proj4-Zeichenfolge den Parameter " Longitudinal Wrapping " hinzufügen.

library(rgdal)

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

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

Dadurch wird Ihre Karte auf 105 Grad östlicher Länge zentriert. Geben Sie hier die Bildbeschreibung ein

ialm
quelle
1
+1 Es ist schön zu sehen, dass diese Option in verfügbar ist spTransform.
whuber