2017-09-20 4 views
1

Ich habe eine Höhenkarte von einem Raster-Objekt (Höhendaten von worldclim) meiner Studienseiten in China erstellt, mit ggplot-Code (vereinfachte Version des Codes). Die relevanten Raster-Objekte wurden von worldclim.org heruntergeladen und mit dem Raster-Paket in einen data.frame konvertiert. Hier ist ein link zu den Daten für dieses Diagramm verwendet.Straßen aus einem Osmar-Objekt auf einer ggplot-Karte plotten

# load library 
library("tidyverse") 
load(file = "gongga.RData") 

ggplot() + 
geom_raster(data = gongga, aes(x=x, y=y, fill = elev)) + 
coord_equal() + 
scale_fill_gradient(name = "Elevation", low = "grey0", high = "grey100") + 
scale_x_continuous(expand = c(0,0)) + 
scale_y_continuous(expand = c(0,0)) + 
theme(aspect.ratio=1/1, text = element_text(size=15)) 

Picture of the map created in ggplot

Aus Gründen der Klarheit würde Ich mag Straßen der Karte hinzuzufügen. Ich stieß auf das osmar-Paket, das Straßen von Openstreetmap extrahiert.

Mit Code von here, extrahiere ich die Straßen für den rechten Abschnitt, aber ich weiß nicht, wie sie zu meinem vorhandenen ggplot plotten.

# EXTRACT ROADS FROM OPENSTREETMAP AND PLOT THEM WITH RANDOM POINTS 
# Load libraries 
library('osmar') 
library('geosphere') 

# Define the spatial extend of the OSM data we want to retrieve 
moxi.box <- center_bbox(center_lon = 102.025, center_lat = 29.875, 
width = 10000, height = 10000) 

# Download all osm data inside this area 
api <- osmsource_api() 
moxi <- get_osm(moxi.box, source = api) 

# Find highways 
ways <- find(moxi, way(tags(k == "highway"))) 
ways <- find_down(moxi, way(ways)) 
ways <- subset(moxi, ids = ways) 

# SpatialLinesDataFrame object 
hw_lines <- as_sp(ways, "lines") 

# Plot points 
plot(hw_lines, xlab = "Lon", ylab = "Lat") 
box() 

Benötigt das Objekt eine Transformation, um es in ggplot zu plotten? Oder gibt es eine bessere Lösung als Osmar-Paket für meinen Zweck?

Antwort

0

können Sie fortify die SpatialLinesDataFrame und dann mit ggplot

fortify(hw_lines) %>% 
    ggplot(aes(x = long, y = lat, group = group)) + 
    geom_path() 

Die group ästhetische stoppt ggplot von der Teilnahme an allen Straßen zusammen in eine lange Linie zeichnen, dass.

+0

Danke, Richard. Funktioniert einwandfrei. – Aud

Verwandte Themen