[R-sig-Geo] DEM interpolation with Delaunay triangulation
marcelino.delacruz at upm.es
marcelino.delacruz at upm.es
Thu Nov 24 14:27:48 CET 2011
Hi all,
Thanks to Rolf's suggestion I have incorporated the arguments x and y to
let the user select the precise set of points where to interpolate.
I have also corrected the formula (now is a inverse distance weighted
interpolation) and have incorporated also the "power parameter" p as
an argument.
Cheers,
MArcelino
tin <- function(X, nx, ny,x=NULL, y=NULL,p=1){
require(spatstat)
lltes<-delaunay(X)
if(is.null(x)){
gri <- gridcentres(X$window, nx=nx, ny=ny)
gri.ppp <- ppp(gri$x,gri$y, window=X$window,
marks=rep(0,length(gri$x)))
}
if(!is.null(x)){
gri.ppp<- ppp(x=x, y=y, window=X$window,
marks=rep(0, length(x)))
}
cat("\n","number of triangles =",
length(lltes[[3]]),"\n\n")
for(i in 1:length(lltes[[3]])){
progressreport(i, length(lltes[[3]]))
#grid points within the triangulation
xoyo <- unmark(gri.ppp[lltes[[3]][[i]]])
# original points defining the triangle
xyz <- X[lltes[[3]][[i]]]
# z values of the three points
z<-xyz$marks
#distance from grid points to vertices
cdis <- crossdist(xoyo,xyz)
# inverse distance weighted interpolation within triangle
grim <- apply(cdis, 1, function(f) sum((1/f^p)*z)/sum(1/f^p))
#assign interpolated values
gri.ppp[lltes[[3]][[i]]]$marks <- grim
}
return(gri.ppp)
}
>
># See how does it work:
>
>data(longleaf)
>plot(longleaf)
>
>cosa <- tin(longleaf, nx=100, ny=100)
>
>cosa2 <- tin(longleaf, x=1:100, y=1:100)
>plot(cosa)
>plot(cosa2)
>
>image(x=1:100,y=1:100, z=t(matrix(cosa$marks, 100,100, byrow=T)))
>
>
>
>Cheers, Marcelino
>
>
>>> On 21/11/11 04:30, gianni lavaredo wrote:
>>>> Dear Researchers,
>>>>
>>>> I am looking a package o method to interpolate a point data.frame (x,y,z)
>>>> with Delaunay triangulation (Trianguled interpoaltion network) and
>>>> create
>>>> a polygons data,frame o a raster. I know there are several fuction in
>>>> library RSAGA, spatstat (with "deldir"), library geometry.
More information about the R-sig-Geo
mailing list