объединение данных osm (загруженных с пакетом osmdata) в существующую карту шейп-файлов ggplot r - PullRequest
0 голосов
/ 16 марта 2020

Я хочу построить карту, используя данные OSM. Необходимые данные можно легко загрузить с помощью пакета osmdata -R. К сожалению, для моего региона не все данные доступны в OSM. Поэтому я скачал шейп-файл Региона с административными границами, в которых я заинтересован. Моя проблема в том, что я не могу отобразить информацию шейп-файла вместе с информацией OSM на одном графике.

Мой рабочий процесс:

library(raster)
library(rgdal)
library(tidyverse)
library(broom)
library(rgeos)
library(osmdata)
library(sf)



# Download shapefile from Leipzig with "Ortteile" (engl. urban districts)
https://gruenlink.de/1py4
# import Ortsteile Leipzigs
lpz_ot <- readOGR("ot.shp")
names(lpz_ot)
# convert spatial object to a ggplot ready data frame
lpz_ot_df <- tidy(lpz_ot,OT = "id")
# make sure the shapefile attribute table has an id column
lpz_ot$id <- rownames(lpz_ot@data)
# join the attribute table from the spatial object to the new data frame
lpz_ot_df <- lpz_ot_df %>%
  left_join(lpz_ot@data,by = "id")
# check names
names(lpz_ot_df)


# Download interessting OSM Data (e.g. railways and tramlines)
#bounding box Leipzig
lpz_box <- opq(bbox = 'Leipzig')
# Plygon for Leipzig
lpz_poly <- getbb(place_name = c("Leipzig"),format_out = "polygon")
# railways and tramlines in Leipzig (in bounding box)
sv <- lpz_box%>% 
  add_osm_feature(key = "railway", value = c("tram","rail")) %>%
  osmdata_sf() 
# railways and tramlines in Leipzig (within administrative boundaries of Leipzig)
svt <-  trim_osmdata (sv,lpz_poly,exclude =TRUE)

Я легко могу построить файл формы или osmdata с помощью ggplot. Но я не могу построить оба в одном сюжете. В чем моя ошибка в повторной оценке?

Код моего графика:

ggplot() +
  geom_path(data = lpz_ot_df, aes(x = long, y = lat, group = group,color="black"))+
  geom_sf(data = svt$osm_lines, aes(color = railway),size=1.3) +
  theme_void() +
  guides(color = FALSE)+
  labs(title ="Urban districts in Leipzigs (with railwaynet)")

Чтобы проверить это, просто закомментируйте geom_path() или geom_sf() строки.

I думаю, это как-то связано с координатами, но я не знаю, как назначить правильные координаты.

Спасибо за любую помощь!

1 Ответ

1 голос
/ 16 марта 2020

Это действительно связано с системами координат. Я рекомендую вам использовать sf также, чтобы прочитать ot.shp в R, а затем изменить систему координат. Это заменит первую часть вашего кода (перед загрузкой данных OSM) на:

lpz_ot = st_read('ot.shp') %>% st_transform(crs = 4326)

Чтобы отобразить его, просто замените строку geom_path в коде ggplot на:

geom_sf(data = lpz_ot)
...