From 42a4a93d61b1555a70ad36fb4b49f56edb177762 Mon Sep 17 00:00:00 2001 From: Bborie Park Date: Fri, 4 May 2012 02:54:14 +0000 Subject: [PATCH] Additional fixups in rtpg_getSR() for better handling of spatial_ref_sys. Also inclusion of several regression tests to stress rtpg_getSR(). git-svn-id: http://svn.osgeo.org/postgis/trunk@9709 b70326c6-7e19-0410-871a-916f4a2858ee --- raster/rt_pg/rt_pg.c | 5 +++-- raster/test/regress/rt_resample.sql | 17 +++++++++++++++++ raster/test/regress/rt_resample_expected | 2 ++ 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/raster/rt_pg/rt_pg.c b/raster/rt_pg/rt_pg.c index 03531b75d..d6bfba149 100644 --- a/raster/rt_pg/rt_pg.c +++ b/raster/rt_pg/rt_pg.c @@ -494,7 +494,7 @@ rtpg_getSR(int srid) char *tmp = NULL; char *srs = NULL; - len = sizeof(char) * (strlen("SELECT CASE WHEN upper(auth_name) = 'EPSG' AND length(auth_srid::text) > 0 THEN upper(auth_name) || ':' || auth_srid ELSE '' END, proj4text, srtext FROM spatial_ref_sys WHERE srid = LIMIT 1") + MAX_INT_CHARLEN + 1); + len = sizeof(char) * (strlen("SELECT CASE WHEN upper(auth_name) = 'EPSG' AND length(auth_srid::text) > 0 THEN upper(auth_name) || ':' || auth_srid ELSE '' END, COALESCE(proj4text, ''), COALESCE(srtext, '') FROM spatial_ref_sys WHERE srid = LIMIT 1") + MAX_INT_CHARLEN + 1); sql = (char *) palloc(len); if (NULL == sql) { elog(ERROR, "rtpg_getSR: Unable to allocate memory for sql\n"); @@ -509,7 +509,8 @@ rtpg_getSR(int srid) } /* execute query */ - snprintf(sql, len, "SELECT CASE WHEN upper(auth_name) = 'EPSG' AND length(auth_srid::text) > 0 THEN upper(auth_name) || ':' || auth_srid ELSE '' END, proj4text, srtext FROM spatial_ref_sys WHERE srid = %d LIMIT 1", srid); + snprintf(sql, len, "SELECT CASE WHEN upper(auth_name) = 'EPSG' AND length(auth_srid::text) > 0 THEN upper(auth_name) || ':' || auth_srid ELSE '' END, COALESCE(proj4text, ''), COALESCE(srtext, '') FROM spatial_ref_sys WHERE srid = %d LIMIT 1", srid); + POSTGIS_RT_DEBUGF(4, "SRS query: %s", sql); spi_result = SPI_execute(sql, TRUE, 0); SPI_pfree(sql); if (spi_result != SPI_OK_SELECT || SPI_tuptable == NULL || SPI_processed != 1) { diff --git a/raster/test/regress/rt_resample.sql b/raster/test/regress/rt_resample.sql index 935608d5d..7394e553c 100644 --- a/raster/test/regress/rt_resample.sql +++ b/raster/test/regress/rt_resample.sql @@ -39,12 +39,17 @@ DELETE FROM "spatial_ref_sys" WHERE srid = 992163; DELETE FROM "spatial_ref_sys" WHERE srid = 993309; DELETE FROM "spatial_ref_sys" WHERE srid = 993310; DELETE FROM "spatial_ref_sys" WHERE srid = 994269; +DELETE FROM "spatial_ref_sys" WHERE srid = 984269; +DELETE FROM "spatial_ref_sys" WHERE srid = 974269; INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (992163,'EPSG',2163,'PROJCS["unnamed",GEOGCS["unnamed ellipse",DATUM["unknown",SPHEROID["unnamed",6370997,0]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433]],PROJECTION["Lambert_Azimuthal_Equal_Area"],PARAMETER["latitude_of_center",45],PARAMETER["longitude_of_center",-100],PARAMETER["false_easting",0],PARAMETER["false_northing",0],UNIT["Meter",1],AUTHORITY["EPSG","2163"]]','+proj=laea +lat_0=45 +lon_0=-100 +x_0=0 +y_0=0 +a=6370997 +b=6370997 +units=m +no_defs '); INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (993309,'EPSG',3309,'PROJCS["NAD27 / California Albers",GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982139006,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Albers_Conic_Equal_Area"],PARAMETER["standard_parallel_1",34],PARAMETER["standard_parallel_2",40.5],PARAMETER["latitude_of_center",0],PARAMETER["longitude_of_center",-120],PARAMETER["false_easting",0],PARAMETER["false_northing",-4000000],AUTHORITY["EPSG","3309"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=clrk66 +datum=NAD27 +units=m +no_defs '); INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (993310,'EPSG',3310,'PROJCS["NAD83 / California Albers",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Albers_Conic_Equal_Area"],PARAMETER["standard_parallel_1",34],PARAMETER["standard_parallel_2",40.5],PARAMETER["latitude_of_center",0],PARAMETER["longitude_of_center",-120],PARAMETER["false_easting",0],PARAMETER["false_northing",-4000000],AUTHORITY["EPSG","3310"],AXIS["X",EAST],AXIS["Y",NORTH]]','+proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs '); INSERT INTO "spatial_ref_sys" ("srid","auth_name","auth_srid","srtext","proj4text") VALUES (994269,'EPSG',4269,'GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]]','+proj=longlat +ellps=GRS80 +datum=NAD83 +no_defs '); +INSERT INTO "spatial_ref_sys" ("srid","auth_name","srtext","proj4text") VALUES (984269,'EPSG','GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]]','+proj=longlat +ellps=GRS80 +datum=NAD83 +no_defs '); +INSERT INTO "spatial_ref_sys" ("srid","srtext") VALUES (974269,'GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]]'); + -- ST_Resample INSERT INTO raster_resample_dst (rid, rast) VALUES ( 1.0, (SELECT ST_Resample( @@ -247,6 +252,16 @@ INSERT INTO raster_resample_dst (rid, rast) VALUES ( NULL::raster, FALSE ) FROM raster_resample_src) +), ( + 1.30, (SELECT ST_Resample( + rast, + 984269 + ) FROM raster_resample_src) +), ( + 1.31, (SELECT ST_Resample( + rast, + 974269 + ) FROM raster_resample_src) ); -- ST_Transform @@ -579,6 +594,8 @@ DELETE FROM "spatial_ref_sys" WHERE srid = 992163; DELETE FROM "spatial_ref_sys" WHERE srid = 993309; DELETE FROM "spatial_ref_sys" WHERE srid = 993310; DELETE FROM "spatial_ref_sys" WHERE srid = 994269; +DELETE FROM "spatial_ref_sys" WHERE srid = 984269; +DELETE FROM "spatial_ref_sys" WHERE srid = 974269; DROP TABLE raster_resample_src; DROP TABLE raster_resample_dst; diff --git a/raster/test/regress/rt_resample_expected b/raster/test/regress/rt_resample_expected index ad96c294e..826a58ae4 100644 --- a/raster/test/regress/rt_resample_expected +++ b/raster/test/regress/rt_resample_expected @@ -26,6 +26,8 @@ NOTICE: Values must be provided for both X and Y when specifying the scale. Re 1.28|992163|5|5|1|2064.200|-2291.200|0.000|0.000|-500321.000|601456.000|t|t|t 1.29||||||||||||| 1.3|993309|12|12|1|1009.916|-1009.916|0.000|0.000|950762.305|1409088.896|t|t|t +1.30|984269|12|8|1|0.012|-0.012|0.000|0.000|-107.029|50.206|t|t|t +1.31|974269|12|8|1|0.012|-0.012|0.000|0.000|-107.029|50.206|t|t|t 1.4|994269|12|8|1|0.012|-0.012|0.000|0.000|-107.029|50.206|t|t|t 1.5|993310|24|24|1|500.000|500.000|0.000|0.000|950732.188|1397281.783|t|t|t 1.6|992163|10|10|1|1000.000|-1000.000|0.000|0.000|-500000.000|600000.000|t|t|t -- 2.40.0