|
@@ -32,4 +32,43 @@
|
|
|
LATERAL public.st_pixelaspoints(clipped_rast) AS gv
|
|
|
WHERE (gv).val IS NOT NULL;
|
|
|
</select>
|
|
|
+
|
|
|
+ <select id="getDemVolume" resultType="Double">
|
|
|
+ SELECT (stats.count * (pixel_info.pixel_size * pixel_info.pixel_size) * (stats.mean - #{minHeight})) AS volume
|
|
|
+ FROM (SELECT (ST_SummaryStats(
|
|
|
+ ST_MapAlgebra(
|
|
|
+ ST_Clip(rast, 1, ST_GeomFromText(#{geomWkt}, 4326)),
|
|
|
+ 1,
|
|
|
+ 'CASE WHEN [rast] >= #{minHeight} AND [rast] <= #{maxHeight} THEN [rast] ELSE NULL END',
|
|
|
+ '32BF')
|
|
|
+ )).*) AS stats,
|
|
|
+ (SELECT ST_PixelWidth(ST_Clip(rast, 1, ST_GeomFromText(#{geomWkt}, 4326))) as pixel_size
|
|
|
+ FROM ${tableName}
|
|
|
+ WHERE ST_Intersects(rast, ST_GeomFromText(#{geomWkt}, 4326)) LIMIT 1) AS pixel_info;
|
|
|
+ </select>
|
|
|
+ <select id="getFillVolume" resultType="Double">
|
|
|
+ SELECT SUM((#{height} - stats.mean) * stats.count *
|
|
|
+ (pixel_info.pixel_size * pixel_info.pixel_size)) AS fill_volume
|
|
|
+ FROM (SELECT (ST_SummaryStats(
|
|
|
+ ST_MapAlgebra(
|
|
|
+ ST_Clip(rast, 1, ST_GeomFromText(#{geomWkt}, 4326)),
|
|
|
+ 1,
|
|
|
+ 'CASE WHEN [rast] < #{height} THEN [rast] ELSE NULL END',
|
|
|
+ '32BF'
|
|
|
+ )
|
|
|
+ )).*) AS stats,
|
|
|
+ (SELECT ST_PixelWidth(ST_Clip(rast, 1, ST_GeomFromText(#{geomWkt}, 4326))) as pixel_size
|
|
|
+ FROM ${tableName}
|
|
|
+ WHERE ST_Intersects(rast, ST_GeomFromText(#{geomWkt}, 4326)) LIMIT 1) AS pixel_info;
|
|
|
+ </select>
|
|
|
+
|
|
|
+ <select id="getDemRing" resultType="String">
|
|
|
+ WITH contour AS (SELECT (ST_Dump(ST_Contour(rast, 1, interval => 1))).geom AS geom, (ST_Value(rast, ST_Centroid((ST_Dump(ST_Contour(rast, 1, interval => 1))).geom)):: int) AS elevation
|
|
|
+ FROM ${tableName}
|
|
|
+ WHERE ST_Intersects(rast, ST_GeomFromText(#{geomWkt}, 4326))
|
|
|
+ )
|
|
|
+ SELECT ST_Intersection(geom, ST_GeomFromText(#{geomWkt}, 4326)) AS geom
|
|
|
+ FROM contour
|
|
|
+ WHERE elevation = #{height}
|
|
|
+ </select>
|
|
|
</mapper>
|