]> granicus.if.org Git - postgis/commitdiff
Added docs and regression test for extent parameter variants of
authorBborie Park <bkpark at ucdavis.edu>
Fri, 16 Nov 2012 01:32:10 +0000 (01:32 +0000)
committerBborie Park <bkpark at ucdavis.edu>
Fri, 16 Nov 2012 01:32:10 +0000 (01:32 +0000)
ST_Slope, ST_Aspect and ST_Hillshade

git-svn-id: http://svn.osgeo.org/postgis/trunk@10690 b70326c6-7e19-0410-871a-916f4a2858ee

doc/reference_raster.xml
raster/test/regress/Makefile.in
raster/test/regress/rt_elevation_functions.sql [new file with mode: 0644]
raster/test/regress/rt_elevation_functions_expected [new file with mode: 0644]

index c1da8b8f9838ceb96745bdeaad56fdd3b487f8d0..a28d89c514a701977c7729ffc409041e0dad3d8c 100644 (file)
@@ -1628,7 +1628,7 @@ FROM (SELECT rid, ST_MetaData(rast) As md
                        <refsynopsisdiv>
                                <funcsynopsis>
                                        <funcprototype>
-                                               <funcdef>text <function>ST_Tile</function></funcdef>
+                                               <funcdef>setof raster <function>ST_Tile</function></funcdef>
                                                <paramdef><type>raster </type> <parameter>rast</parameter></paramdef>
                                                <paramdef><type>int[] </type> <parameter>nband</parameter></paramdef>
                                                <paramdef><type>integer </type> <parameter>width</parameter></paramdef>
@@ -1636,7 +1636,7 @@ FROM (SELECT rid, ST_MetaData(rast) As md
                                        </funcprototype>
 
                                        <funcprototype>
-                                               <funcdef>text <function>ST_Tile</function></funcdef>
+                                               <funcdef>setof raster <function>ST_Tile</function></funcdef>
                                                <paramdef><type>raster </type> <parameter>rast</parameter></paramdef>
                                                <paramdef><type>integer </type> <parameter>nband</parameter></paramdef>
                                                <paramdef><type>integer </type> <parameter>width</parameter></paramdef>
@@ -1644,7 +1644,7 @@ FROM (SELECT rid, ST_MetaData(rast) As md
                                        </funcprototype>
 
                                        <funcprototype>
-                                               <funcdef>text <function>ST_Tile</function></funcdef>
+                                               <funcdef>setof raster <function>ST_Tile</function></funcdef>
                                                <paramdef><type>raster </type> <parameter>rast</parameter></paramdef>
                                                <paramdef><type>integer </type> <parameter>width</parameter></paramdef>
                                                <paramdef><type>integer </type> <parameter>height</parameter></paramdef>
@@ -7788,6 +7788,41 @@ FROM foo
                                </programlisting>
                        </refsection>
 
+                       <refsection>
+                               <title>Examples: Variant 2</title>
+
+                               <para>Complete example of tiles of a coverage.  This query only works with PostgreSQL 9.1 or higher.</para>
+
+                               <programlisting>
+WITH foo AS (
+       SELECT ST_Tile(
+               ST_SetValues(
+                       ST_AddBand(
+                               ST_MakeEmptyRaster(6, 6, 0, 0, 1, -1, 0, 0, 0),
+                               1, '32BF', 0, -9999
+                       ),
+                       1, 1, 1, ARRAY[
+                               [1, 1, 1, 1, 1, 1],
+                               [1, 1, 1, 1, 2, 1],
+                               [1, 2, 2, 3, 3, 1],
+                               [1, 1, 3, 2, 1, 1],
+                               [1, 2, 2, 1, 2, 1],
+                               [1, 1, 1, 1, 1, 1]
+                       ]::double precision[]
+               ),
+               2, 2
+       ) AS rast
+)
+SELECT
+       t1.rast,
+       ST_Hillshade(ST_Union(t2.rast), 1, t1.rast)
+FROM foo t1
+CROSS JOIN foo t2
+WHERE ST_Intersects(t1.rast, t2.rast)
+GROUP BY t1.rast;
+                               </programlisting>
+                       </refsection>
+
                        <refsection>
                                <title>See Also</title>
                                <para>
@@ -7888,6 +7923,41 @@ FROM foo
 
                        </refsection>
 
+                       <refsection>
+                               <title>Examples: Variant 2</title>
+
+                               <para>Complete example of tiles of a coverage.  This query only works with PostgreSQL 9.1 or higher.</para>
+
+                               <programlisting>
+WITH foo AS (
+       SELECT ST_Tile(
+               ST_SetValues(
+                       ST_AddBand(
+                               ST_MakeEmptyRaster(6, 6, 0, 0, 1, -1, 0, 0, 0),
+                               1, '32BF', 0, -9999
+                       ),
+                       1, 1, 1, ARRAY[
+                               [1, 1, 1, 1, 1, 1],
+                               [1, 1, 1, 1, 2, 1],
+                               [1, 2, 2, 3, 3, 1],
+                               [1, 1, 3, 2, 1, 1],
+                               [1, 2, 2, 1, 2, 1],
+                               [1, 1, 1, 1, 1, 1]
+                       ]::double precision[]
+               ),
+               2, 2
+       ) AS rast
+)
+SELECT
+       t1.rast,
+       ST_Aspect(ST_Union(t2.rast), 1, t1.rast)
+FROM foo t1
+CROSS JOIN foo t2
+WHERE ST_Intersects(t1.rast, t2.rast)
+GROUP BY t1.rast;
+                               </programlisting>
+                       </refsection>
+
                        <refsection>
                                <title>See Also</title>
                                <para>
@@ -7988,6 +8058,40 @@ FROM foo
 
                                </programlisting>
                        </refsection>
+                       <refsection>
+                               <title>Examples: Variant 2</title>
+
+                               <para>Complete example of tiles of a coverage.  This query only works with PostgreSQL 9.1 or higher.</para>
+
+                               <programlisting>
+WITH foo AS (
+       SELECT ST_Tile(
+               ST_SetValues(
+                       ST_AddBand(
+                               ST_MakeEmptyRaster(6, 6, 0, 0, 1, -1, 0, 0, 0),
+                               1, '32BF', 0, -9999
+                       ),
+                       1, 1, 1, ARRAY[
+                               [1, 1, 1, 1, 1, 1],
+                               [1, 1, 1, 1, 2, 1],
+                               [1, 2, 2, 3, 3, 1],
+                               [1, 1, 3, 2, 1, 1],
+                               [1, 2, 2, 1, 2, 1],
+                               [1, 1, 1, 1, 1, 1]
+                       ]::double precision[]
+               ),
+               2, 2
+       ) AS rast
+)
+SELECT
+       t1.rast,
+       ST_Slope(ST_Union(t2.rast), 1, t1.rast)
+FROM foo t1
+CROSS JOIN foo t2
+WHERE ST_Intersects(t1.rast, t2.rast)
+GROUP BY t1.rast;
+                               </programlisting>
+                       </refsection>
 
                        <refsection>
                                <title>See Also</title>
index 47d6cbc24c46c140de140a9312e8f8f79f80b4e2..94074c595d5ec7bab45f79c576896aa2cc85b4a9 100644 (file)
@@ -105,7 +105,8 @@ TEST_MAPALGEBRA = \
        rt_union \
        rt_invdistweight4ma \
        rt_4ma \
-       rt_setvalues_geomval
+       rt_setvalues_geomval \
+       rt_elevation_functions
 
 TEST_SREL = \
        rt_gist_relationships \
diff --git a/raster/test/regress/rt_elevation_functions.sql b/raster/test/regress/rt_elevation_functions.sql
new file mode 100644 (file)
index 0000000..73eaeee
--- /dev/null
@@ -0,0 +1,292 @@
+SET client_min_messages TO warning;
+
+/*
+1 1 1 1 1 1 1 1 1
+1 2 2 2 1 2 2 2 1
+1 2 3 2 2 2 3 2 1
+1 2 2 2 1 2 2 2 1
+1 1 2 1 3 1 2 1 1
+1 2 2 2 1 2 2 2 1
+1 2 3 2 2 2 3 2 1
+1 2 2 2 1 2 2 2 1
+1 1 1 1 1 1 1 1 1
+*/
+
+DROP TABLE IF EXISTS raster_elevation;
+CREATE TABLE raster_elevation (rid integer, rast raster);
+DROP TABLE IF EXISTS raster_elevation_out;
+CREATE TABLE raster_elevation_out (rid integer, functype text, rast raster);
+
+INSERT INTO raster_elevation
+       SELECT
+               0 AS rid,
+               ST_SetValues(
+                       ST_AddBand(ST_MakeEmptyRaster(9, 9, 0, 0, 1, -1, 0, 0, 0), 1, '32BF', 0, -9999),
+                       1, 1, 1, ARRAY[
+                               [1, 1, 1, 1, 1, 1, 1, 1, 1],
+                               [1, 2, 2, 2, 1, 2, 2, 2, 1],
+                               [1, 2, 3, 2, 2, 2, 3, 2, 1],
+                               [1, 2, 2, 2, 1, 2, 2, 2, 1],
+                               [1, 1, 2, 1, 3, 1, 2, 1, 1],
+                               [1, 2, 2, 2, 1, 2, 2, 2, 1],
+                               [1, 2, 3, 2, 2, 2, 3, 2, 1],
+                               [1, 2, 2, 2, 1, 2, 2, 2, 1],
+                               [1, 1, 1, 1, 1, 1, 1, 1, 1]
+                       ]::double precision[]
+               ) AS rast
+;
+
+INSERT INTO raster_elevation
+       SELECT
+               1 AS rid,
+               ST_SetValues(
+                       ST_AddBand(ST_MakeEmptyRaster(3, 3, 0, 0, 1, -1, 0, 0, 0), 1, '32BF', 0, -9999),
+                       1, 1, 1, ARRAY[
+                               [1, 1, 1],
+                               [1, 2, 2],
+                               [1, 2, 3]
+                       ]::double precision[]
+               ) AS rast
+       UNION ALL
+       SELECT
+               2 AS rid,
+               ST_SetValues(
+                       ST_AddBand(ST_MakeEmptyRaster(3, 3, 0, -3, 1, -1, 0, 0, 0), 1, '32BF', 0, -9999),
+                       1, 1, 1, ARRAY[
+                               [1, 2, 2],
+                               [1, 1, 2],
+                               [1, 2, 2]
+                       ]::double precision[]
+               ) AS rast
+       UNION ALL
+       SELECT
+               3 AS rid,
+               ST_SetValues(
+                       ST_AddBand(ST_MakeEmptyRaster(3, 3, 0, -6, 1, -1, 0, 0, 0), 1, '32BF', 0, -9999),
+                       1, 1, 1, ARRAY[
+                               [1, 2, 3],
+                               [1, 2, 2],
+                               [1, 1, 1]
+                       ]::double precision[]
+               ) AS rast
+       UNION ALL
+       SELECT
+               4 AS rid,
+               ST_SetValues(
+                       ST_AddBand(ST_MakeEmptyRaster(3, 3, 3, 0, 1, -1, 0, 0, 0), 1, '32BF', 0, -9999),
+                       1, 1, 1, ARRAY[
+                               [1, 1, 1],
+                               [2, 1, 2],
+                               [2, 2, 2]
+                       ]::double precision[]
+               ) AS rast
+       UNION ALL
+       SELECT
+               5 AS rid,
+               ST_SetValues(
+                       ST_AddBand(ST_MakeEmptyRaster(3, 3, 3, -3, 1, -1, 0, 0, 0), 1, '32BF', 0, -9999),
+                       1, 1, 1, ARRAY[
+                               [2, 1, 2],
+                               [1, 3, 1],
+                               [2, 1, 2]
+                       ]::double precision[]
+               ) AS rast
+       UNION ALL
+       SELECT
+               6 AS rid,
+               ST_SetValues(
+                       ST_AddBand(ST_MakeEmptyRaster(3, 3, 3, -6, 1, -1, 0, 0, 0), 1, '32BF', 0, -9999),
+                       1, 1, 1, ARRAY[
+                               [2, 2, 2],
+                               [2, 1, 2],
+                               [1, 1, 1]
+                       ]::double precision[]
+               ) AS rast
+       UNION ALL
+       SELECT
+               7 AS rid,
+               ST_SetValues(
+                       ST_AddBand(ST_MakeEmptyRaster(3, 3, 6, 0, 1, -1, 0, 0, 0), 1, '32BF', 0, -9999),
+                       1, 1, 1, ARRAY[
+                               [1, 1, 1],
+                               [2, 2, 1],
+                               [3, 2, 1]
+                       ]::double precision[]
+               ) AS rast
+       UNION ALL
+       SELECT
+               8 AS rid,
+               ST_SetValues(
+                       ST_AddBand(ST_MakeEmptyRaster(3, 3, 6, -3, 1, -1, 0, 0, 0), 1, '32BF', 0, -9999),
+                       1, 1, 1, ARRAY[
+                               [2, 2, 1],
+                               [2, 1, 1],
+                               [2, 2, 1]
+                       ]::double precision[]
+               ) AS rast
+       UNION ALL
+       SELECT
+               9 AS rid,
+               ST_SetValues(
+                       ST_AddBand(ST_MakeEmptyRaster(3, 3, 6, -6, 1, -1, 0, 0, 0), 1, '32BF', 0, -9999),
+                       1, 1, 1, ARRAY[
+                               [3, 2, 1],
+                               [2, 2, 1],
+                               [1, 1, 1]
+                       ]::double precision[]
+               ) AS rast
+;
+
+/* ST_Slope */
+INSERT INTO raster_elevation_out
+SELECT
+       rid,
+       'slope',
+       ST_Slope(rast)
+FROM raster_elevation
+WHERE rid = 0
+UNION ALL
+SELECT
+       rid,
+       'aspect',
+       ST_Aspect(rast)
+FROM raster_elevation
+WHERE rid = 0
+UNION ALL
+SELECT
+       rid,
+       'hillshade',
+       ST_Hillshade(rast)
+FROM raster_elevation
+WHERE rid = 0
+;
+
+/* with coverage */
+DO $$
+BEGIN
+-- this ONLY works for PostgreSQL version 9.1 or higher
+IF array_to_string(regexp_matches(split_part(version(), ' ', 2), E'([0-9]+)\.([0-9]+)'), '')::int > 90 THEN
+
+       INSERT INTO raster_elevation_out (
+               SELECT
+                       t1.rid,
+                       'slope',
+                       ST_Slope(ST_Union(t2.rast), 1, t1.rast) AS rast
+               FROM raster_elevation t1
+               CROSS JOIN raster_elevation t2
+               WHERE t1.rid != 0
+                       AND t2.rid != 0
+                       AND ST_Intersects(t1.rast, t2.rast)
+               GROUP BY t1.rid, t1.rast
+               ORDER BY t1.rid
+       ) UNION ALL (
+               SELECT
+                       t1.rid,
+                       'aspect',
+                       ST_Aspect(ST_Union(t2.rast), 1, t1.rast) AS rast
+               FROM raster_elevation t1
+               CROSS JOIN raster_elevation t2
+               WHERE t1.rid != 0
+                       AND t2.rid != 0
+                       AND ST_Intersects(t1.rast, t2.rast)
+               GROUP BY t1.rid, t1.rast
+               ORDER BY t1.rid
+       ) UNION ALL (
+               SELECT
+                       t1.rid,
+                       'hillshade',
+                       ST_Hillshade(ST_Union(t2.rast), 1, t1.rast) AS rast
+               FROM raster_elevation t1
+               CROSS JOIN raster_elevation t2
+               WHERE t1.rid != 0
+                       AND t2.rid != 0
+                       AND ST_Intersects(t1.rast, t2.rast)
+               GROUP BY t1.rid, t1.rast
+               ORDER BY t1.rid
+       );
+
+ELSE
+
+       INSERT INTO raster_elevation_out (
+               WITH foo AS (
+                       SELECT
+                               t1.rid,
+                               ST_Union(t2.rast) AS rast
+                       FROM raster_elevation t1
+                       JOIN raster_elevation t2
+                               ON ST_Intersects(t1.rast, t2.rast)
+                                       AND t1.rid != 0
+                                       AND t2.rid != 0
+                       GROUP BY t1.rid
+               )
+               SELECT
+                       t1.rid,
+                       'slope',
+                       ST_Slope(ST_Union(t2.rast), 1, t1.rast) AS rast
+               FROM raster_elevation t1
+               JOIN foo t2
+                       ON t1.rid = t2.rid
+               ORDER BY t1.rid
+       ) UNION ALL (
+               WITH foo AS (
+                       SELECT
+                               t1.rid,
+                               ST_Union(t2.rast) AS rast
+                       FROM raster_elevation t1
+                       JOIN raster_elevation t2
+                               ON ST_Intersects(t1.rast, t2.rast)
+                                       AND t1.rid != 0
+                                       AND t2.rid != 0
+                       GROUP BY t1.rid
+               )
+               SELECT
+                       t1.rid,
+                       'aspect',
+                       ST_Aspect(ST_Union(t2.rast), 1, t1.rast) AS rast
+               FROM raster_elevation t1
+               JOIN foo t2
+                       ON t1.rid = t2.rid
+               ORDER BY t1.rid
+       ) UNION ALL (
+               WITH foo AS (
+                       SELECT
+                               t1.rid,
+                               ST_Union(t2.rast) AS rast
+                       FROM raster_elevation t1
+                       JOIN raster_elevation t2
+                               ON ST_Intersects(t1.rast, t2.rast)
+                                       AND t1.rid != 0
+                                       AND t2.rid != 0
+                               GROUP BY t1.rid
+               )
+               SELECT
+                       t1.rid,
+                       'hillshade',
+                       ST_Hillshade(ST_Union(t2.rast), 1, t1.rast) AS rast
+               FROM raster_elevation t1
+               JOIN foo t2
+                       ON t1.rid = t2.rid
+               ORDER BY t1.rid
+       );
+
+END IF;
+END $$;
+
+WITH foo AS (
+       SELECT
+               rid,
+               functype,
+               ST_PixelAsPoints(rast) AS papt
+       FROM raster_elevation_out
+)
+SELECT
+       rid,
+       functype,
+       (papt).x,
+       (papt).y,
+       round((papt).val::numeric, 6) AS val
+FROM foo
+ORDER BY 2, 1, 4, 3;
+
+DROP TABLE IF EXISTS raster_elevation_out;
+DROP TABLE IF EXISTS raster_elevation;
diff --git a/raster/test/regress/rt_elevation_functions_expected b/raster/test/regress/rt_elevation_functions_expected
new file mode 100644 (file)
index 0000000..d2b9ed2
--- /dev/null
@@ -0,0 +1,487 @@
+DO
+0|aspect|1|1|315.000000
+0|aspect|2|1|341.565063
+0|aspect|3|1|0.000000
+0|aspect|4|1|18.434948
+0|aspect|5|1|0.000000
+0|aspect|6|1|341.565063
+0|aspect|7|1|0.000000
+0|aspect|8|1|18.434948
+0|aspect|9|1|45.000000
+0|aspect|1|2|288.434937
+0|aspect|2|2|315.000000
+0|aspect|3|2|0.000000
+0|aspect|4|2|30.963757
+0|aspect|5|2|0.000000
+0|aspect|6|2|329.036255
+0|aspect|7|2|0.000000
+0|aspect|8|2|45.000000
+0|aspect|9|2|71.565048
+0|aspect|1|3|270.000000
+0|aspect|2|3|270.000000
+0|aspect|3|3|-1.000000
+0|aspect|4|3|90.000000
+0|aspect|5|3|-1.000000
+0|aspect|6|3|270.000000
+0|aspect|7|3|-1.000000
+0|aspect|8|3|90.000000
+0|aspect|9|3|90.000000
+0|aspect|1|4|251.565048
+0|aspect|2|4|239.036240
+0|aspect|3|4|180.000000
+0|aspect|4|4|135.000000
+0|aspect|5|4|-1.000000
+0|aspect|6|4|225.000000
+0|aspect|7|4|180.000000
+0|aspect|8|4|120.963753
+0|aspect|9|4|108.434952
+0|aspect|1|5|270.000000
+0|aspect|2|5|270.000000
+0|aspect|3|5|-1.000000
+0|aspect|4|5|-1.000000
+0|aspect|5|5|-1.000000
+0|aspect|6|5|-1.000000
+0|aspect|7|5|-1.000000
+0|aspect|8|5|90.000000
+0|aspect|9|5|90.000000
+0|aspect|1|6|288.434937
+0|aspect|2|6|300.963745
+0|aspect|3|6|0.000000
+0|aspect|4|6|45.000000
+0|aspect|5|6|-1.000000
+0|aspect|6|6|315.000000
+0|aspect|7|6|0.000000
+0|aspect|8|6|59.036243
+0|aspect|9|6|71.565048
+0|aspect|1|7|270.000000
+0|aspect|2|7|270.000000
+0|aspect|3|7|-1.000000
+0|aspect|4|7|90.000000
+0|aspect|5|7|-1.000000
+0|aspect|6|7|270.000000
+0|aspect|7|7|-1.000000
+0|aspect|8|7|90.000000
+0|aspect|9|7|90.000000
+0|aspect|1|8|251.565048
+0|aspect|2|8|225.000000
+0|aspect|3|8|180.000000
+0|aspect|4|8|149.036240
+0|aspect|5|8|180.000000
+0|aspect|6|8|210.963760
+0|aspect|7|8|180.000000
+0|aspect|8|8|135.000000
+0|aspect|9|8|108.434952
+0|aspect|1|9|225.000000
+0|aspect|2|9|198.434952
+0|aspect|3|9|180.000000
+0|aspect|4|9|161.565048
+0|aspect|5|9|180.000000
+0|aspect|6|9|198.434952
+0|aspect|7|9|180.000000
+0|aspect|8|9|161.565048
+0|aspect|9|9|135.000000
+1|aspect|1|1|315.000000
+1|aspect|2|1|341.565063
+1|aspect|3|1|0.000000
+1|aspect|1|2|288.434937
+1|aspect|2|2|315.000000
+1|aspect|3|2|0.000000
+1|aspect|1|3|270.000000
+1|aspect|2|3|270.000000
+1|aspect|3|3|-1.000000
+2|aspect|1|1|251.565048
+2|aspect|2|1|239.036240
+2|aspect|3|1|180.000000
+2|aspect|1|2|270.000000
+2|aspect|2|2|270.000000
+2|aspect|3|2|-1.000000
+2|aspect|1|3|288.434937
+2|aspect|2|3|300.963745
+2|aspect|3|3|0.000000
+3|aspect|1|1|270.000000
+3|aspect|2|1|270.000000
+3|aspect|3|1|-1.000000
+3|aspect|1|2|251.565048
+3|aspect|2|2|225.000000
+3|aspect|3|2|180.000000
+3|aspect|1|3|225.000000
+3|aspect|2|3|198.434952
+3|aspect|3|3|180.000000
+4|aspect|1|1|18.434948
+4|aspect|2|1|0.000000
+4|aspect|3|1|341.565063
+4|aspect|1|2|30.963757
+4|aspect|2|2|0.000000
+4|aspect|3|2|329.036255
+4|aspect|1|3|90.000000
+4|aspect|2|3|-1.000000
+4|aspect|3|3|270.000000
+5|aspect|1|1|135.000000
+5|aspect|2|1|-1.000000
+5|aspect|3|1|225.000000
+5|aspect|1|2|-1.000000
+5|aspect|2|2|-1.000000
+5|aspect|3|2|-1.000000
+5|aspect|1|3|45.000000
+5|aspect|2|3|-1.000000
+5|aspect|3|3|315.000000
+6|aspect|1|1|90.000000
+6|aspect|2|1|-1.000000
+6|aspect|3|1|270.000000
+6|aspect|1|2|149.036240
+6|aspect|2|2|180.000000
+6|aspect|3|2|210.963760
+6|aspect|1|3|161.565048
+6|aspect|2|3|180.000000
+6|aspect|3|3|198.434952
+7|aspect|1|1|0.000000
+7|aspect|2|1|18.434948
+7|aspect|3|1|45.000000
+7|aspect|1|2|0.000000
+7|aspect|2|2|45.000000
+7|aspect|3|2|71.565048
+7|aspect|1|3|-1.000000
+7|aspect|2|3|90.000000
+7|aspect|3|3|90.000000
+8|aspect|1|1|180.000000
+8|aspect|2|1|120.963753
+8|aspect|3|1|108.434952
+8|aspect|1|2|-1.000000
+8|aspect|2|2|90.000000
+8|aspect|3|2|90.000000
+8|aspect|1|3|0.000000
+8|aspect|2|3|59.036243
+8|aspect|3|3|71.565048
+9|aspect|1|1|-1.000000
+9|aspect|2|1|90.000000
+9|aspect|3|1|90.000000
+9|aspect|1|2|180.000000
+9|aspect|2|2|135.000000
+9|aspect|3|2|108.434952
+9|aspect|1|3|180.000000
+9|aspect|2|3|161.565048
+9|aspect|3|3|135.000000
+0|hillshade|1|1|
+0|hillshade|2|1|
+0|hillshade|3|1|
+0|hillshade|4|1|
+0|hillshade|5|1|
+0|hillshade|6|1|
+0|hillshade|7|1|
+0|hillshade|8|1|
+0|hillshade|9|1|
+0|hillshade|1|2|
+0|hillshade|2|2|251.327637
+0|hillshade|3|2|220.749786
+0|hillshade|4|2|171.473175
+0|hillshade|5|2|218.295898
+0|hillshade|6|2|248.749847
+0|hillshade|7|2|220.749786
+0|hillshade|8|2|147.224319
+0|hillshade|9|2|
+0|hillshade|1|3|
+0|hillshade|2|3|220.749786
+0|hillshade|3|3|180.312225
+0|hillshade|4|3|104.256424
+0|hillshade|5|3|180.312225
+0|hillshade|6|3|218.295898
+0|hillshade|7|3|180.312225
+0|hillshade|8|3|67.749786
+0|hillshade|9|3|
+0|hillshade|1|4|
+0|hillshade|2|4|171.473175
+0|hillshade|3|4|104.256424
+0|hillshade|4|4|109.895920
+0|hillshade|5|4|180.312225
+0|hillshade|6|4|170.000000
+0|hillshade|7|4|104.256424
+0|hillshade|8|4|42.678726
+0|hillshade|9|4|
+0|hillshade|1|5|
+0|hillshade|2|5|218.295898
+0|hillshade|3|5|180.312225
+0|hillshade|4|5|180.312225
+0|hillshade|5|5|180.312225
+0|hillshade|6|5|180.312225
+0|hillshade|7|5|180.312225
+0|hillshade|8|5|104.256424
+0|hillshade|9|5|
+0|hillshade|1|6|
+0|hillshade|2|6|248.749847
+0|hillshade|3|6|218.295898
+0|hillshade|4|6|170.000000
+0|hillshade|5|6|180.312225
+0|hillshade|6|6|230.104080
+0|hillshade|7|6|218.295898
+0|hillshade|8|6|119.955399
+0|hillshade|9|6|
+0|hillshade|1|7|
+0|hillshade|2|7|220.749786
+0|hillshade|3|7|180.312225
+0|hillshade|4|7|104.256424
+0|hillshade|5|7|180.312225
+0|hillshade|6|7|218.295898
+0|hillshade|7|7|180.312225
+0|hillshade|8|7|67.749786
+0|hillshade|9|7|
+0|hillshade|1|8|
+0|hillshade|2|8|147.224319
+0|hillshade|3|8|67.749786
+0|hillshade|4|8|42.678726
+0|hillshade|5|8|104.256424
+0|hillshade|6|8|119.955399
+0|hillshade|7|8|67.749786
+0|hillshade|8|8|43.121006
+0|hillshade|9|8|
+0|hillshade|1|9|
+0|hillshade|2|9|
+0|hillshade|3|9|
+0|hillshade|4|9|
+0|hillshade|5|9|
+0|hillshade|6|9|
+0|hillshade|7|9|
+0|hillshade|8|9|
+0|hillshade|9|9|
+1|hillshade|1|1|
+1|hillshade|2|1|
+1|hillshade|3|1|
+1|hillshade|1|2|
+1|hillshade|2|2|251.327637
+1|hillshade|3|2|220.749786
+1|hillshade|1|3|
+1|hillshade|2|3|220.749786
+1|hillshade|3|3|180.312225
+2|hillshade|1|1|
+2|hillshade|2|1|171.473175
+2|hillshade|3|1|104.256424
+2|hillshade|1|2|
+2|hillshade|2|2|218.295898
+2|hillshade|3|2|180.312225
+2|hillshade|1|3|
+2|hillshade|2|3|248.749847
+2|hillshade|3|3|218.295898
+3|hillshade|1|1|
+3|hillshade|2|1|220.749786
+3|hillshade|3|1|180.312225
+3|hillshade|1|2|
+3|hillshade|2|2|147.224319
+3|hillshade|3|2|67.749786
+3|hillshade|1|3|
+3|hillshade|2|3|
+3|hillshade|3|3|
+4|hillshade|1|1|
+4|hillshade|2|1|
+4|hillshade|3|1|
+4|hillshade|1|2|171.473175
+4|hillshade|2|2|218.295898
+4|hillshade|3|2|248.749847
+4|hillshade|1|3|104.256424
+4|hillshade|2|3|180.312225
+4|hillshade|3|3|218.295898
+5|hillshade|1|1|109.895920
+5|hillshade|2|1|180.312225
+5|hillshade|3|1|170.000000
+5|hillshade|1|2|180.312225
+5|hillshade|2|2|180.312225
+5|hillshade|3|2|180.312225
+5|hillshade|1|3|170.000000
+5|hillshade|2|3|180.312225
+5|hillshade|3|3|230.104080
+6|hillshade|1|1|104.256424
+6|hillshade|2|1|180.312225
+6|hillshade|3|1|218.295898
+6|hillshade|1|2|42.678726
+6|hillshade|2|2|104.256424
+6|hillshade|3|2|119.955399
+6|hillshade|1|3|
+6|hillshade|2|3|
+6|hillshade|3|3|
+7|hillshade|1|1|
+7|hillshade|2|1|
+7|hillshade|3|1|
+7|hillshade|1|2|220.749786
+7|hillshade|2|2|147.224319
+7|hillshade|3|2|
+7|hillshade|1|3|180.312225
+7|hillshade|2|3|67.749786
+7|hillshade|3|3|
+8|hillshade|1|1|104.256424
+8|hillshade|2|1|42.678726
+8|hillshade|3|1|
+8|hillshade|1|2|180.312225
+8|hillshade|2|2|104.256424
+8|hillshade|3|2|
+8|hillshade|1|3|218.295898
+8|hillshade|2|3|119.955399
+8|hillshade|3|3|
+9|hillshade|1|1|180.312225
+9|hillshade|2|1|67.749786
+9|hillshade|3|1|
+9|hillshade|1|2|67.749786
+9|hillshade|2|2|43.121006
+9|hillshade|3|2|
+9|hillshade|1|3|
+9|hillshade|2|3|
+9|hillshade|3|3|
+0|slope|1|1|10.024988
+0|slope|2|1|21.568129
+0|slope|3|1|26.565052
+0|slope|4|1|21.568129
+0|slope|5|1|14.036243
+0|slope|6|1|21.568129
+0|slope|7|1|26.565052
+0|slope|8|1|21.568129
+0|slope|9|1|10.024988
+0|slope|1|2|21.568129
+0|slope|2|2|35.264389
+0|slope|3|2|36.869896
+0|slope|4|2|36.087147
+0|slope|5|2|26.565052
+0|slope|6|2|36.087147
+0|slope|7|2|36.869896
+0|slope|8|2|35.264389
+0|slope|9|2|21.568129
+0|slope|1|3|26.565052
+0|slope|2|3|36.869896
+0|slope|3|3|0.000000
+0|slope|4|3|26.565052
+0|slope|5|3|0.000000
+0|slope|6|3|26.565052
+0|slope|7|3|0.000000
+0|slope|8|3|36.869896
+0|slope|9|3|26.565052
+0|slope|1|4|21.568129
+0|slope|2|4|36.087147
+0|slope|3|4|26.565052
+0|slope|4|4|19.471220
+0|slope|5|4|0.000000
+0|slope|6|4|19.471220
+0|slope|7|4|26.565052
+0|slope|8|4|36.087147
+0|slope|9|4|21.568129
+0|slope|1|5|14.036243
+0|slope|2|5|26.565052
+0|slope|3|5|0.000000
+0|slope|4|5|0.000000
+0|slope|5|5|0.000000
+0|slope|6|5|0.000000
+0|slope|7|5|0.000000
+0|slope|8|5|26.565052
+0|slope|9|5|14.036243
+0|slope|1|6|21.568129
+0|slope|2|6|36.087147
+0|slope|3|6|26.565052
+0|slope|4|6|19.471220
+0|slope|5|6|0.000000
+0|slope|6|6|19.471220
+0|slope|7|6|26.565052
+0|slope|8|6|36.087147
+0|slope|9|6|21.568129
+0|slope|1|7|26.565052
+0|slope|2|7|36.869896
+0|slope|3|7|0.000000
+0|slope|4|7|26.565052
+0|slope|5|7|0.000000
+0|slope|6|7|26.565052
+0|slope|7|7|0.000000
+0|slope|8|7|36.869896
+0|slope|9|7|26.565052
+0|slope|1|8|21.568129
+0|slope|2|8|35.264389
+0|slope|3|8|36.869896
+0|slope|4|8|36.087147
+0|slope|5|8|26.565052
+0|slope|6|8|36.087147
+0|slope|7|8|36.869896
+0|slope|8|8|35.264389
+0|slope|9|8|21.568129
+0|slope|1|9|10.024988
+0|slope|2|9|21.568129
+0|slope|3|9|26.565052
+0|slope|4|9|21.568129
+0|slope|5|9|14.036243
+0|slope|6|9|21.568129
+0|slope|7|9|26.565052
+0|slope|8|9|21.568129
+0|slope|9|9|10.024988
+1|slope|1|1|10.024988
+1|slope|2|1|21.568129
+1|slope|3|1|26.565052
+1|slope|1|2|21.568129
+1|slope|2|2|35.264389
+1|slope|3|2|36.869896
+1|slope|1|3|26.565052
+1|slope|2|3|36.869896
+1|slope|3|3|0.000000
+2|slope|1|1|21.568129
+2|slope|2|1|36.087147
+2|slope|3|1|26.565052
+2|slope|1|2|14.036243
+2|slope|2|2|26.565052
+2|slope|3|2|0.000000
+2|slope|1|3|21.568129
+2|slope|2|3|36.087147
+2|slope|3|3|26.565052
+3|slope|1|1|26.565052
+3|slope|2|1|36.869896
+3|slope|3|1|0.000000
+3|slope|1|2|21.568129
+3|slope|2|2|35.264389
+3|slope|3|2|36.869896
+3|slope|1|3|10.024988
+3|slope|2|3|21.568129
+3|slope|3|3|26.565052
+4|slope|1|1|21.568129
+4|slope|2|1|14.036243
+4|slope|3|1|21.568129
+4|slope|1|2|36.087147
+4|slope|2|2|26.565052
+4|slope|3|2|36.087147
+4|slope|1|3|26.565052
+4|slope|2|3|0.000000
+4|slope|3|3|26.565052
+5|slope|1|1|19.471220
+5|slope|2|1|0.000000
+5|slope|3|1|19.471220
+5|slope|1|2|0.000000
+5|slope|2|2|0.000000
+5|slope|3|2|0.000000
+5|slope|1|3|19.471220
+5|slope|2|3|0.000000
+5|slope|3|3|19.471220
+6|slope|1|1|26.565052
+6|slope|2|1|0.000000
+6|slope|3|1|26.565052
+6|slope|1|2|36.087147
+6|slope|2|2|26.565052
+6|slope|3|2|36.087147
+6|slope|1|3|21.568129
+6|slope|2|3|14.036243
+6|slope|3|3|21.568129
+7|slope|1|1|26.565052
+7|slope|2|1|21.568129
+7|slope|3|1|10.024988
+7|slope|1|2|36.869896
+7|slope|2|2|35.264389
+7|slope|3|2|21.568129
+7|slope|1|3|0.000000
+7|slope|2|3|36.869896
+7|slope|3|3|26.565052
+8|slope|1|1|26.565052
+8|slope|2|1|36.087147
+8|slope|3|1|21.568129
+8|slope|1|2|0.000000
+8|slope|2|2|26.565052
+8|slope|3|2|14.036243
+8|slope|1|3|26.565052
+8|slope|2|3|36.087147
+8|slope|3|3|21.568129
+9|slope|1|1|0.000000
+9|slope|2|1|36.869896
+9|slope|3|1|26.565052
+9|slope|1|2|36.869896
+9|slope|2|2|35.264389
+9|slope|3|2|21.568129
+9|slope|1|3|26.565052
+9|slope|2|3|21.568129
+9|slope|3|3|10.024988