I need to rasterize a part of OSM map by coordinates. I found rather good algorithm, but can’t finish it. I have problems in STEP 3.

I described all algorithm here – may be someone have the same task.

STEP 1: Create a polygon (box polygon) with cover of wanted part of map.

Function (or query):

INSERT INTO rast.box (box_geom) 
VALUES (ST_GeomFromText('POLYGON ((30.200 59.920, 30.200 59.960, 30.260 59.960, 30.260 59.920, 30.200 59.920))',4326));

Order of creating points (corners coordinates): lowLeft->upperLeft->upperRight->lowRight->lowLeft. 5 points.

STEP 2: Use ST_Overlaps and ST_Within to choose geometry objects inside box polygon. In my example - polygons of buildings. My Function:

INSERT INTO rast.over
SELECT g.geom 
FROM rast.spb g, rast.box b
WHERE ST_Overlaps (g.geom, b. box_geom)=true 
ST_Within (g.geom, b. box_geom)=true 

b.id is id of box polygon.

STEP 3: Use ST_AsRaster and ST_Union for rasterization all of objects and union in one. I found posts about this theme (http://geospatialelucubrations.blogspot.ca/2014/05/a-guide-to-rasterization-of-vector.html, and this one is good too: postgis.17.x6.nabble.com/Rasterize-a-vector-td4997893, sorry I can post only 2 links), but I don’t understand some things:

Substep 3.1: In first guide, the author used two tables – first named “forestcover”, second named “elevation”, but I have only one table with OSM geometries. When he used ST_AsRaster, he used the second parameter: raster ref (from http://postgis.net/docs/RT_ST_AsRaster.html). Could you explain how can I use it?

Substep 3.2: My function:

CREATE TABLE rast.result  AS
SELECT ST_AsRaster(q, 100, 100, '4BUI')
FROM rast.over;

When I’m trying only to rasterize (without union) – it’s working. The table with special column is created. And I also find the result table with rows (I have 1700 geometry objects and I have 1700 rows with raster type ). But the rows are empty! Why? I try to look from pgAdmin3. And when I try to see this raster table in QGIS2.4 (through DB Manager), I have this Error:

“Error, the table rast.airports contains tiles with different srid. This feature is not yet supported by the PostGIS Raster driver. Please, specify a table that contains only tiles with the same srid or provide a 'where' constraint to select just the tiles with the same value for srid”

I checked table in ST_SRID and all of rows are in the same srid (in 4326).

Substep 3.3: When I try to union the raster from the result table or from this function:

CREATE TABLE rast.result AS
ST_Union(ST_AsRaster(q, 100, 100, '4BUI'))
FROM rast.over;

I have this Error in pgAdmin sql-console:

rt_raster_from_two_rasters: The two rasters provided do not have the same alignment

May be the problem is with “alignment”? How can I fix it?

STEP 4: My last step should be to convert postgis raster to GEOtiff. And I’m going to use ST_AsTiff.

Please, help to solve these problems!


Substep 3.1: The reference raster is used to know how to align the tiles and the pixels when you already have a raster coverage you want everything to be aligned on. If you don't already have a raster coverage you can use the other variant of ST_AsRaster() to parameter the alignment. Your problem is definitely alignment...

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.