Как квалифицировать SpatialPolygonsDataFrame с помощью другого SpatialPolygonsDataFrame?

У меня есть шейп-файлы из данных переписи населения США census.gov.

Я прочитал файлы в R с помощью readOGR из библиотеки rdgal.

sp1: избирательный округ - SpatialPolygonsDataFrame

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

sp2: уровень блока для большей площади и более высокого разрешения, чем sp1 - SpatialPolygonsDataFrame.

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

Я пробовал использовать gIntersection из библиотеки rgeos, но он не возвращает то, что мне нужно. Или я не могу понять, как его правильно использовать

Как мне извлечь многоугольники с более низким разрешением и связанные данные из sp2, используя sp1 в качестве пространственного ограничения? Другими словами, я хочу знать все блоки внутри sp1, где пересекаются sp1 и sp2.

Текущее рабочее решение

Приведенный ниже код возвращает вектор значений индекса для sp2, где многоугольник имел хотя бы одну точку внутри sp1, но я хотел знать, есть ли более простой способ.

library(rgeos)
result <- vector()
for (i in 1:nrow(sp2)) {
    if(gContains(sp1, sp2[i,])) {
        result <- c(result, i)
    }
}

person Matt L.    schedule 17.02.2016    source источник


Ответы (1)


пытаться

gContains(sp1, sp2, byid = TRUE)

для парных содержит отношения для пар признаков.

sp2[sp1,]

выбирает те sp2 функции, которые пересекаются с sp1, но обязательно прочтите vignette('over'), чтобы узнать об ограничениях (сюда входят функции, которые только касаются).

person Edzer Pebesma    schedule 17.02.2016
comment
Справочная документация не имела особого смысла, но установка byid = true помогает. rpubs.com/washcycle/district99tabblockmap - person Matt L.; 20.02.2016