###########################################
##  Alisamento dados espaciais de ovitrampas
###########################################

############## FUNCAO KERNEL 3D (
#################################################
kern3d <- 
function(dado, x, y, bw, nx = 25, ny = 25, lims = c(range(x), range(y)),
kernfun = dnorm)
{
        bandwidth.nrd <- function(x)
        {
                r <- quantile(x, c(0.25, 0.75))
                h <- (r[2] - r[1])/1.34
                4 * 1.06 * min(sqrt(var(x)), h) * length(x)^(-1/5)
        }
        len.x <- length(x)
        if(length(y) != len.x)
                stop("Os vetores devem ser do mesmo comprimento\n")
        gx <- seq(lims[1], lims[2], length = nx)
        gy <- seq(lims[3], lims[4], length = ny)
        if(missing(bw))
                bw <- c(bandwidth.nrd(x), bandwidth.nrd(y))
        if(length(bw) == 1)
                bw <- c(bw[1], bw[1])
        
        matrizdado <- diag(dado,ncol=length(dado))
        ax <- outer(gx, x, "-")/bw[1]
        ay <- outer(gy, y, "-")/bw[2]
        z <- matrix(kernfun(ax), nx, len.x) %*% 
                matrizdado %*%
                t(matrix(kernfun(ay), ny, len.x))/(bw[1] * bw[2])
        return(list(x = gx, y = gy, z = z, bw = bw))
} 

#resp <- kern3d(valor,X,Y,bw=XXX)
#image(resp) 
