[postgis-tickets] ERROR: rt_raster_from_hexwkb: Raster HEXWKB input must have an even number of characters

Michael.CTR.Lazlo at faa.gov Michael.CTR.Lazlo at faa.gov
Thu Aug 2 09:39:10 PDT 2018


I have created a table loading via raster2psql:
raster2pgsql -a -f Spatial_Grid -F -I -M -T ssa_data -X ssa_data *.tif ssa.TERRAIN_GRID

The tif data comes from http://dwtkns.com/srtm/

I load 98 rows of data using above.

So I need elevation data back if I pass to this data a lat and long.
I initially used query: example

SELECT rid, ST_Value(spatial_grid,1,
                ST_GEOMFROMEWKT('SRID=4326;POINT(-79.9616664245329 40.0000000968475)')
               ) AS ALTITUDE
FROM TERRAIN_GRID;

This returns the right answer BUT these raster warnings make it difficult to work with:
NOTICE:  Attempting to get pixel value with out of range raster coordinates:

So I came up with a way to only check the row that the point is actually contained within the row raster first. This eliminates the warnings:

SELECT ST_Value(spatial_grid,1, ST_GEOMFROMEWKT('SRID=4326;POINT(-79.9616664245329 40.0000000968475)')) AS ALTITUDE
FROM TERRAIN_GRID
WHERE ST_Contains(ST_Envelope(spatial_grid),ST_SetSRID(ST_MakePoint(-79.9616664245329, 40.0000000968475),4326));

So rather than have someone running this query say from python and have to put in lat longs in twice I created a function:

create or replace function getAltitude(vLongitude decimal,vLatitude decimal)
            returns integer as $$
declare
            lAltitude ssa.TERRAIN_GRID.spatial_grid%TYPE;
            lPointValue varchar := 'SRID=4326;POINT(' || vLongitude || ' ' || vLatitude || ')';
begin
            SELECT ST_Value(spatial_grid,1,
                ST_GEOMFROMEWKT(lPointValue)
               )
            INTO lAltitude
            FROM TERRAIN_GRID
    WHERE ST_Contains(ST_Envelope(spatial_grid),ST_SetSRID(ST_MakePoint(vLongitude, vLatitude),4326));
            return lAltitude;
end;
$$ LANGUAGE plpgsql;

This compiles without error, but when I run it, this happens:
SELECT * FROM getAltitude(-79.96166, 40.0000);
ERROR:  rt_raster_from_hexwkb: Raster HEXWKB input must have an even number of characters
CONTEXT:  PL/pgSQL function getaltitude(numeric,numeric) line 6 at SQL statement


Now it appears to be caused by something in the predicate (where clause):
WHERE ST_Contains(ST_Envelope(spatial_grid),ST_SetSRID(ST_MakePoint(vLongitude, vLatitude),4326));

I say that because if I change the function to:
create or replace function getAltitude(vLongitude decimal,vLatitude decimal)
            returns integer as $$
declare
            lAltitude ssa.TERRAIN_GRID.spatial_grid%TYPE;
            lPointValue varchar := 'SRID=4326;POINT(' || vLongitude || ' ' || vLatitude || ')';
begin
            SELECT ST_Value(spatial_grid,1,
                ST_GEOMFROMEWKT(lPointValue)
               )
            INTO lAltitude
            FROM TERRAIN_GRID;
            return lAltitude;
end;
$$ LANGUAGE plpgsql;

It executes.

I cannot find any information on this. Any help on this would be appreciated!


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/postgis-tickets/attachments/20180802/09101ba4/attachment-0001.html>


More information about the postgis-tickets mailing list