Chciałbym zrobić prawdziwy klip GIS w R wielokątów glebowych przy użyciu serii pojedynczych wielokątów granicznych, ale nie mogę znaleźć funkcji R, aby to zrobić poprawnie. Powinno działać podobnie jak clip
funkcja ArcMap ESRI. Próbowałem over
metody w sp
pakiecie, ale wydaje się, że nie działa ona dla polis nad polys.
Jedną z sugestii było użycie pakietu gIntersection
in rgeos
jako klipu przy użyciu następującego kodu:
#------------------------------------
library(rgeos)
library(maptools)
#Read layers as SpatialPolygonsDataFrame (both the same Albers projection)
Soils_poly = readShapePoly("Soils_polygons") #Note - Has 400 polygons
clipper_poly = readShapePoly("clipper_polygon") #Note - Has 1 polygon
#Try gintersection as clip
Clipped_polys = gIntersection(Clipper_Tile_poly, Soils_poly)
#-----------------------------------
Uruchomienie zajmuje 5 minut (zbyt wolno) i występują następujące błędy:
Błąd w RGEOSBinTopoFunc (spgeom1, spgeom2, byid, id, drop_not_poly, „rgeos_intersection”): TopologyException: brak wychodzącego kataloguEdge pod adresem -721459.77681285271 2009506.5980877089
Próbowałem także tego kodu, aby sprawdzić nakładanie się:
gIntersects(Clipper_Tile_poly, Soils_poly)
a wynik był PRAWDA. clip
funkcja w ESRI ArcMap działa dobrze dla tych danych.
Czy ktoś wie o funkcji R, aby poprawnie wykonać klip na wielokątach przestrzennych przy użyciu wielokątów przestrzennych?
Odpowiedzi:
Wskazówka podana przez @mdsummer użytkowania
byid=TRUE
działa dokładnie.Zobacz powtarzalny przykład poniżej:
źródło
Możesz także użyć pakietu rastrowego
raster::intersect(spdf1, spdf2)
. Ma tę zaletę, że zachowuje atrybuty w przypadku, gdy masz SpatialPolygonsDataFrame.Dzięki temu pytaniu wskazuję to i przykładowy kod.
źródło