Ich habe versucht, ein Rasterbild aus einer Datenbank mit unregelmäßigen Abständen zu erstellen. Die Daten sehen aus wie-
> head(s100_ras)
x y z
1 267573.9 2633781 213.29545
2 262224.4 2633781 69.78261
3 263742.7 2633781 51.21951
4 259328.4 2633781 301.98413
5 264109.8 2633781 141.72414
6 255094.8 2633781 88.90244
Ich möchte diese 'z'-Werte in einem von mir erstellten Netz haben
# Create a fine mesh grid
my_mesh=expand.grid(seq(min(s100_ras$Y),max(s100_ras$Y),l=100),
seq(min(s100_ras$X),max(s100_ras$X),l=100))
Ich möchte auch, dass die Z-Werte für die Netzpunkte, die sich außerhalb der Datenpunkte befinden, als "NA" zugewiesen werden. Die Punkte über dem Netz sehen folgendermaßen aus: https://drive.google.com/file/d/0B6GUNg-8d30vYzlwTkhvaHBFTnc/edit?usp=sharing, wenn ich plotte
plot(my_mesh)
points(s100_ras$Y, s100_ras$X, pch="*", col='blue')
Das Problem ist, dass ich nicht sicher bin, wie ich darauf aufbauen soll. Die folgenden Schritte funktionieren nicht, weil mein Gitter und meine Datenpunkte nicht den gleichen Maßstab haben.
library(rgdal)
library(raster)
xyz<-cbind(my_mesh, s100_ras)
r <- rasterFromXYZ(xyz)
image(r)
Wenn ich versuche, ein Raster nur mithilfe der Datenpunkte (ohne Gitter) zu erstellen, gibt R einen Fehler aus, da meine Daten einen unregelmäßigen Abstand aufweisen!
library(sp)
s100_ras <- data.frame(expand.grid(x = s100_ras$Y, y = s100_ras$X),
z = as.vector(s100_ras$mean))
coordinates(s100_ras) <- ~x+y
proj4string(s100_ras) <- CRS("+proj=utm +zone=46 +datum=WGS84")
gridded(s100_ras) = TRUE
suggested tolerance minimum: 0.916421
Error in points2grid(points, tolerance, round) :
dimension 1 : coordinate intervals are not constant
Außerdem habe ich versucht, mit der 'Rasterize'-Funktion (für unregelmäßige Raster) des' Raster Package 'zu spielen, konnte mich aber nicht damit abfinden :(. Ich weiß, wie man interpoliert und ein reguläres Raster erstellt, aber aus Gründen Originalität möchte ich vermeiden, Interpolation. Ist es möglich, ein Raster von unregelmäßig beabstandeten Datenpunkten ohne IDW- oder Kriging-Methoden zu erstellen?
quelle
SpatialPixelsDataFrame
mit dem vorgeschlagenentolerance
Argument (0,916421 in Ihrem Fall) zu verwenden.Antworten:
Ich gehe davon aus, dass Sie Ihre unregelmäßigen Punktdaten in einem regulären Raster haben möchten. In diesem Fall sollte das Rastern funktionieren, und die Beispiele in? Rasterize zeigen, wie. Hier ist etwas basierend auf Ihren Daten
quelle
Das hat bei mir funktioniert - die Lösung war die Verwendung von SpatialPixelsDataFrame mit dem vorgeschlagenen Toleranzargument (in Ihrem Fall 0,916421):
Aufgrund des hohen Toleranzwerts passt das Raster jedoch nicht sehr gut zu den ursprünglichen Punkten. Könnte viel besser passen.
quelle