Построение дорог от осмарского объекта на карте ggplot

Я создал карту высот из растрового объекта (данные высот из worldclim) моих учебных площадок в Китае, используя код ggplot (упрощенная версия кода). Соответствующие растровые объекты были загружены с worldclim.org и преобразованы в data.frame с использованием растрового пакета. Вот ссылка на данные, используемые для этого участка.

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

Изображение карты, созданной в ggplot

Для наглядности хотелось бы добавить дороги на карту. Я наткнулся на пакет osmar, который извлекает дороги из Openstreetmap.

Используя этот код, я извлекаю дороги для нужного участка, но я не знаю, как построить их для моего существующего ggplot.

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

Требуется ли объекту преобразование, чтобы отобразить его в ggplot? Или для моей цели есть лучшее решение, чем пакет osmar?

1 ответ

Решение

Вы можете fortify SpatialLinesDataFrame а затем заговор с ggplot

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

group эстетические остановки ggplot от объединения всех дорог в одну длинную линию.

Другие вопросы по тегам