File: nearest.c

package info (click to toggle)
grass 8.4.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 277,040 kB
  • sloc: ansic: 460,798; python: 227,732; cpp: 42,026; sh: 11,262; makefile: 7,007; xml: 3,637; sql: 968; lex: 520; javascript: 484; yacc: 450; asm: 387; perl: 157; sed: 25; objc: 6; ruby: 4
file content (40 lines) | stat: -rw-r--r-- 1,307 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/*
 *      nearest.c - returns the nearest neighbor to a given
 *                  x,y position
 */

#include <math.h>
#include "global.h"

void p_nearest(struct cache *ibuffer,   /* input buffer                  */
               void *obufptr,           /* ptr in output buffer          */
               int cell_type,           /* raster map type of obufptr    */
               double *row_idx,         /* row index in input matrix     */
               double *col_idx,         /* column index in input matrix  */
               struct Cell_head *cellhd /* cell header of input layer    */
)
{
    int row, col; /* row/col of nearest neighbor   */
    DCELL *cellp;

    /* cut indices to integer and get nearest cell */
    /* the row_idx, col_idx correction for bilinear/bicubic does not apply here
     */
    row = (int)floor(*row_idx);
    col = (int)floor(*col_idx);

    /* check for out of bounds - if out of bounds set NULL value     */
    if (row < 0 || row >= cellhd->rows || col < 0 || col >= cellhd->cols) {
        Rast_set_null_value(obufptr, 1, cell_type);
        return;
    }

    cellp = CPTR(ibuffer, row, col);

    if (Rast_is_d_null_value(cellp)) {
        Rast_set_null_value(obufptr, 1, cell_type);
        return;
    }

    Rast_set_d_value(obufptr, *cellp, cell_type);
}