Чтение и уменьшение .kmz

Я новичок в использовании R в географии.

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

library(rgdal)
library(tidyverse)

Если посмотреть на .kml в текстовом редакторе, похоже, что имя слоя KML - "cnrfc_09122018_basins_thin", поэтому читаем его с помощью:

cnrfc_basins <- readOGR("basins.kml", "cnrfc_09122018_basins_thin")

дает мне "Large SpatialPolygonsDataFrame".

Чтобы иметь возможность строить график, похоже, мне нужно «укрепить его» (?) И сделать более обычным data.frame, поэтому из некоторых других сообщений, с которыми я сталкивался:

cnrfc_basins_fortify <- merge(broom::tidy(cnrfc_basins), 
                        as.data.frame(cnrfc_basins), by.x="id", by.y=0)

построение с этим:

ggplot() + geom_path(data = cnrfc_basins_fortify, aes(x=long, y=lat, group = group))  +
           coord_quickmap()

дает мне данные, которые я ожидаю:

введите описание изображения здесь

Но для этих примерно сотни полигонов у меня есть сотни тысяч строк data.frame. Как уменьшить их, чтобы у меня была только одна строка для каждого многоугольника? (Каждый многоугольник, который представляет конкретный бассейн, уже имеет уникальный пятизначный идентификатор в столбце «Имя»). Чем меньше строк, тем проще работать с файлом и быстрее соединяться, когда я присоединяю данные к этим уникальным многоугольникам.

Любой совет очень ценится.


person dbo    schedule 16.03.2019    source источник
comment
Зачем вам нужен data.frame? Почему бы просто не построить cnrfc_basins напрямую? Попробуйте составить заговор с cnrfc_basins вместо cnrfc_basins_fortify   -  person G5W    schedule 16.03.2019
comment
Я вижу, это сработало. Если бы у меня был другой data.frame наблюдений для каждого из полигонов, работали бы обычные методы соединения? Спасибо.   -  person dbo    schedule 16.03.2019
comment
Если вы также получаете другой набор наблюдений с помощью st_read, вы сможете объединить их с помощью st_union.   -  person G5W    schedule 16.03.2019
comment
Потрясающе - приятно знать. Наблюдения происходят из файла .csv.   -  person dbo    schedule 16.03.2019


Ответы (1)


Все, что вам нужно, это напрямую извлечь @data, содержащийся в SpatialPolygonsDataFrame:

poly = cnrfc_basins@data

Это должно дать вам 339-строчный data.frame с необходимыми уникальными идентификаторами (без геометрических метаданных).

> head(poly)
   Name
0 EFBC1
1 CSKC1
2 CMIC1
3 FMDC1
4 NMFC1
5 NFDC1
person the_darkside    schedule 16.03.2019