Ich verwende die R maptools- Bibliothek, um das Shapefile in eine Liste von Polygonen zu analysieren. Die Funktion readShapeSpatial
shp <- readShapeSpatial("<path to my shapefile>")
gibt mir ein SpatailPolygonDataFrame- Objekt. In meinem Beispiel hat mein SpatialPolygonsDataFrame die folgenden Spalten:
> names(shp)
[1] "AREA" "PERIMETER" "COMAREA_" "COMAREA_ID" "AREA_NUMBE"
[6] "COMMUNITY" "AREA_NUM_1" "SHAPE_AREA" "SHAPE_LEN
Ich weiß, dass ich bestimmte Polygone durch ihre entfernen kann row.id
, z
shp.dropI <- shp[-i, ]
shp.subset <- shp[i %in% c(1,2,3),]
Jetzt möchte ich beispielsweise bestimmte Polygone mit einer Bedingung löschen AREA > 10
. Wie setze ich das elegant um? Die einzige Methode, die ich jetzt habe, besteht darin, alle Zeilen zu durchlaufen und entsprechende zu finden row.id
.
Antworten:
Zunächst würde ich empfehlen, readOGR aus der rgdal-Bibliothek zu verwenden, um Ihr Shapefile zu lesen. Es behält die Projektionsinformationen (proj4string) bei und erspart zahlreiche Kopfschmerzen beim String-Matching mit anderen Funktionen.
Zwei schnelle Möglichkeiten, um das zu erreichen, wonach Sie suchen, sind die Verwendung eines Index oder einer Teilmenge. Dadurch bleiben Polygone mit einer Fläche <10 erhalten (wobei diese> 10 entfernt werden).
quelle