Подмножество SpatialPolygonsDataFrame

У меня есть SpatialPolygonsDataFrame, который я создал, прочитав шейп-файл, используя readOGR в пакете rgdal. Я пытаюсь использовать его для создания сетки выборки с использованием spsample в пакете sp, который будет использоваться для интерполяции данных обследования, собранных в этом районе. Однако SpatialPointsDataFrame охватывает гораздо большую область, чем обследование, и в результате интерполяция предсказывает значения далеко от того места, где проводились какие-либо обследования. Данные съемки и шейп-файл были спроецированы с использованием одной и той же proj4string.

Я хотел бы подмножество SpatialPolygonsDataFrame, используя координаты, установленные геодезическими станциями, но я не уверен, где соответствующие значения хранятся в объекте.

Боюсь, что я не могу предоставить соответствующие данные, поскольку шейп-файл не размещен в Интернете. Однако я позаимствую код из ответа Пола Хиемстры на это сообщение для Нидерландов:

library(ggplot2)
library(sp)
library(automap)
library(rgdal)

#get the spatial data for the Netherlands
con <- url("http://gadm.org/data/rda/NLD_adm0.RData")
print(load(con))
close(con)

class(gadm)
bbox(gadm)
>         min      max
>r1  3.360782  7.29271
>r2 50.755165 53.55458

Допустим, опросы проводились в этой области:

bbox(surveys)
    >         min      max
    >r1     4.000    7.000
    >r2    51.000   53.000

Как я могу вырезать эту область SpatialPolygonsDataFrame?


РЕДАКТИРОВАТЬ: этот вопрос, кажется, отвечает на мой вопрос. Приносим извинения за недостаточный поиск (хотя комментарии дали мне некоторое представление о том, куда обратиться с rgeos). Однако gIntersection вызывает сбой R ...


person jslefche    schedule 18.04.2012    source источник
comment
Краткий ответ, вероятно, будет «пакет: rgeos». Извините, у меня сейчас нет времени на подробный ответ. Отсюда только комментарий ...   -  person Spacedman    schedule 18.04.2012
comment
Посмотрите на функцию gIntersection () в пакете rgeos   -  person Sophia    schedule 18.04.2012
comment
Я смутно припоминаю, что в одном из пространственных пакетов есть функция наложения, которая возвращает логическое значение совпадающих многоугольников. Затем вы можете использовать taRifx :: subsetSPDF для захвата только этих полигонов.   -  person Ari B. Friedman    schedule 18.04.2012
comment
Из вопроса неясно, хотите ли вы обрезать многоугольники до ограничивающей рамки точек (в вашем примере gadm есть только один объект) или хотите ли вы удалить какие-либо объекты, которые не пересекают точки. Первый легко использовать over () и [в sp, второй требует инструментов топологии, и rgeos - это то, что нужно, но вы действительно хотите вырезать ограничивающую рамку точек?   -  person mdsumner    schedule 19.04.2012
comment
Извините, я должен был сказать, что второе легко использовать over (), первое требует топологии. . .   -  person mdsumner    schedule 19.04.2012
comment
@Sophia, спасибо за инициативу. Я пытаюсь gIntersection в настоящее время, но это занимает довольно много времени. Не уверен, что это нормально при работе с шейп-файлами ...   -  person jslefche    schedule 19.04.2012


Ответы (1)


В зависимости от размера полигонов вы можете сделать что-то вроде

range = cbind(c(4,7), c(51,53))
centroids <- coordinates(spdf)

spdf.subset <- spdf[centroids[,1] > range[1,1] &
                    centroids[,1] < range[2,1] &
                    centroids[,2] > range[1,2] &
                    centroids[,2] < range[2,2],]
person fgregg    schedule 19.06.2012