Wie kann ich bei einem Raumobjekt in R alle seine Elemente so beschneiden, dass sie in einem Begrenzungsrahmen liegen?
Ich möchte zwei Dinge tun (im Idealfall weiß ich, wie man beides macht, aber beides ist eine akzeptable Lösung für mein aktuelles Problem - die Beschränkung eines Polygon-Shapefiles auf die kontinentalen USA).
Legen Sie jedes Element nicht vollständig im Begrenzungsrahmen ab. Dies scheint
bbox()<-
der logische Weg zu sein, aber es gibt keine solche Methode.Führen Sie eine echte Clip-Operation durch, sodass nicht infinitesimale Elemente (z. B. Polygone, Linien) an der Grenze abgeschnitten werden .
sp::bbox
Da mir eine Zuweisungsmethode fehlt, ist die einzige Möglichkeit, die ich mir ausgedacht habe, die Verwendungover
odergContains
/gCrosses
und die Verknüpfung mit einem SpatialPolygons-Objekt, das eine Box mit den Koordinaten der neuen Begrenzungsbox enthält. Wenn Sie dann ein Polygonobjekt beschneiden, müssen Sie herausfinden, welche Polygone im Vergleich zu Kreuz enthalten sind, und die Koordinaten dieser Polygone so ändern, dass sie das Feld nicht überschreiten. Oder so ähnlichgIntersection
. Aber es gibt doch einen einfacheren Weg?
Obwohl ich weiß, dass es viele Probleme mit Begrenzungsrahmen gibt und dass eine räumliche Überlagerung eines Polygons, das den interessierenden Bereich definiert, in der Regel vorzuziehen ist, funktionieren Begrenzungsrahmen in vielen Situationen einwandfrei und sind einfacher.
gIntersection
und hatteError in RGEOSBinTopoFunc(spgeom1, spgeom2, byid, id, "rgeos_intersection") : TopologyException: no outgoing dirEdge found at 3 2.5
heute keine Zeit zum Debuggen; schrieb eine schlampige Version und wird in Zukunft beheben.Antworten:
Ich habe zu diesem Zweck eine kleine Funktion erstellt, die von anderen mit guten Rezensionen verwendet wurde!
Dies sollte Ihr Problem lösen. Weitere Erklärungen finden Sie hier: http://robinlovelace.net/r/2014/07/29/clipping-with-r.html
Das erstellte Dummy-Polygon
b_poly
hat keine proj4-Zeichenfolge, was zu der Meldung " Warnung: spgeom1 und spgeom2 haben unterschiedliche proj4-Zeichenfolgen " führt. Dies ist jedoch harmlos.quelle
sp
,maptools
,rgdal
, undrgeos
geladen. Ich habeError in .class1(object) : could not find function "extent"
vielleicht ein Problem mit der R / Paket-Version.library(raster)
in meinem Tutorial: robinlovelace.net/r/2014/07/29/clipping-with-r.html Lassen Sie uns wissen, wie Sie vorankommen ! Prost.Hier ist eine schlampige Boundary-Version (ausreichend, um meine Bedürfnisse rechtzeitig für die Mini-Deadline von morgen zu erfüllen :-)):
Wenn Sie den Begrenzungsrahmen zum Projizieren benötigen, fügt die Version hier ein
interpolate
Argument hinzu, sodass der resultierende projizierte Rahmen gekrümmt ist.quelle