1----------------------------------------------------------------------- 2-- 3-- Copyright (c) 2009-2010 Mateusz Loskot <mateusz@loskot.net>, David Zwarg <dzwarg@azavea.com> 4-- 5-- This program is free software; you can redistribute it and/or 6-- modify it under the terms of the GNU General Public License 7-- as published by the Free Software Foundation; either version 2 8-- of the License, or (at your option) any later version. 9-- 10-- This program is distributed in the hope that it will be useful, 11-- but WITHOUT ANY WARRANTY; without even the implied warranty of 12-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13-- GNU General Public License for more details. 14-- 15-- You should have received a copy of the GNU General Public License 16-- along with this program; if not, write to the Free Software Foundation, 17-- Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 18----------------------------------------------------------------------- 19 20CREATE TABLE rt_properties_test ( 21 id numeric, 22 name text, 23 srid integer, 24 width integer, 25 height integer, 26 scalex double precision, 27 scaley double precision, 28 ipx double precision, 29 ipy double precision, 30 skewx double precision, 31 skewy double precision, 32 rast raster 33); 34 35INSERT INTO rt_properties_test 36VALUES ( 0, '10x20, ip:0.5,0.5 scale:2,3 skew:0,0 srid:10 width:10 height:20', 37 10, 10, 20, --- SRID, width, height 38 2, 3, 0.5, 0.5, 0, 0, --- georeference 39( 40'01' -- little endian (uint8 ndr) 41|| 42'0000' -- version (uint16 0) 43|| 44'0000' -- nBands (uint16 0) 45|| 46'0000000000000040' -- scaleX (float64 2) 47|| 48'0000000000000840' -- scaleY (float64 3) 49|| 50'000000000000E03F' -- ipX (float64 0.5) 51|| 52'000000000000E03F' -- ipY (float64 0.5) 53|| 54'0000000000000000' -- skewX (float64 0) 55|| 56'0000000000000000' -- skewY (float64 0) 57|| 58'0A000000' -- SRID (int32 10) 59|| 60'0A00' -- width (uint16 10) 61|| 62'1400' -- height (uint16 20) 63)::raster 64); 65 66INSERT INTO rt_properties_test 67VALUES ( 1, '1x1, ip:2.5,2.5 scale:5,5 skew:0,0, srid:12, width:1, height:1', 68 12, 1, 1, --- SRID, width, height 69 5, 5, 2.5, 2.5, 0, 0, --- georeference 70( 71'01' -- little endian (uint8 ndr) 72|| 73'0000' -- version (uint16 0) 74|| 75'0000' -- nBands (uint16 0) 76|| 77'0000000000001440' -- scaleX (float64 5) 78|| 79'0000000000001440' -- scaleY (float64 5) 80|| 81'0000000000000440' -- ipX (float64 2.5) 82|| 83'0000000000000440' -- ipY (float64 2.5) 84|| 85'0000000000000000' -- skewX (float64 0) 86|| 87'0000000000000000' -- skewY (float64 0) 88|| 89'0C000000' -- SRID (int32 12) 90|| 91'0100' -- width (uint16 1) 92|| 93'0100' -- height (uint16 1) 94)::raster 95); 96 97INSERT INTO rt_properties_test 98VALUES ( 2, '1x1, ip:7.5,2.5 scale:5,5 skew:0,0, srid:0, width:1, height:1', 99 0, 1, 1, --- SRID, width, height 100 5, 5, 7.5, 2.5, 0, 0, --- georeference 101( 102'01' -- little endian (uint8 ndr) 103|| 104'0000' -- version (uint16 0) 105|| 106'0000' -- nBands (uint16 0) 107|| 108'0000000000001440' -- scaleX (float64 5) 109|| 110'0000000000001440' -- scaleY (float64 5) 111|| 112'0000000000001E40' -- ipX (float64 7.5) 113|| 114'0000000000000440' -- ipY (float64 2.5) 115|| 116'0000000000000000' -- skewX (float64 0) 117|| 118'0000000000000000' -- skewY (float64 0) 119|| 120'00000000' -- SRID (int32 0) 121|| 122'0100' -- width (uint16 1) 123|| 124'0100' -- height (uint16 1) 125)::raster 126); 127 128INSERT INTO rt_properties_test 129VALUES ( 3, '1x1, ip:7.5,2.5 scale:5,5 skew:0,0, srid:-1, width:1, height:1', 130 0, 1, 1, --- SRID, width, height 131 5, 5, 7.5, 2.5, 0, 0, --- georeference 132( 133'01' -- little endian (uint8 ndr) 134|| 135'0000' -- version (uint16 0) 136|| 137'0000' -- nBands (uint16 0) 138|| 139'0000000000001440' -- scaleX (float64 5) 140|| 141'0000000000001440' -- scaleY (float64 5) 142|| 143'0000000000001E40' -- ipX (float64 7.5) 144|| 145'0000000000000440' -- ipY (float64 2.5) 146|| 147'0000000000000000' -- skewX (float64 0) 148|| 149'0000000000000000' -- skewY (float64 0) 150|| 151'00000000' -- SRID (int32 0) 152|| 153'0100' -- width (uint16 1) 154|| 155'0100' -- height (uint16 1) 156)::raster 157); 158 159INSERT INTO rt_properties_test 160VALUES ( 4, '1x1, ip:7.5,2.5 scale:5,5 skew:1,1, srid:-1, width:1, height:1', 161 0, 1, 1, --- SRID, width, height 162 5, 5, 7.5, 2.5, 1, 1, --- georeference 163( 164'01' -- little endian (uint8 ndr) 165|| 166'0000' -- version (uint16 0) 167|| 168'0000' -- nBands (uint16 0) 169|| 170'0000000000001440' -- scaleX (float64 5) 171|| 172'0000000000001440' -- scaleY (float64 5) 173|| 174'0000000000001E40' -- ipX (float64 7.5) 175|| 176'0000000000000440' -- ipY (float64 2.5) 177|| 178'000000000000F03F' -- skewX (float64 1) 179|| 180'000000000000F03F' -- skewY (float64 1) 181|| 182'00000000' -- SRID (int32 0) 183|| 184'0100' -- width (uint16 1) 185|| 186'0100' -- height (uint16 1) 187)::raster 188); 189 190INSERT INTO rt_properties_test 191VALUES ( 5, '1x1, ip:7.5,2.5 scale:5,5 skew:3,7, srid:-1, width:1, height:1', 192 0, 1, 1, --- SRID, width, height 193 5, 5, 7.5, 2.5, 3, 7, --- georeference 194( 195'01' -- little endian (uint8 ndr) 196|| 197'0000' -- version (uint16 0) 198|| 199'0000' -- nBands (uint16 0) 200|| 201'0000000000001440' -- scaleX (float64 5) 202|| 203'0000000000001440' -- scaleY (float64 5) 204|| 205'0000000000001E40' -- ipX (float64 7.5) 206|| 207'0000000000000440' -- ipY (float64 2.5) 208|| 209'0000000000000840' -- skewX (float64 3) 210|| 211'0000000000001C40' -- skewY (float64 7) 212|| 213'00000000' -- SRID (int32 0) 214|| 215'0100' -- width (uint16 1) 216|| 217'0100' -- height (uint16 1) 218)::raster 219); 220 221----------------------------------------------------------------------- 222-- st_georeference (default) 223----------------------------------------------------------------------- 224 225SELECT 226 replace(st_georeference(rast)::text, E'\n', E'EOL'), 227 replace(st_georeference(rast)::text, E'\n', E'EOL') = 228 '2.0000000000EOL0.0000000000EOL0.0000000000EOL3.0000000000EOL0.5000000000EOL0.5000000000EOL' 229FROM rt_properties_test 230WHERE id = 0; 231 232SELECT 233 replace(st_georeference(rast)::text, E'\n', E'EOL'), 234 replace(st_georeference(rast)::text, E'\n', E'EOL') = 235 '5.0000000000EOL0.0000000000EOL0.0000000000EOL5.0000000000EOL2.5000000000EOL2.5000000000EOL' 236FROM rt_properties_test 237WHERE id = 1; 238 239SELECT 240 replace(st_georeference(rast)::text, E'\n', E'EOL'), 241 replace(st_georeference(rast)::text, E'\n', E'EOL') = 242 '5.0000000000EOL0.0000000000EOL0.0000000000EOL5.0000000000EOL7.5000000000EOL2.5000000000EOL' 243FROM rt_properties_test 244WHERE id = 2; 245 246SELECT 247 replace(st_georeference(rast)::text, E'\n', E'EOL'), 248 replace(st_georeference(rast)::text, E'\n', E'EOL') = 249 '5.0000000000EOL0.0000000000EOL0.0000000000EOL5.0000000000EOL7.5000000000EOL2.5000000000EOL' 250FROM rt_properties_test 251WHERE id = 3; 252 253SELECT 254 replace(st_georeference(rast)::text, E'\n', E'EOL'), 255 replace(st_georeference(rast)::text, E'\n', E'EOL') = 256 '5.0000000000EOL1.0000000000EOL1.0000000000EOL5.0000000000EOL7.5000000000EOL2.5000000000EOL' 257FROM rt_properties_test 258WHERE id = 4; 259 260SELECT 261 replace(st_georeference(rast)::text, E'\n', E'EOL'), 262 replace(st_georeference(rast)::text, E'\n', E'EOL') = 263 '5.0000000000EOL7.0000000000EOL3.0000000000EOL5.0000000000EOL7.5000000000EOL2.5000000000EOL' 264FROM rt_properties_test 265WHERE id = 5; 266 267----------------------------------------------------------------------- 268-- st_georeference (GDAL) 269----------------------------------------------------------------------- 270 271SELECT 272 replace(st_georeference(rast,'GDAL')::text, E'\n', E'EOL'), 273 replace(st_georeference(rast,'GDAL')::text, E'\n', E'EOL') = 274 '2.0000000000EOL0.0000000000EOL0.0000000000EOL3.0000000000EOL0.5000000000EOL0.5000000000EOL' 275FROM rt_properties_test 276WHERE id = 0; 277 278SELECT 279 replace(st_georeference(rast,'GDAL')::text, E'\n', E'EOL'), 280 replace(st_georeference(rast,'GDAL')::text, E'\n', E'EOL') = 281 '5.0000000000EOL0.0000000000EOL0.0000000000EOL5.0000000000EOL2.5000000000EOL2.5000000000EOL' 282FROM rt_properties_test 283WHERE id = 1; 284 285SELECT 286 replace(st_georeference(rast,'GDAL')::text, E'\n', E'EOL'), 287 replace(st_georeference(rast,'GDAL')::text, E'\n', E'EOL') = 288 '5.0000000000EOL0.0000000000EOL0.0000000000EOL5.0000000000EOL7.5000000000EOL2.5000000000EOL' 289FROM rt_properties_test 290WHERE id = 2; 291 292SELECT 293 replace(st_georeference(rast,'GDAL')::text, E'\n', E'EOL'), 294 replace(st_georeference(rast,'GDAL')::text, E'\n', E'EOL') = 295 '5.0000000000EOL0.0000000000EOL0.0000000000EOL5.0000000000EOL7.5000000000EOL2.5000000000EOL' 296FROM rt_properties_test 297WHERE id = 3; 298 299SELECT 300 replace(st_georeference(rast,'GDAL')::text, E'\n', E'EOL'), 301 replace(st_georeference(rast,'GDAL')::text, E'\n', E'EOL') = 302 '5.0000000000EOL1.0000000000EOL1.0000000000EOL5.0000000000EOL7.5000000000EOL2.5000000000EOL' 303FROM rt_properties_test 304WHERE id = 4; 305 306SELECT 307 replace(st_georeference(rast,'GDAL')::text, E'\n', E'EOL'), 308 replace(st_georeference(rast,'GDAL')::text, E'\n', E'EOL') = 309 '5.0000000000EOL7.0000000000EOL3.0000000000EOL5.0000000000EOL7.5000000000EOL2.5000000000EOL' 310FROM rt_properties_test 311WHERE id = 5; 312 313----------------------------------------------------------------------- 314-- st_georeference (ESRI) 315----------------------------------------------------------------------- 316 317SELECT 318 replace(st_georeference(rast,'ESRI')::text, E'\n', E'EOL'), 319 replace(st_georeference(rast,'ESRI')::text, E'\n', E'EOL') = 320 '2.0000000000EOL0.0000000000EOL0.0000000000EOL3.0000000000EOL1.5000000000EOL2.0000000000EOL' 321FROM rt_properties_test 322WHERE id = 0; 323 324SELECT 325 replace(st_georeference(rast,'ESRI')::text, E'\n', E'EOL'), 326 replace(st_georeference(rast,'ESRI')::text, E'\n', E'EOL') = 327 '5.0000000000EOL0.0000000000EOL0.0000000000EOL5.0000000000EOL5.0000000000EOL5.0000000000EOL' 328FROM rt_properties_test 329WHERE id = 1; 330 331SELECT 332 replace(st_georeference(rast,'ESRI')::text, E'\n', E'EOL'), 333 replace(st_georeference(rast,'ESRI')::text, E'\n', E'EOL') = 334 '5.0000000000EOL0.0000000000EOL0.0000000000EOL5.0000000000EOL10.0000000000EOL5.0000000000EOL' 335FROM rt_properties_test 336WHERE id = 2; 337 338SELECT 339 replace(st_georeference(rast,'ESRI')::text, E'\n', E'EOL'), 340 replace(st_georeference(rast,'ESRI')::text, E'\n', E'EOL') = 341 '5.0000000000EOL0.0000000000EOL0.0000000000EOL5.0000000000EOL10.0000000000EOL5.0000000000EOL' 342FROM rt_properties_test 343WHERE id = 3; 344 345SELECT 346 replace(st_georeference(rast,'ESRI')::text, E'\n', E'EOL'), 347 replace(st_georeference(rast,'ESRI')::text, E'\n', E'EOL') = 348 '5.0000000000EOL1.0000000000EOL1.0000000000EOL5.0000000000EOL10.0000000000EOL5.0000000000EOL' 349FROM rt_properties_test 350WHERE id = 4; 351 352SELECT 353 replace(st_georeference(rast,'ESRI')::text, E'\n', E'EOL'), 354 replace(st_georeference(rast,'ESRI')::text, E'\n', E'EOL') = 355 '5.0000000000EOL7.0000000000EOL3.0000000000EOL5.0000000000EOL10.0000000000EOL5.0000000000EOL' 356FROM rt_properties_test 357WHERE id = 5; 358 359----------------------------------------------------------------------- 360-- st_setgeoreference (error conditions) 361----------------------------------------------------------------------- 362 363SELECT 364 -- all 6 parameters must be numeric 365 st_setgeoreference(rast,'4.0000000000 0.0000000000 0.0000000000 6.0000000000 1.5000000000 nodata') IS NULL 366FROM rt_properties_test 367WHERE id = 0; 368 369SELECT 370 -- must have 6 parameters 371 st_setgeoreference(rast,'2.0000000000 1.0000000000 2.0000000000 3.0000000000 1.5000000000') IS NULL 372FROM rt_properties_test 373WHERE id = 1; 374 375SELECT 376 -- any whitespace accepted between parameters as well as ' ' 377 st_setgeoreference(rast,E'2.0000000000 1.0000000000\n2.0000000000\t3.0000000000 1.5000000000 2.0000000000') IS NOT NULL 378FROM rt_properties_test 379WHERE id = 2; 380 381----------------------------------------------------------------------- 382-- st_setgeoreference (warning conditions) 383----------------------------------------------------------------------- 384 385SELECT 386 -- raster arg is null 387 st_setgeoreference(null,'4.0000000000 0.0000000000 0.0000000000 6.0000000000 1.5000000000 2.0000000000') IS NULL 388FROM rt_properties_test 389WHERE id = 0; 390 391----------------------------------------------------------------------- 392-- st_setgeoreference (default) 393----------------------------------------------------------------------- 394 395SELECT 396 st_scalex(rast) = 2, 397 st_scaley(rast) = 3, 398 st_scalex(st_setgeoreference(rast,'4.0000000000 0.0000000000 0.0000000000 6.0000000000 1.5000000000 2.0000000000')) = 4, 399 st_scaley(st_setgeoreference(rast,'4.0000000000 0.0000000000 0.0000000000 6.0000000000 1.5000000000 2.0000000000')) = 6 400FROM rt_properties_test 401WHERE id = 0; 402 403SELECT 404 st_skewx(rast) = 0, 405 st_skewy(rast) = 0, 406 st_skewx(st_setgeoreference(rast,'2.0000000000 1.0000000000 2.0000000000 3.0000000000 1.5000000000 2.0000000000')) = 2, 407 st_skewy(st_setgeoreference(rast,'2.0000000000 1.0000000000 2.0000000000 3.0000000000 1.5000000000 2.0000000000')) = 1 408FROM rt_properties_test 409WHERE id = 1; 410 411SELECT 412 st_upperleftx(rast) = 7.5, 413 st_upperlefty(rast) = 2.5, 414 st_upperleftx(st_setgeoreference(rast,'2.0000000000 1.0000000000 2.0000000000 3.0000000000 1.5000000000 2.0000000000')) = 1.5, 415 st_upperlefty(st_setgeoreference(rast,'2.0000000000 1.0000000000 2.0000000000 3.0000000000 1.5000000000 2.0000000000')) = 2.0 416FROM rt_properties_test 417WHERE id = 2; 418 419----------------------------------------------------------------------- 420-- st_setgeoreference (GDAL) 421----------------------------------------------------------------------- 422 423SELECT 424 st_scalex(rast) = 2, 425 st_scaley(rast) = 3, 426 st_scalex(st_setgeoreference(rast,'4.0000000000 0.0000000000 0.0000000000 6.0000000000 1.5000000000 2.0000000000','GDAL')) = 4, 427 st_scaley(st_setgeoreference(rast,'4.0000000000 0.0000000000 0.0000000000 6.0000000000 1.5000000000 2.0000000000','GDAL')) = 6 428FROM rt_properties_test 429WHERE id = 0; 430 431SELECT 432 st_skewx(rast) = 0, 433 st_skewy(rast) = 0, 434 st_skewx(st_setgeoreference(rast,'2.0000000000 1.0000000000 2.0000000000 3.0000000000 1.5000000000 2.0000000000','GDAL')) = 2, 435 st_skewy(st_setgeoreference(rast,'2.0000000000 1.0000000000 2.0000000000 3.0000000000 1.5000000000 2.0000000000','GDAL')) = 1 436FROM rt_properties_test 437WHERE id = 1; 438 439SELECT 440 st_upperleftx(rast) = 7.5, 441 st_upperlefty(rast) = 2.5, 442 st_upperleftx(st_setgeoreference(rast,'2.0000000000 1.0000000000 2.0000000000 3.0000000000 1.5000000000 2.0000000000','GDAL')) = 1.5, 443 st_upperlefty(st_setgeoreference(rast,'2.0000000000 1.0000000000 2.0000000000 3.0000000000 1.5000000000 2.0000000000','GDAL')) = 2.0 444FROM rt_properties_test 445WHERE id = 2; 446 447----------------------------------------------------------------------- 448-- st_setgeoreference (ESRI) 449----------------------------------------------------------------------- 450 451SELECT 452 st_scalex(rast) = 2, 453 st_scaley(rast) = 3, 454 st_scalex(st_setgeoreference(rast,'4.0000000000 0.0000000000 0.0000000000 6.0000000000 1.5000000000 2.0000000000','ESRI')) = 4, 455 st_scaley(st_setgeoreference(rast,'4.0000000000 0.0000000000 0.0000000000 6.0000000000 1.5000000000 2.0000000000','ESRI')) = 6 456FROM rt_properties_test 457WHERE id = 0; 458 459SELECT 460 st_skewx(rast) = 0, 461 st_skewy(rast) = 0, 462 st_skewx(st_setgeoreference(rast,'2.0000000000 1.0000000000 2.0000000000 3.0000000000 1.5000000000 2.0000000000','ESRI')) = 2, 463 st_skewy(st_setgeoreference(rast,'2.0000000000 1.0000000000 2.0000000000 3.0000000000 1.5000000000 2.0000000000','ESRI')) = 1 464FROM rt_properties_test 465WHERE id = 1; 466 467SELECT 468 st_upperleftx(rast) = 7.5, 469 st_upperlefty(rast) = 2.5, 470 st_upperleftx(st_setgeoreference(rast,'2.0000000000 0.0000000000 0.0000000000 3.0000000000 1.0000000000 2.5000000000','ESRI')) = 0, 471 st_upperlefty(st_setgeoreference(rast,'2.0000000000 0.0000000000 0.0000000000 3.0000000000 1.0000000000 2.5000000000','ESRI')) = 1 472FROM rt_properties_test 473WHERE id = 2; 474 475----------------------------------------------------------------------- 476-- ST_SetGeoReference(raster, double precision, ...) 477----------------------------------------------------------------------- 478 479SELECT id, ST_Metadata(rast), ST_Metadata(ST_SetGeoReference(rast, 0, 0, 1, -1, 0, 0)) FROM rt_properties_test ORDER BY id; 480SELECT id, ST_Metadata(rast), ST_Metadata(ST_SetGeoReference(rast, 1, 1, 0.1, -0.1, 0, 0)) FROM rt_properties_test ORDER BY id; 481SELECT id, ST_Metadata(rast), ST_Metadata(ST_SetGeoReference(rast, 0, 0.1, 1, 1, 0, 0)) FROM rt_properties_test ORDER BY id; 482 483DROP TABLE rt_properties_test; 484