объединить данные в .kmz или .kml и построить - PullRequest
1 голос
/ 23 марта 2019

Я немного новичок в R и совершенно новичок в R геопространственно. Я пытаюсь прочитать загружаемый файл .kml, присоединить к нему свои собственные данные и построить данные.

.kml с этой домашней страницы: https://www.cnrfc.noaa.gov/ - слой «Дренажные бассейны» из выпадающего меню «Загрузить наложенные файлы» прямо под картой (размер файла крошечный).

library(rgdal)
library(tidyverse)

# read in the downloaded file
# downloads as "basins.kml", "layer name ID'd from viewing .kml as text
spatialpolydf <- readOGR("basins.kml", "cnrfc_09122018_basins_thin")

#view the polygons (california river basins)
ggplot() + geom_path(data = spatialpolydf, aes(x=long, y=lat, group = group))  +
           coord_quickmap()

#create example observations for the 339 river basins
observation_value2 <- sample(1:1000, 339)

#get the basin names #not sure this is reliable
observation_place <- spatialpolydf@data 

#create data.frame for joining to the spatial data frame
#but, I'm not sure I quite need a data.frame, maybe just a tibble or data.table?

obs_place_value <- data.frame(observation_place, observation_value2)

Итак, я надеюсь присоединиться и визуализировать наблюдения, используя библиотеки выше или любые другие, с чем-то вроде:

spatialpolydf_withjoineddata <- some_join_function(obs_place_value,
                                                   spatialpolydf)
ggplot() + geom_path(data = spatialpolydf_withjoineddata, aes(x=long, y=lat,
           group = group, fill = observation_value2))  + coord_quickmap()

Кажется, было бы неплохо иметь один объект / data.frame из 339 строк данных, где каждая строка может представлять несколько полигонов, как это делает таблица атрибутов ESRI, с обычно скрытыми ненужными геометрическими данными. Я открыт для всех предложений, но в идеале я изучу методы, которые оставляют данные в удобном / гибком формате для последующей обработки / визуализации, а не для быстрого исправления, просто чтобы увидеть эти данные.

enter image description here

1 Ответ

1 голос
/ 23 марта 2019

Вы пометили свой вопрос тегом sf, поэтому я думаю, что вы, вероятно, хотите узнать больше о sf.Ниже приведен скрипт для преобразования вашего объекта sp в объект sf, присоединения к фрейму данных obs_place_value, а затем визуализации данных с observation_value2 в качестве значения заполнения.Объект sf - это особый тип фрейма данных, поэтому функция работает с фреймом данных, как и left_join, также может работать с объектом sf.geom_sf - это функция для построения объекта sf.

library(rgdal)
library(tidyverse)
library(sp)
library(sf)

# read in the downloaded file
# downloads as "basins.kml", "layer name ID'd from viewing .kml as text
spatialpolydf <- readOGR("Data/basins.kml", "cnrfc_09122018_basins_thin")

# set.seed for reproducibility
set.seed(123)

#create example observations for the 339 river basins
observation_value2 <- sample(1:1000, 339)

#create data.frame for joining to the spatial data frame
obs_place_value <- data.frame(observation_place, observation_value2)

# Convert spatialpolydf to an sf object
spatialpolysf <- spatialpolydf %>% st_as_sf()

# Join the data
spatialpolysf2 <- spatialpolysf %>%
  left_join(obs_place_value, by = c("Name", "Description"))

# Use ggplot2 to plot the data
ggplot(spatialpolysf2) +
  geom_sf(aes(fill = observation_value2))

enter image description here

...