rcoords.c
来自「支持各种栅格图像和矢量图像读取的库」· C语言 代码 · 共 105 行
C
105 行
/* * rcoords.c */#include "csf.h"#include "csfimpl.h"/* compute true world co-ordinate of a pixel * RrowCol2Coords computes the true world co-ordinate from a * row, column index. * The row, column co-ordinate * don't have to be on the map. They are just relative to upper left position. * For example (row,col) = (-1,0) computes the (x,y) co-ordinate of * the pixel that is right above upper left pixel. * * returns * 0 if the co-ordinate is outside the map. * 1 if inside. * -1 in case of an error. * * Merrno * ILL_CELLSIZE */int RgetCoords( const MAP *m, /* map handle */ int inCellPos, /* nonzero if you want the co-ordinate * at the centre of the cell, 0 if you * want the upper left co-ordinate of the cell */ size_t row, /* Row number (relates to y position). */ size_t col, /* Column number (relates to x position). */ double *x, /* write-only. Returns x of true co-ordinate */ double *y) /* write-only. Returns y of true co-ordinate */{ return RrowCol2Coords(m, (double)row+(inCellPos ? 0.5 : 0.0), (double)col+(inCellPos ? 0.5 : 0.0), x,y);}/* compute true world co-ordinate from row, column index * RrowCol2Coords computes the true world co-ordinate from a * row, column index. The row,column co-ordinate can be fractions. * For example (row,col) = (0.5,0.5) computes the (x,y) co-ordinate of * the centre of the upper left pixel. Secondly, the row and column co-ordinate * don't have to be on the map. They are just relative to upper left position. * For example (row,col) = (-0.5,0.5) computes the (x,y) co-ordinate of * the centre of the pixel that is right above upper left pixel. */void RasterRowCol2Coords( const CSF_RASTER_LOCATION_ATTRIBUTES *m, /* raster handle */ double row, /* Row number (relates to y position). */ double col, /* Column number (relates to x position). */ double *x, /* write-only. x co-ordinate */ double *y) /* write-only. y co-ordinate */{ double cs = m->cellSize; double c = m->angleCos; double s = m->angleSin; double yRow = cs * row; double xCol = cs * col; double xCol_t = xCol * c - yRow * s; double yRow_t = xCol * s + yRow * c; *x = m->xUL + xCol_t; if (m->projection == PT_YINCT2B) *y = m->yUL + yRow_t; else /* all other projections */ *y = m->yUL - yRow_t;}/* compute true world co-ordinate from row, column index * RasterRowCol2Coords computes the true world co-ordinate from a * row, column index. The row,column co-ordinate can be fractions. * For example (row,col) = (0.5,0.5) computes the (x,y) co-ordinate of * the centre of the upper left pixel. Secondly, the row and column co-ordinate * don't have to be on the map. They are just relative to upper left position. * For example (row,col) = (-0.5,0.5) computes the (x,y) co-ordinate of * the centre of the pixel that is right above upper left pixel. * * returns * 0 if the co-ordinate is outside the map. * 1 if inside. * -1 in case of an error. * * Merrno * ILL_CELLSIZE */int RrowCol2Coords(const MAP *m, /* map handle */ double row, /* Row number (relates to y position). */ double col, /* Column number (relates to x position). */ double *x, /* write-only. x co-ordinate */ double *y) /* write-only. y co-ordinate */{ if (m->raster.cellSize <= 0 || m->raster.cellSize != m->raster.cellSizeDupl ) { M_ERROR(ILL_CELLSIZE); goto error; } RasterRowCol2Coords(&(m->raster),row,col,x,y); return( (m->raster.nrRows > row) && (m->raster.nrCols > col) && (row >= 0) && (col >= 0));error: return(-1);}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?