2017-09-20 4 views
1

J'ai créé une carte d'altitude à partir d'un objet raster (données d'altitude de worldclim) de mes sites d'étude en Chine, en utilisant le code ggplot (version simplifiée du code). Les objets raster pertinents ont été téléchargés depuis worldclim.org et convertis en data.frame en utilisant le paquetage raster. Voici un link aux données utilisées pour cette intrigue.Tracer des routes à partir d'un objet osmar sur une carte ggplot

# 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

Pour plus de clarté, je voudrais ajouter des routes à la carte. Je suis tombé sur le paquet osmar qui extrait les routes d'Openstreetmap. En utilisant le code de here, j'extrais les routes pour la section droite, mais je ne sais pas comment les tracer à mon ggplot existant.

# 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() 

L'objet nécessite-t-il une transformation pour le tracer dans ggplot? Ou y at-il une meilleure solution que le paquet osmar pour mon but?

Répondre

0

Vous pouvez fortify le SpatialLinesDataFrame puis tracer que avec ggplot

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

L'arrêt esthétique groupggplot de se joindre à toutes les routes en une seule longue ligne.

+0

Merci, Richard. Fonctionne parfaitement bien. – Aud