Чтение и уменьшение .kmz - PullRequest
0 голосов
/ 16 марта 2019

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

Рабочая .kmz: https://www.cnrfc.noaa.gov/ - из второго выпадающего меню под областью карт под названием «Загрузка файлов наложения», я скачал и использую кмл «Дренажные бассейны», которыйдолжен загружаться как "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()

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

enter image description here

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

Любой совет с благодарностью.

1 Ответ

0 голосов
/ 16 марта 2019

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

poly = cnrfc_basins@data

Это должно дать вам data9rame из 339 строк с уникальными идентификаторами, которые вынужно (без геометрических метаданных)

> head(poly)
   Name
0 EFBC1
1 CSKC1
2 CMIC1
3 FMDC1
4 NMFC1
5 NFDC1
...