when copying data from a GDAL dataset
- #2198, Fix incorrect dimensions used when generating bands of out-db
rasters in ST_Tile()
+ - #2203, Changed how rasters with unknown SRID and default geotransform
+ are handled when passing to GDAL Warp API
PostGIS 2.0.3
2013/MM/DD
double *skew_x, double *skew_y,
GDALResampleAlg resample_alg, double max_err
) {
- // keep these
CPLErr cplerr;
char *dst_options[] = {"SUBCLASS=VRTWarpedDataset", NULL};
_rti_warp_arg arg = NULL;
int i = 0;
int numBands = 0;
+ int subgt = 0;
+
RASTER_DEBUG(3, "starting");
assert(NULL != raster);
}
RASTER_DEBUG(3, "raster loaded into GDAL MEM dataset");
+ /* special case when src_srs and dst_srs is NULL and raster's geotransform matrix is default */
+ if (src_srs == NULL && dst_srs == NULL && rt_raster_get_srid(raster) == SRID_UNKNOWN) {
+ double gt[6];
+
+ /* default geotransform */
+ rt_raster_get_geotransform_matrix(raster, gt);
+ if (
+ FLT_EQ(gt[0], 0) &&
+ FLT_EQ(gt[1], 1) &&
+ FLT_EQ(gt[2], 0) &&
+ FLT_EQ(gt[3], 0) &&
+ FLT_EQ(gt[4], 0) &&
+ FLT_EQ(gt[5], -1)
+ ) {
+ double ngt[6] = {0, 10, 0, 0, 0, -10};
+ GDALSetGeoTransform(arg->src.ds, ngt);
+ subgt = 1;
+ }
+ }
+
/* set transform options */
if (arg->src.srs != NULL || arg->dst.srs != NULL) {
arg->transform.option.len = 2;
return NULL;
}
+ /* substitute geotransform matrix, reset back to default */
+ if (subgt) {
+ double gt[6] = {0, 1, 0, 0, 0, -1};
+ rt_raster_set_geotransform_matrix(rast, gt);
+ }
+
RASTER_DEBUG(3, "done");
return rast;
}
/* target SRID == src SRID, no reprojection */
else if (dst_srid == src_srid) {
- /* set geotransform BUT ONLY when geotransform IS the default */
- if (src_srid == SRID_UNKNOWN) {
- double gt[6];
-
- rt_raster_get_geotransform_matrix(raster, gt);
- if (
- FLT_EQ(gt[0], 0) &&
- FLT_EQ(gt[1], 1) &&
- FLT_EQ(gt[2], 0) &&
- FLT_EQ(gt[3], 0) &&
- FLT_EQ(gt[4], 0) &&
- FLT_EQ(gt[5], -1)
- ) {
- double ngt[6] = {0, 10, 0, 0, 0, -10};
- rt_raster_set_geotransform_matrix(raster, ngt);
- }
- }
-
no_srid = 1;
}
/* add target SRID */
rt_raster_set_srid(rast, dst_srid);
- if (no_srid && src_srid == SRID_UNKNOWN) {
- double gt[6] = {0, 1, 0, 0, 0, -1};
- rt_raster_set_geotransform_matrix(rast, gt);
- }
-
pgrast = rt_raster_serialize(rast);
rt_raster_destroy(rast);
) FROM raster_gdalwarp_src)
), (
0.25, (SELECT _st_gdalwarp(
- ST_SetSRID(rast, 0),
+ ST_SetGeoReference(ST_SetSRID(rast, 0), '1 0 0 -1 0 0'),
'NearestNeighbor', 0.125,
NULL,
NULL, NULL,
) FROM raster_gdalwarp_src)
), (
0.26, (SELECT _st_gdalwarp(
- ST_SetSRID(rast, 0),
+ ST_SetGeoReference(ST_SetSRID(rast, 0), '1 0 0 -1 0 0'),
'NearestNeighbor', 0.125,
NULL,
NULL, NULL,
) FROM raster_gdalwarp_src)
), (
0.27, (SELECT _st_gdalwarp(
- ST_SetSRID(rast, 0),
+ ST_SetGeoReference(ST_SetSRID(rast, 0), '1 0 0 -1 0 0'),
'NearestNeighbor', 0.125,
NULL,
NULL, NULL,