Я создал 2 полигона в QGIS. Используя их в R, полигоны автоматически становятся SpatialPolygonsDataFrame (SPDF). Я хотел бы объединить их в один SPDF (как это легко сделать в ArcGis, используя инструмент Merge ). Я уверен, что должен быть простой способ, как это сделать в R, но я не могу найти как. слияния функция , кажется, сливаются только data.frames, совокупная функция растворения нескольких полигонов в один SHP, gIntersect (путем ввода функции соединение) возвращает логическое значение, а не на всех SPDF.
данные доступны здесь: http://ulozto.cz/xpoo5jfL/ab-zip
library(sp)
library(raster)
library(rgeos)
library(spatstat)
library(rgdal)
library(maptools)
setwd("C:/...")
a<-readOGR(dsn=getwd(), layer="pol.a")
b<- readOGR(dsn=getwd(), layer="pol.b")
ab<-merge(a, b) # what tool if not "merge" to use??
r
spatial-analyst
merge
maptools
maycca
источник
источник
Ответы:
Если вам не нужно объединять топологию, а просто добавлять новые полигоны, вы можете просто использовать:
ab <- rbind(a,b)
Если вы получаете сообщение об ошибке «Неуникальные значения слотов идентификатора полигона», это означает, что имена строк объектов совпадают. Чтобы это исправить, вы можете использовать spChFID для изменения имен строк и связанных с ними отношений слотов. Поскольку слоты в объекте используют имена строк для связывания объекта, вы не можете просто изменить row.names в слоте @data.
Функция union (union_sp) в растровом пакете делает это и вызывает gIntersects из rgeos, негласно и является очень удобной вспомогательной функцией.
**** Edit 08-06-2018 Существует недокументированный аргумент, который можно использовать, чтобы пропустить проблему с дублирующимся идентификатором.
источник
ab <- bind(a, b)
чтобы избежать этой ошибкиСупер простое решение, предоставляемое @mdsumner:
привело к:
источник
raster::union
работает и для класса SpatialLinesDataFrame!источник