Viac

Zlúčenie viacerých rámcov SpatialPolygonDataFrames do 1 SPDF v R?


V QGIS som vytvoril 2 polygóny. Pri ich použití v R sa polygóny automaticky stanú SpatialPolygonsDataFrame (SPDF). rád by som zlúčiť ich do jedného SPDF (ako je to v ArcGise pomocou nástroja veľmi jednoduché Zlúčiť). Som si istý, že by mal existovať jednoduchý spôsob, ako to dokončiť v R, ale neviem nájsť. the zlúčiť Zdá sa, že funkcia zlúči iba data.frames, agregát funkcia rozpúšťa viac polygónov do jednej SHP, gIntersect (zadaním funkcie join) vráti logickú hodnotu, vôbec nie SPDF.

údaje sú k dispozícii tu: http://ulozto.cz/xpoo5jfL/ab-zip

knižnica (sp) knižnica (raster) knižnica (rgeos) knižnica (spatstat) knižnica (rgdal) knižnica (maptools) setwd ("C: / ...") a <-readOGR (dsn = getwd (), vrstva = "pol.a ") b <- readOGR (dsn = getwd (), vrstva =" pol.b ") ab <-merge (a, b) # aký nástroj, ak nie" zlúčiť "použiť ??

Ak nepotrebujete zlúčiť topológiu, ale iba pridať nové polygóny, môžete jednoducho použiť:

ab <- rbind (a, b)

Ak sa zobrazí chyba „nejedinečné hodnoty slotu ID mnohouholníka“, znamená to, že názvy riadkov objektov sú rovnaké. Ak to chcete opraviť, môžete pomocou spChFID zmeniť názvy riadkov a súvisiace vzťahy medzi slotmi. Pretože sloty v objekte používajú na priradenie objektu názvy riadkov, nemôžete v riadku @data iba zmeniť Row.names.

b <- spChFIDs (b, paste ("b", row.names (b), sep = "."))

Funkcia union (union_sp) v rastrovom balíku to robí a volá gIntersects z rgeos, v zákulisí, a je veľmi pohodlnou pomocnou funkciou.

**** Úpravy 08-06-2018 Existuje neregistrovaný argument, ktorý možno použiť na preskočenie problému s duplikátom ID.

ab <- rbind (a, b, makeUniqueIDs = TRUE)

Super ľahké riešenie poskytované @mdsumner:

knižnica (sp) knižnica (raster) knižnica (rgeos) knižnica (spatstat) knižnica (rgdal) knižnica (maptools) setwd ("C: / ...") a <-readOGR (dsn = getwd (), vrstva = "pol.a ") b <- readOGR (dsn = getwd (), vrstva =" pol.b ") # použiť zjednotenie v balíčku {raster}? raster :: union ab <-union (a, b)

viedlo k :

trieda (ab)

[1] "SpatialPolygonsDataFrame" attr (, "balík") [1] "sp"


knižnica (sp) dáta (meuse) plot (meuse) slotNames (meuse) # ". Údaje" "mená" "row.names" ".S3Class" súradnice (meuse) <- ~ x + y #Pridať stĺpec "ID" do „meuse“ slotNames (meuse) # [1] „data“ „coords.nrs“ „coords“ „bbox“ „proj4string“ trieda (meuse) # [1] „SpatialPointsDataFrame“ názvy (meuse @ data) # [1] “ kadmium "" meď "" olovo "" zinok "" elev "" dist "" om "" ffreq "" pôda "" vápno "# [11]" landuse "" dist.m "meuse @ data <- data.frame ( ID = 1: nrow (meuse), meuse @ data) #pridá názvy polí ID (meuse @ data) # [1] "ID" "kadmium" "meď" "olovo" "zinok" "elev" "dist" " om "" ffreq "" pôda "# [11]" vápno "" landuse "" dist.m "#Vytvorte stĺpec data.frame" df.new "so stĺpcami" IDS "(všimnite si iný názov) a" y ". meuse_table.df <- data.frame (IDS = 1: nrow (meuse), y = runif (nrow (meuse))) class (meuse_table.df) # "data.frame" # Teraz môžeme zlúčiť "df.new" to "meuse" (@data slot) meuse <- merge (meuse, meuse_table.df, by.x = "ID", by.y = "IDS") #vytvorte nový súbor s názvom meuse, ktorý sa skladá zo zlúčenia: # priestorové body meuse (z originálu) # dátový rámec vytvorený z originálu pomocou príkazu data.frame # BY pole „ID“ v spatialpointsdataframe # podľa poľa „IDS“ v tabuľkovom dátovom rámci (df.new) head (meuse @ data) # Myslím, že zdrojom nepokoja je to, že pridanie poľa ID do oboch súborov #je založené na tom, že majú rovnaký počet riadkov v rovnakom poradí. #v ArcGIS by to bol nerozumný a nebezpečný predpoklad. Zdá sa, že #R má akési „vrodené“ kľúčové pole na základe poradia, ako ho prečítať. # To je skvelé, keď rozdelíte jeden súbor a spojíte ho späť. # ale čo dva súbory? # Myslím si, že sa to dá urobiť, ale je to proces pozostávajúci z troch krokov. # Najprv zlúčte polygóny. Pridajte pole ID, ako je uvedené vyššie. # Druhá, zlúčte tabuľky (ako dátové rámce) a pridajte ID. ako je uvedené vyššie. # Po tretie, pripojte zlúčené tabuľky k zlúčeným polygónom. # Aby to fungovalo, musí byť poradie vecí v zlúčení (polgyons, dataframe) identické.


Pozri si video: Spatial joins in ArcMap (Október 2021).