Mehr

Gibt es eine Möglichkeit, unverzerrte Karten in R zu erhalten (bei Verwendung des OpenStreetMap-Pakets)?

Gibt es eine Möglichkeit, unverzerrte Karten in R zu erhalten (bei Verwendung des OpenStreetMap-Pakets)?


Wenn ich eine große Karte in R herunterlade (mit derOpenStreetMapPaket) und ich projiziere die Karte neu (idealerweise auf+proj=longlat).

F1: Gibt es eine Möglichkeit, eine solche Karte (idealerweise noch in R) so zu erhalten, dass Sie die Beschriftungen noch lesen können? Zweitens, wenn ich die Originalkarte (in Mercator-Projektion) behalte, aber die Punkte "reprojiziere" und die Karte in einem (ggplot2)-Plot verwende, sehen die Beschriftungen immer noch seltsam aus - wahrscheinlich, weil sich die Größe des Kartenbilds zwischen dem Herunterladen geändert hat und Plotten.

F2: Gibt es eine Möglichkeit, entweder die perfekt dimensionierten Kacheln herunterzuladen oder die ursprüngliche Kachelgröße im Plot zu verwenden, damit die Beschriftungen nicht verschwommen aussehen?

Mein Code (für Q1, aber auch Q2 basiert darauf) sieht ähnlich aus:

Bibliothek(OpenStreetMap) Karte <- openmap(c(85,-179.99999),c(-60,179.99999), zoom=2, type = "osm") # - type="nps" ist ungefähr der einzige Typ, der in Ordnung aussieht, weil er hat keine Labels Karte <- openproj(map) plot(map)

… und die Karte sieht so aus (bei genauerem Hinsehen erkennt man deutlich "Brasilien", aber "Russische Föderation" (auf Russisch) nicht so sehr):


Wenn Sie ein Raster mit Beschriftungen neu projizieren, erhalten Sie offensichtlich gequetschte Beschriftungen.

Die einzige Möglichkeit, dies zu vermeiden, besteht darin, das Raster aus Vektordaten direkt in die gewünschte Projektion zu rendern. Vielleicht möchten Sie Mapnik, Tilemill oder Maperitive verwenden, um dies aus Openstreetmap-Rohdaten (die ist Vektordaten).

Das ROpenStreetmapPaket bietet nur Rasterdaten von Kacheln, die für diese Aufgabe nicht geeignet sind. DasosmarPaket könnte einen besseren Job machen, aber Sie werden damit weltweit kein Glück haben. Es sind einfach zu viele Daten, um sie zu verarbeiten.


Der folgende Code mag etwas langatmig erscheinen, da er einen manuellen Ansatz darstellt, anstatt sich darauf zu verlassen OpenStreetMap, aber vielleicht hilft es dir trotzdem. Die Ländergrenzen und die entsprechenden Länderbezeichnungen habe ich aus demwrld_simplDatensatz (Klasse 'SpatialPolygonsDataFrame', projiziert in EPSG:4326), der mitgeliefert wird Kartentools. Die Shapefile-Daten wurden in dem von Ihnen oben genannten Umfang beschnitten.

## Beispieldatenbibliothek(maptools) data("wrld_simpl") ## Antarktisbibliothek entfernen(raster) ext <-extent(c(-179.99999, 179.99999, # xmin, xmax -60, 85)) #ymin, ymax spy_world -crop(wrld_simpl, ext)

Bezüglich der Labelplatzierung werden derzeit nur Länder mit einer Fläche größer 250.000 (* 1.000 Hektar) gekennzeichnet, die Sie aber eventuell Ihren persönlichen Vorlieben anpassen möchten.

## Länder größer als 250.000 (* 1.000 ha) int_id_large <- [email protected]$AREA > 250000 [email protected]$LABEL <- " " [email protected]$LABEL[int_id_large] <- as.character([email protected]$NAME[ int_id_large])

Ich habe einen kleinen Code-Chunk geschrieben, der das größte Subpolygon pro Land identifiziert und die zentralen Koordinaten davon basierend auf . berechnetrgeos::gCentroid. Andernfalls wären einige Beschriftungen schlecht positioniert (z. B. USA mit Alaska, Hawaii usw., die die Zentrumskoordinaten im Vergleich zum Festlandbereich ziemlich verzerren).

## Schwerpunktkoordinaten des größten Polygons pro Land Bibliothek (rgeos) ls_spt_cntr <- lapply([email protected], function(i) { # Flächen von Unterpolygonen pro Land num_area <- sapply([email protected], function(j) { attr (j, "area") }) # Polygone zu räumlichen Polygonen py_largest <- [email protected][which.max(num_area)] py_largest <- Polygons(py_largest, ID = [email protected]) spy_largest <- SpatialPolygons(list(py_largest) , proj4string = CRS(proj4string(spy_world))) # Zentrumskoordinaten gCentroid(spy_largest) }) spy_cntr <- do.call("rbind", ls_spt_cntr)

Schließlich visualisierte ich die Polygone mitspplotzusammen mit Gitter-betriebene Etikettenplatzierung überltext.

## Bibliothek visualisieren(latticeExtra) png("worldmap.png">