<div dir="ltr">I'll try and help you with A & B<div><br></div><div>a) Is it more efficient to convert the raster to vector data and calculate on the those than to calculate directly on the raster?</div><div>>> I don't think it would be faster to convert to vector because that would be dumping the raster into polygons. I think for specifically calculating slope, you are better off staying in raster. <br><br>b) To my understanding, if I calculate the slope on a raster tile, the slope,… of the borders will have accuracy problems. My I idea, was to "stitch" a tile with its direct neighbours, calculate on the composed  tile, and either save a cropped calculated composed tile to its  original dimension or save the calculated composed tile as is,  probably the latter.</div><div><br></div><div>>> Overall correct, some small adjustments. For any raster operation, the tiles are operated on independently, so you need to "stitch" them together. I've provided a couple of ways in pseduo code</div><div><br></div><div>Way 1</div><div>1) Use ST_Union and make a big tile, </div><div>2) Do the spatial operation,</div><div>3) Break it up using ST_Tile()<br>The downside is you might run out of memory doing this. Also consider ST_MemUnion()</div><div><br></div><div>SELECT ST_Tile(ST_Slope(ST_Union(r1.ras)), 350,350)</div><div>FROM raster_table</div><div><br></div><div>Way 2)</div><div>A second option is to basically create an aggregate, which is likely faster. </div><div>1) Union the tiles based on ST_Touch  - make mega_tiles</div><div>2) Do the spatial operation on the mega_tiles</div><div>3) Clip the mega_tiles by the old tiles bounding box</div><div><br></div><div>WITH rtest as <br>(<br>SELECT r1.ras, ST_Union (r1.ras) as megatile<br>FROM raster_table r1<br>LEFT JOIN raster_table r2<br>ON ST_Touches (r1.geom, r2.geom) <br>GROUP BY r1.ras <br>)<br>SELECT ST_CLIP(ST_SLOPE(megatile), ST_Envelop(r1.rast) ) as ras<br>FROM rtest</div><div><br></div><div>Maybe someone wants to make an aggregate for the raster functions?</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Nov 7, 2024 at 3:31 PM <<a href="mailto:thiemo@gelassene-pferde.biz">thiemo@gelassene-pferde.biz</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi<br>
<br>
In my project  <br>
<a href="https://sourceforge.net/p/treintaytres/code/HEAD/tree/trunk/code_files/data_storage/" rel="noreferrer" target="_blank">https://sourceforge.net/p/treintaytres/code/HEAD/tree/trunk/code_files/data_storage/</a> I have the  <br>
table<br>
<br>
TABLE_SCHEMA    TABLE_NAME      DATA_TYPE       TYPE_NAME       COLUMN_NAME<br>
treintaytres    topo_files␟t    1111            uuid            id<br>
treintaytres    topo_files␟t    93              timestamptz     entry_pit<br>
treintaytres    topo_files␟t    1111            uuid            source_id<br>
treintaytres    topo_files␟t    12              text            file_name<br>
treintaytres    topo_files␟t    1111            raster          tile<br>
treintaytres    topo_files␟t    93              timestamptz     file_creation_pit<br>
treintaytres    topo_files␟t    12              text            file_hash<br>
<br>
TILE contains topographical height raster data from OpenTopography.  <br>
They are from different regions, let's say, some tiles cover  <br>
Switzerland, some cover New Zealand. I want to create slope and other  <br>
data from the height data and I have some questions I hope you can  <br>
answer or point me to answers.<br>
<br>
a) Is it more efficient to convert the raster to vector data and  <br>
calculate on the those than to calculate directly on the raster?<br>
<br>
b) To my understanding, if I calculate the slope on a raster tile, the  <br>
slope,… of the borders will have accuracy problems. My I idea, was to  <br>
"stitch" a tile with its direct neighbours, calculate on the composed  <br>
tile, and either save a cropped calculated composed tile to its  <br>
original dimension or save the calculated composed tile as is,  <br>
probably the latter.<br>
Can I compose as follows?<br>
with RASTER_NEIGHBORS as (         select R1.TILE   as CURRENT_TILE<br>
                                          ,R2.TILE   as NEIGHBOR_TILE<br>
                                          ,<a href="http://R1.ID" rel="noreferrer" target="_blank">R1.ID</a>     as CURRENT_ID<br>
                                      from TOPO_FILES␟T R1<br>
                           left outer join TOPO_FILES␟T R2<br>
                                        on ST_Touches(R1.TILE<br>
                                                     ,R2.TILE)<br>
                                        or ST_Intersects(R1.TILE<br>
                                                        ,R2.TILE)<br>
                                     where TRUE<br>
                                       --and <a href="http://R1.ID" rel="noreferrer" target="_blank">R1.ID</a> =  <br>
'6b8ca53a-bb5f-4c2b-a9c9-94b6a706e9b0'<br>
                                       and TRUE)<br>
    ,NION as (select CURRENT_TILE as TILE<br>
                    ,CURRENT_ID<br>
                from RASTER_NEIGHBORS<br>
              union<br>
              select NEIGHBOR_TILE as TILE<br>
                    ,CURRENT_ID<br>
                from RASTER_NEIGHBORS)<br>
   select ST_Union(TILE) as COMPOSED_TILE<br>
         ,CURRENT_ID<br>
     from NION<br>
group by CURRENT_ID;<br>
<br>
c) Finally, I want to select all the areas where slope, TRI,… conform  <br>
certain criteria and have a minium surface size. Do I do it this  <br>
better on vector data and do I need to do this on data composed of all  <br>
the contiguous areas?<br>
<br>
I would be grateful for any nudge into the right direction. Maybe URLs  <br>
with samples.<br>
<br>
Kind regards<br>
<br>
Thiemo<br>
<br>
</blockquote></div>