Durch den Versuch, ein Schnittpunktergebnis von einem einzigen Punkt und einem einzigen Polygon zu erhalten habe ich was ich glaube, kann nur ein Fehler im R-Raster sein Paketschnittfunktion.Sehr wahrscheinlich Fehler in der R-Paket-Schnittpunkt-Funktion beim Schneiden von 1 Polygon mit 1 Punkt
Ich habe 1 Polygon und 1 Punkt, und verwenden Sie schneiden sich wie folgt zusammen:
intersect(a_point, a_polygon)
Wo a_point
ein id-Attribut enthält. Dies schlägt mit dem Fehler:
Error in j[, 2] : incorrect number of dimensions
Allerdings, wenn ich die Argumente umkehren und zu tun:
intersect(a_polygon, a_point)
Es funktioniert gut, aber die ID von dem Punkt Shape-Datei als Teil der nicht zurück Ergebnis, das ich benötige. Das ist erwartetes Verhalten, so gut, aber ich brauche es anders herum zu arbeiten.
Um auszuschließen, dass meine Polygon- oder Punktdaten eine Besonderheit aufweisen, habe ich ein einzelnes Polygon- und Einzelpunkt-Geo-Objekt erstellt und dieselbe Hypothese getestet, und mit diesen "rohen" Objekten ist das gleiche Ergebnis wie oben aufgetreten.
Im Folgenden ist der Code für diese beiden ‚fake‘ Objekte auf Vollständigkeit zu erzeugen und so, dass sie wiedergegeben werden können:
test_list_x = list(530124, 530125) #For when I use 2 points
test_list_y = list(176949, 176950) #For when I use 2 points
data_frame_object = data.frame(530124, 176950)
names(data_frame_object) = c("Longitude", "Latitude")
coordinates(data_frame_object)=~Longitude+Latitude
proj4string(data_frame_object)=CRS("+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +datum=OSGB36 +units=m +no_defs +ellps=airy +towgs84=446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894")
fake_point_shape_object=SpatialPointsDataFrame(data_frame_object, data.frame(id=1:length(data_frame_object)))
coords = matrix( nrow=5, ncol=2)
coords[1,1] = 530106.8
coords[1,2] = 176953.3
coords[2,1] = 530127.5
coords[2,2] = 176953.3
coords[3,1] = 530127.5
coords[3,2] = 176933.3
coords[4,1] = 530106.8
coords[4,2] = 176933.3
coords[5,1] = 530106.8
coords[5,2] = 176953.3
my_fake_polygon = Polygon(coords)
polygon_list = list(my_fake_polygon)
polygon_set <- lapply(seq_along(polygon_list), function(i) Polygons(list(polygon_list[[i]]), i ))
new_polygons <- SpatialPolygons(polygon_set)
[email protected] = CRS("+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +datum=OSGB36 +units=m +no_defs +ellps=airy +towgs84=446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894")
df <- data.frame("1")
names(df) = "id"
my_fake_polygon <- SpatialPolygonsDataFrame(new_polygons,df)
Jetzt hier ist die Sache, wenn ich 2 Punkte erstellen nebeneinander (so sie sind beide innerhalb des Polygons) anstatt nur eines, es funktioniert gut, kein Fehler. Es wird vorgeschlagen, dass es einen Fehler gibt, der mit der Schnittmenge zwischen 1 Punkt und 1 Polygon verbunden ist, WENN der Punkt ein Attribut enthält, das im Schnittpunktprozess zurückgegeben werden soll.
Sie könnten fragen, warum Sie das Attribut tatsächlich zurückgeben müssen, wenn es nur einen Punkt gibt, weil es sich um einen iterativen Prozess handelt, bei dem es sich möglicherweise nicht um einen einzigen Punkt handelt, sondern um keinen oder viele.
Ich würde jemanden schätzen, der diesen Fehler erklärt oder meine Entdeckungen bestätigt.
Vielen Dank, ich habe tatsächlich eine Arbeit für den Fehler entwickelt, es ist ziemlich unangenehm, dass es den Fehler fängt, wenn es passiert, und definiert den Punkt-Index, der von der Schnittpunkt-Funktion manuell kommen sollte. Ich bin sicher, dass jemand Ihren Kommentar nützlich finden wird! –