Rgeos сбрасывает связанные значения при пересечении полигонов


11

Я пытаюсь пересечь два SpatialPolygonsDataFrames и получить SpatialPolygonsDataFrame в результате. К сожалению, используя gIntersectionфункцию from rgeos(которая работает впечатляюще быстро для пересечения полигонов), я не могу извлечь соответствующие кадры данных. Рассмотрим следующий пример:

> fracPoly <- gIntersection( toSingle, fromSingle )
> class(toSingle)
[1] "SpatialPolygonsDataFrame"
> class(fromSingle)
[1] "SpatialPolygonsDataFrame"
> class(fracPoly)
[1] "SpatialPolygons"

Я могу написать функцию-обертку, которая обрабатывает передачу data.frames, но это будет небольшая боль, чтобы сделать всю проверку правильной, и до того, как я это сделал, я надеялся, что кто-то может подтвердить, что нет лучшего способа или указать мне на другую функцию (или вариант за gIntersection) который позволил бы мне сохранить связанный data.frames.

Обновить

При дальнейшем размышлении, это может быть очень преднамеренным поведением gIntersection. В конце концов, из двух SPDF, чей data.frame вы передаете? Поэтому мне, возможно, придется написать обертку, которая объединит их.


1
Как вы загружаете свои полигоны - readShape * или readOGR? Я получаю странное поведение с gIntersection в зависимости от того, какую библиотеку я использовал для загрузки SPDF, чего я до сих пор не получил.
Симбамангу

@Simbamangu Интересно. Я использую readShapePoly, а затем объединяю в data.frame ....
Ари Б. Фридман

gIntersection ДОЛЖЕН предоставлять data.frames, объединенные для перекрывающихся областей - если я запускаю Vector | Geoprocessing | Intersect в QGIS, выходные данные представляют собой набор объединенных атрибутов для перекрытия, и QGIS не использует ту же библиотеку GEOS для пространственных операций, как это?
Симбамангу

Ну, если так, то я в тупике. Я уже переписал свой код, чтобы вручную объединить data.frames и вернуть их обратно, поэтому сейчас я не буду тратить на это больше времени. Но намек на то, что чтение функции в шейп-файле имеет значение, полезен.
Ари Б. Фридман

1
Это явно не ответ, но у меня недостаточно очков, чтобы оставить комментарий ... Ари, мне было интересно, если бы вы поделились своим фрагментом кода для извлечения переменных после функций наложения rgeos. У меня возникают проблемы, когда я пытаюсь обернуть голову хорошим способом сохранить исходные идентификаторы многоугольника из различных операций rgeos, таких как gUnion ...
jed.a.long

Ответы:


2

Для какого-то проекта у меня была такая же потребность. Намного больше, чем сохранение data.frame, нам пришлось добавить дополнительный код для управления типом выходной геометрии и перейти к некоторой очистке (например, очистить коллекции геометрии), чтобы получить некоторый полный геообработка пересечения. Если вам все еще нужно выполнить такую ​​задачу в R, вы можете попробовать пакет RFigisGeo :

#install RFigisGeo
require(devtools) 
install_github("RFigisGeo", "openfigis")
require(RFigisGeo)

#compute intersection
result <- getIntersection(features1, features2)

Ваши ответы и @ berndv выглядят так, как будто они решат мою проблему. Благодаря! Отметить этот, так как он появился первым.
Ари Б. Фридман

10

Поведение gIntersection не состоит в том, чтобы передавать какие-либо пересеченные данные по проекту:

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

... Дизайн gIntesection () не является обязательным, потому что только пользователь может знать, что делать с атрибутами сущностей, у которых изменилась их геометрия. Разные пользователи могут делать разные предположения, но нет общего решения, кроме как проходить через идентификаторы пересекающихся геометрий, как это делается в механизме row.names ().

К моему удивлению, растровый пакет имеет функцию пересечения , которая просто пересекает и передает данные.

В растровом пакете есть несколько функций, которые расширяют rgeos, также пытаясь обрабатывать данные атрибутов. В этом случае смотрите raster :: intersect И список функций здесь:? "Raster-package" (раздел XIV)

Полная информация, которую я получил по этому адресу : http://r-sig-geo.2731867.n2.nabble.com/Intended-usage-of-gIntersection-td7587120.html


0

Для тех (как я), для которых вышеупомянутые ответы не работали, ссылка здесь объясняет, что вы можете сделать эту точную вещь с пересечением растра.

Как сохранить все данные атрибутов при обрезке двух полигонов в R?

Я использовал это, чтобы обрезать SpatialPointsDataFrame с шейп-файлом SpatialPolygons; он создает обрезанную / обрезанную версию SpatialPointsDataFrame, сохраняя исходные данные.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.