27 #include "../common/STLUtils.h"
28 #include "../geometry/Coord2D.h"
29 #include "../geometry/Envelope.h"
30 #include "../srs/Converter.h"
58 te::rst::Raster*
te::rst::Reproject(
te::rst::Raster const *
const rin,
int srid,
double llx,
double lly,
double urx,
double ury,
double resx,
double resy,
const std::map<std::string, std::string>& routinfo,
int m)
71 throw te::rst::Exception(
"Input/Output SRID not recognized.");
85 ncols =
static_cast<unsigned int>((urx-llx)/rin->
getResolutionX())+1;
86 nrows =
static_cast<unsigned int>((ury-lly)/rin->
getResolutionY())+1;
92 if (resx == 0 || resy == 0)
100 ncols =
static_cast<unsigned int>(env->
getWidth() / resx) + 1;
101 nrows =
static_cast<unsigned int>(env->
getHeight() / resy) + 1;
107 std::vector<te::rst::BandProperty*> bands;
138 int x1 = (int) (pxoll.
x-0.5);
139 int y1 = (int) (pxoll.
y+0.5);
142 int x2 = (int)(pxour.
x+0.5);
143 int y2 = (int)(pxour.
y-0.5);
170 pob((polr.
x-poll.
x)/2.+poll.
x, poll.
y),
171 pol(poll.
x, (poul.
y-poll.
y)/2.+poll.
y),
172 por(polr.
x, (pour.
y-polr.
y)/2.+polr.
y);
224 double dxl((pxill.
x-pxiul.
x)/(y2-y1));
225 double dyl((pxill.
y-pxiul.
y)/(y2-y1));
226 double dxr((pxilr.
x-pxiur.
x)/(y2-y1));
227 double dyr((pxilr.
y-pxiur.
y)/(y2-y1));
230 double xl = pxiul.
x-1;
231 double yl = pxiul.
y-1;
234 double xr = pxiur.
x+1;
235 double yr = pxiur.
y+1;
238 double dx = (xr-xl)/(x2-x1);
239 double dy = (yr-yl)/(x2-x1);
248 std::complex<double> value;
249 for (j = y1; j <= y2; ++j)
251 for (i = x1; i <= x2; ++i)
259 interpolator->
getValue(x, y, value, b);
275 dx = (xr-xl)/(x2-x1);
276 dy = (yr-yl)/(x2-x1);
284 int px = (int)(p.
x/tol);
285 int py = (int)(p.
y/tol);
287 int qx = (int)(q.
x/tol);
288 int qy = (int)(q.
y/tol);
290 int tx = (int)(t.
x/tol);
291 int ty = (int)(t.
y/tol);
296 if (dx <= 2 && dy <= 2)
299 int q1 = (qy-py)*(tx-px);
300 int q2 = (ty-py)*(qx-px);
304 if (q1 == 0 && q2 == 0 && q3 == 0 && q4 == 0)
307 if (abs(q1 - q2) > (std::max(abs(q3), abs(q4))))
bool isPointInGrid(unsigned int col, unsigned int row) const
virtual void setValue(unsigned int c, unsigned int r, const double value, std::size_t b=0)
Sets the attribute value in a band of a cell.
te::gm::Envelope * getExtent()
Returns the geographic extension of the raster data.
bool IsPointOnLine(te::gm::Coord2D &p, te::gm::Coord2D &q, te::gm::Coord2D &t, double tol)
Near neighborhood interpolation method.
It describes one band (or dimension) of a raster.
It contains the algorithm to reproject raster data.
A raster band description.
unsigned int getNumberOfColumns() const
Returns the raster number of columns.
virtual const Band * getBand(std::size_t i) const =0
Returns the raster i-th band.
It interpolates one pixel based on a selected algorithm. Methods currently available are Nearest Neig...
bool invert(double *xIn, double *yIn, double *xOut, double *yOut, long numCoord, int coordOffset=1) const
Inverts a vector of coordinates from target SRS to dource SRS.
double getWidth() const
It returns the envelope width.
An utility struct for representing 2D coordinates.
void getValue(const double &c, const double &r, std::complex< double > &v, const std::size_t &b)
Get the interpolated value at specific band.
void geoToGrid(const double &x, const double &y, double &col, double &row) const
Get the grid point associated to a spatial location.
void setSourceSRID(int sourceSRID)
Sets the source SRS identifier.
An exception class for the Raster module.
An abstract class for raster data strucutures.
An Envelope defines a 2D rectangular region.
An abstract class for raster data strucutures.
unsigned int getNumberOfRows() const
Returns the raster number of rows.
BandProperty * getProperty()
Returns the band property.
virtual std::size_t getNumberOfBands() const =0
Returns the number of bands (dimension of cells attribute values) in the raster.
double getResolutionX() const
Returns the raster horizontal (x-axis) resolution.
bool InterpolateIn(te::rst::Raster const *const rin, te::rst::Raster *rout, te::gm::Envelope *box, te::srs::Converter *conv, int m=te::rst::NearestNeighbor)
void setTargetSRID(int targetSRID)
Sets the target SRS identifier.
It gives access to values in one band (dimension) of a raster.
Grid * getGrid()
It returns the raster grid.
A Converter is responsible for the conversion of coordinates between different Coordinate Systems (CS...
int getSRID() const
Returns the raster spatial reference system identifier.
TERASTEREXPORT te::rst::Raster * Reproject(te::rst::Raster const *const rin, int srid, const std::map< std::string, std::string > &routinfo, int m=te::rst::NearestNeighbor)
Reprojects a raster to another SRS.
static Raster * make()
It creates and returns an empty raster with default raster driver.
void gridToGeo(const double &col, const double &row, double &x, double &y) const
Get the spatial location of a grid point.
A rectified grid is the spatial support for raster data.
double getResolutionY() const
Returns the raster vertical (y-axis) resolution.
Coord2D getUpperRight() const
It returns the upper right coordinate of the envelope.
This is the abstract factory for Rasters.
A rectified grid is the spatial support for raster data.
Coord2D getLowerLeft() const
It returns the lower left coordinate of the envelope.
double getHeight() const
It returns the envelope height.
bool isValid() const
It tells if the rectangle is valid or not.
It interpolates one pixel based on a selected algorithm.