Как пространственно объединить 2 фрейма данных пространственного полигона? - PullRequest
1 голос
/ 23 мая 2019

Я новичок в R;) У меня есть 2 SpatialPolygonsDataFrames, к которым я хочу пространственно присоединиться.Но я пока не нашел полезной информации.

Так что 2 кадра SpatialPolygonsDataFrames абсолютно одинаковы.Те же фигуры, экстент, crs, количество строк во фрейме данных (количество фигур).Только у них нет общего идентификатора для объединения двух.Поэтому я подумал, что смогу сделать пространственное соединение, как я использовал раньше в ArcGIS ?!

Итак, я нашел код для слияния, но это не то, что я хочу, и я не знаю, как его изменить, так что это соответствует моим намерениям.

В качестве вывода я хочу 1 пространственный многоугольникфрейм данных с атрибутами (столбцами) 2 входных фреймов данных вместе.Я надеюсь, что кто-то может мне помочь!

1 Ответ

1 голос
/ 23 мая 2019

Я пытаюсь придерживаться sp и rgeos.

Если оба SpatialPolygonsDataFrames, как я понимаю, содержат одинаковые полигоны, которые вы можете сделать:

library(raster)

int <- intersect(sp1, sp2)

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

ОБНОВЛЕНИЕ: Если многоугольники не совпадают, возьмите центр тяжести одного SpatialPolygonsDataFrames и объедините его с другим.

centroids <- gCentroid(sp1, byid = T)
sp1_centroid <- SpatialPointsDataFrame(centroids, sp1@data)

centroiddata <-  sp2 %over% sp1_centroid 

sp12 <- spCbind(sp2, centroiddata)

Если полигоны имеют странные формы, но в целом все еще очень похожи, то можно сделать то же самое с gPointsOnSurface(), вместо этого gCentroid() может вычислять центроиды вне полигона. Если полигоны в обоих df очень различны, вероятно, следует рассчитать перекрытие, например, this и выбрать тот, у которого наибольшее перекрытие.

...