Я пытался сделать растровое изображение из нерегулярно расположенных точек базы данных. Данные выглядят как
> 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
Я хочу, чтобы эти значения 'Z' в сетке, которую я создал
# 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))
Я также хочу, чтобы z-значения были назначены как «NA» для тех точек сетки, которые находятся вне точек данных. Точки на сетке выглядят так: https://drive.google.com/file/d/0B6GUNg-8d30vYzlwTkhvaHBFTnc/edit?usp=sharing, когда я строю график
plot(my_mesh)
points(s100_ras$Y, s100_ras$X, pch="*", col='blue')
Проблема в том, что я не уверен, как это сделать, следующие шаги не работают, потому что моя сетка сетки и точки данных имеют разный масштаб !!
library(rgdal)
library(raster)
xyz<-cbind(my_mesh, s100_ras)
r <- rasterFromXYZ(xyz)
image(r)
Если я пытаюсь создать растр, просто используя точки данных (без сетки), R выдает ошибку, поскольку мои данные расположены нерегулярно!
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
Более того, я пытался поиграть с функцией «растеризация» (для нерегулярных сеток) «растрового пакета», но не смог с этим справиться :(. Я знаю, как интерполировать и создавать регулярную сетку, но ради оригинальности, я хочу избежать интерполяции. Можно ли создать растр точек данных с нерегулярно расположенными точками без IDW или методов кригинга?
источник
SpatialPixelsDataFrame
с предложеннымtolerance
аргументом (0,916421 в вашем случае).Ответы:
Я предполагаю, что вы хотите, чтобы ваши данные нерегулярных точек на обычном растре. В этом случае растеризация должна работать, и примеры в растеризации показывают, как. Вот кое-что основанное на ваших данных
источник
Это сработало для меня - решение было использовать SpatialPixelsDataFrame с предложенным аргументом допуска (0,916421 в вашем случае):
однако из-за высокого значения допуска растр не очень хорошо подходит к исходным точкам. Может подойти гораздо лучше.
источник