[R-sig-Geo] DEM interpolation with Delaunay triangulation

marcelino.delacruz at upm.es marcelino.delacruz at upm.es
Wed Nov 23 14:19:44 CET 2011


Well, I think that this function (all with spatstat tools) could do the
job.

I included a weigthed linear interpolation but this could be easily
modified to fit other models.

It only takes as arguments a marked point pattern (xyz) and the number of
points in x and y dimensions to build the "arbitrary" x0 y0 points


tin <- function(X, nx, ny){
      require(spatstat)
      lltes<-delaunay(X)
      gri <-  gridcentres(X$window, nx=nx, ny=ny)
      gri.ppp <- ppp(gri$x,gri$y, window=X$window,
                           marks=rep(1,length(gri$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)

	      # weighted linear interpolation within triangle
	      grim <- apply(cdis, 1, function(f) sum(f*z)/sum(f))

	     #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)

plot(cosa)

image(x=1:100,y=1:100, z=t(matrix(cosa$marks, 100,100, byrow=T)))



Cheers, Marcelino



Con fecha 23/11/2011, "Edzer Pebesma" <edzer.pebesma at uni-muenster.de>
escribió:

>
>
>On 11/20/2011 11:02 PM, Rolf Turner wrote:
>> 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.
>> 
>> I have no idea what you're on about.  If you could make your question
>> clearer and more specific I might be able to make some suggestions
>> as to how you could use spatstat/deldir.
>> 
>> An explicit simple (toy) example might help.
>
>I have wondered this myself too -- the issue is the so-called TIN,
>triangular interpolation network. Say, we have (field) observations
>(x,y,z), we form a delanay triangulation on all (x,y) pairs, and we want
>to obtain the prediction of z for an arbitrary (x0,y0) pair, based on
>the linear trend surface fit through the three (x1,y1), (x2,y2), (x3,y3)
>points that form the triangle in which (x0,y0) falls.
>
>You could do, of course, a linear trend surface using three nearest
>neighbours, e.g. by
>
>require(gstat)
>loadMeuse()
>x = krige(log(zinc)~x+y, meuse, meuse.grid, nmax=3)
>spplot(x[1],col.regions=bpy.colors(),
>	sp.layout=list("sp.points", meuse))
>
>
>but that takes the three nearest observations, which don't need to be
>the three points in the triangle (and often, they are not, because
>meuse.grid contains points outside the convex hull of the meuse
>observation locations).
>
>> 
>>     cheers,
>> 
>>         Rolf Turner
>> 
>> _______________________________________________
>> R-sig-Geo mailing list
>> R-sig-Geo at r-project.org
>> https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>
>-- 
>Edzer Pebesma
>Institute for Geoinformatics (ifgi), University of Münster
>Weseler Straße 253, 48151 Münster, Germany. Phone: +49 251
>8333081, Fax: +49 251 8339763  http://ifgi.uni-muenster.de
>http://www.52north.org/geostatistics      e.pebesma at wwu.de
>
>_______________________________________________
>R-sig-Geo mailing list
>R-sig-Geo at r-project.org
>https://stat.ethz.ch/mailman/listinfo/r-sig-geo



More information about the R-sig-Geo mailing list