<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>