You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@baremaps.apache.org by bc...@apache.org on 2025/01/06 10:23:15 UTC
(incubator-baremaps) 13/20: Improve the natural layer
This is an automated email from the ASF dual-hosted git repository.
bchapuis pushed a commit to branch basemaps-schema
in repository https://gitbox.apache.org/repos/asf/incubator-baremaps.git
commit 4fa64e1084753400c34302cfc422f51f7ba6128c
Author: Bertil Chapuis <bc...@gmail.com>
AuthorDate: Sun Jan 5 17:13:13 2025 +0100
Improve the natural layer
---
basemap/layers/natural/create.sql | 484 ++++++++++++++++++++++++++++++-------
basemap/layers/natural/refresh.sql | 113 ++++++---
basemap/layers/natural/tileset.js | 17 +-
3 files changed, 471 insertions(+), 143 deletions(-)
diff --git a/basemap/layers/natural/create.sql b/basemap/layers/natural/create.sql
index 90f2e0718..360487c36 100644
--- a/basemap/layers/natural/create.sql
+++ b/basemap/layers/natural/create.sql
@@ -13,149 +13,453 @@
-- See the License for the specific language governing permissions and
-- limitations under the License.
-DROP MATERIALIZED VIEW IF EXISTS osm_natural_filtered CASCADE;
-CREATE MATERIALIZED VIEW IF NOT EXISTS osm_natural_filtered AS
-SELECT tags -> 'natural' AS natural_value,
- st_simplifypreservetopology(geom, 78270 / power(2, 12)) AS geom
-FROM osm_polygon
-WHERE geom IS NOT NULL
- AND st_area(geom) > 78270 / power(2, 12) * 100
- AND tags ->> 'natural' IN
- ('grassland', 'heath', 'scrub', 'wood', 'bay', 'beach', 'glacier', 'mud', 'shingle', 'shoal', 'strait', 'water',
- 'wetland', 'bare_rock', 'sand', 'scree')
-WITH NO DATA;
+-- Zoom levels 20 to 13
-DROP MATERIALIZED VIEW IF EXISTS osm_natural_clustered CASCADE;
-CREATE MATERIALIZED VIEW IF NOT EXISTS osm_natural_clustered AS
-SELECT natural_value,
- geom,
- st_clusterdbscan(geom, 0, 0) OVER (PARTITION BY natural_value) AS cluster
-FROM osm_natural_filtered
-WHERE geom IS NOT NULL
-WITH NO DATA;
-
-DROP MATERIALIZED VIEW IF EXISTS osm_natural CASCADE;
-CREATE MATERIALIZED VIEW IF NOT EXISTS osm_natural AS
-WITH grouped AS (SELECT natural_value,
- ST_Collect(geom) AS geom
- FROM osm_natural_clustered
- GROUP BY natural_value, cluster),
- buffered AS (SELECT natural_value,
- ST_Buffer(geom, 0, 'join=mitre') AS geom
- FROM grouped),
- exploded AS (SELECT natural_value,
- (ST_Dump(geom)).geom AS geom
- FROM buffered)
-SELECT ROW_NUMBER() OVER () AS id,
- JSONB_BUILD_OBJECT('natural', natural_value) AS tags,
- geom
-FROM exploded
-WITH NO DATA;
+CREATE OR REPLACE VIEW osm_natural AS
+SELECT id, tags, geom
+FROM osm_way
+WHERE tags ? 'natural'
+UNION
+SELECT id, tags, geom
+FROM osm_relation
+WHERE tags ? 'natural';
CREATE OR REPLACE VIEW osm_natural_z20 AS
-SELECT id, tags, geom FROM osm_natural;
+SELECT id, tags, geom
+FROM osm_natural;
CREATE OR REPLACE VIEW osm_natural_z19 AS
-SELECT id, tags, geom FROM osm_natural;
+SELECT id, tags, geom
+FROM osm_natural;
CREATE OR REPLACE VIEW osm_natural_z18 AS
-SELECT id, tags, geom FROM osm_natural;
+SELECT id, tags, geom
+FROM osm_natural;
CREATE OR REPLACE VIEW osm_natural_z17 AS
-SELECT id, tags, geom FROM osm_natural;
+SELECT id, tags, geom
+FROM osm_natural;
CREATE OR REPLACE VIEW osm_natural_z16 AS
-SELECT id, tags, geom FROM osm_natural;
+SELECT id, tags, geom
+FROM osm_natural;
CREATE OR REPLACE VIEW osm_natural_z15 AS
-SELECT id, tags, geom FROM osm_natural;
+SELECT id, tags, geom
+FROM osm_natural;
CREATE OR REPLACE VIEW osm_natural_z14 AS
-SELECT id, tags, geom FROM osm_natural;
+SELECT id, tags, geom
+FROM osm_natural;
CREATE OR REPLACE VIEW osm_natural_z13 AS
-SELECT id, tags, geom FROM osm_natural;
+SELECT id, tags, geom
+FROM osm_natural;
-DROP MATERIALIZED VIEW IF EXISTS osm_natural_z12;
-CREATE MATERIALIZED VIEW IF NOT EXISTS osm_natural_z12 AS
-SELECT id, tags, st_simplifypreservetopology(geom, 78270 / power(2, 12)) AS geom
+-- Zoom level 12
+
+DROP MATERIALIZED VIEW IF EXISTS osm_natural_z12_filtered CASCADE;
+CREATE MATERIALIZED VIEW IF NOT EXISTS osm_natural_z12_filtered AS
+SELECT tags -> 'natural' AS tag,
+ st_buffer(
+ st_simplifypreservetopology(
+ geom,
+ 78270 / power(2, 12)
+ ),
+ 78270 / power(2, 12) * 1.1,
+ 'join=mitre'
+ ) AS geom
FROM osm_natural
-WHERE st_area(st_envelope(geom)) > 10 * power(78270 / power(2, 12), 2)
+WHERE geom IS NOT NULL
+ AND NOT ST_IsEmpty(geom)
+ AND st_area(geom) > power(78270 / power(2, 12), 2) * 32
+ AND tags ->> 'natural' IN
+ ('grassland', 'heath', 'scrub', 'wood', 'bay', 'beach', 'glacier', 'mud', 'shingle', 'shoal', 'strait', 'water',
+ 'wetland', 'bare_rock', 'sand', 'scree')
WITH NO DATA;
-DROP MATERIALIZED VIEW IF EXISTS osm_natural_z11;
+DROP MATERIALIZED VIEW IF EXISTS osm_natural_z12 CASCADE;
+CREATE MATERIALIZED VIEW IF NOT EXISTS osm_natural_z12 AS
+WITH clustered AS (SELECT tag,
+ geom,
+ st_clusterdbscan(geom, 0, 0) OVER (PARTITION BY tag) AS cluster
+ FROM osm_natural_z12_filtered)
+SELECT row_number() OVER () AS id,
+ jsonb_build_object('natural', tag) AS tags,
+ st_simplifypreservetopology(
+ (st_dump(
+ st_buffer(
+ st_collect(geom),
+ -78270 / power(2, 12),
+ 'join=mitre'
+ )
+ )).geom,
+ 78270 / power(2, 12)
+ ) AS geom
+FROM clustered
+WHERE geom IS NOT NULL
+ AND NOT ST_IsEmpty(geom)
+ AND st_area(geom) > power(78270 / power(2, 12), 2) * 32
+GROUP BY tag, cluster
+WITH NO DATA;
+
+-- Zoom level 11
+
+DROP MATERIALIZED VIEW IF EXISTS osm_natural_z11_filtered CASCADE;
+CREATE MATERIALIZED VIEW IF NOT EXISTS osm_natural_z11_filtered AS
+SELECT tags -> 'natural' AS tag,
+ st_buffer(
+ st_simplifypreservetopology(
+ geom,
+ 78270 / power(2, 11)
+ ),
+ 78270 / power(2, 11) * 1.1,
+ 'join=mitre'
+ ) AS geom
+FROM osm_natural_z12
+WHERE geom IS NOT NULL
+ AND NOT ST_IsEmpty(geom)
+ AND st_area(geom) > power(78270 / power(2, 11), 2) * 32
+WITH NO DATA;
+
+DROP MATERIALIZED VIEW IF EXISTS osm_natural_z11 CASCADE;
CREATE MATERIALIZED VIEW IF NOT EXISTS osm_natural_z11 AS
-SELECT id, tags, st_simplifypreservetopology(geom, 78270 / power(2, 11)) AS geom
-FROM osm_natural
-WHERE st_area(st_envelope(geom)) > 10 * power(78270 / power(2, 11), 2)
+WITH clustered AS (SELECT tag,
+ geom,
+ st_clusterdbscan(geom, 0, 0) OVER (PARTITION BY tag) AS cluster
+ FROM osm_natural_z11_filtered)
+SELECT row_number() OVER () AS id,
+ jsonb_build_object('natural', tag) AS tags,
+ st_simplifypreservetopology(
+ (st_dump(
+ st_buffer(
+ st_collect(geom),
+ -78270 / power(2, 11),
+ 'join=mitre'
+ )
+ )).geom,
+ 78270 / power(2, 11)
+ ) AS geom
+FROM clustered
+WHERE geom IS NOT NULL
+ AND NOT ST_IsEmpty(geom)
+ AND st_area(geom) > power(78270 / power(2, 11), 2) * 32
+GROUP BY tag, cluster
+WITH NO DATA;
+
+-- Zoom level 10
+
+DROP MATERIALIZED VIEW IF EXISTS osm_natural_z10_filtered CASCADE;
+CREATE MATERIALIZED VIEW IF NOT EXISTS osm_natural_z10_filtered AS
+SELECT tags -> 'natural' AS tag,
+ st_buffer(
+ st_simplifypreservetopology(
+ geom,
+ 78270 / power(2, 10)
+ ),
+ 78270 / power(2, 10) * 1.1,
+ 'join=mitre'
+ ) AS geom
+FROM osm_natural_z11
+WHERE geom IS NOT NULL
+ AND NOT ST_IsEmpty(geom)
+ AND st_area(geom) > power(78270 / power(2, 10), 2) * 32
WITH NO DATA;
-DROP MATERIALIZED VIEW IF EXISTS osm_natural_z10;
+DROP MATERIALIZED VIEW IF EXISTS osm_natural_z10 CASCADE;
CREATE MATERIALIZED VIEW IF NOT EXISTS osm_natural_z10 AS
-SELECT id, tags, st_simplifypreservetopology(geom, 78270 / power(2, 10)) AS geom
-FROM osm_natural
-WHERE st_area(st_envelope(geom)) > 10 * power(78270 / power(2, 10), 2)
+WITH clustered AS (SELECT tag,
+ geom,
+ st_clusterdbscan(geom, 0, 0) OVER (PARTITION BY tag) AS cluster
+ FROM osm_natural_z10_filtered)
+SELECT row_number() OVER () AS id,
+ jsonb_build_object('natural', tag) AS tags,
+ st_simplifypreservetopology(
+ (st_dump(
+ st_buffer(
+ st_collect(geom),
+ -78270 / power(2, 10),
+ 'join=mitre'
+ )
+ )).geom,
+ 78270 / power(2, 10)
+ ) AS geom
+FROM clustered
+WHERE geom IS NOT NULL
+ AND NOT ST_IsEmpty(geom)
+ AND st_area(geom) > power(78270 / power(2, 10), 2) * 32
+GROUP BY tag, cluster
WITH NO DATA;
-DROP MATERIALIZED VIEW IF EXISTS osm_natural_z9;
+-- Zoom level 9
+
+DROP MATERIALIZED VIEW IF EXISTS osm_natural_z9 CASCADE;
CREATE MATERIALIZED VIEW IF NOT EXISTS osm_natural_z9 AS
-SELECT id, tags, st_simplifypreservetopology(geom, 78270 / power(2, 9)) AS geom
-FROM osm_natural
-WHERE st_area(st_envelope(geom)) > 10 * power(78270 / power(2, 9), 2)
+WITH filtered AS (SELECT tags -> 'natural' AS tag,
+ st_buffer(
+ st_simplifypreservetopology(
+ geom,
+ 78270 / power(2, 9)
+ ),
+ 78270 / power(2, 9) * 1.1,
+ 'join=mitre'
+ ) AS geom
+ FROM osm_natural_z10
+ WHERE geom IS NOT NULL
+ AND NOT ST_IsEmpty(geom)
+ AND st_area(geom) > power(78270 / power(2, 9), 2) * 32),
+ clustered AS (SELECT tag,
+ geom,
+ st_clusterdbscan(geom, 0, 0) OVER (PARTITION BY tag) AS cluster
+ FROM filtered)
+SELECT row_number() OVER () AS id,
+ jsonb_build_object('natural', tag) AS tags,
+ st_simplifypreservetopology(
+ (st_dump(
+ st_buffer(
+ st_collect(geom),
+ -78270 / power(2, 9),
+ 'join=mitre'
+ )
+ )).geom,
+ 78270 / power(2, 9)
+ ) AS geom
+FROM clustered
+WHERE geom IS NOT NULL
+ AND NOT ST_IsEmpty(geom)
+ AND st_area(geom) > power(78270 / power(2, 9), 2) * 32
+GROUP BY tag, cluster
WITH NO DATA;
-DROP MATERIALIZED VIEW IF EXISTS osm_natural_z8;
+-- Zoom level 8
+
+DROP MATERIALIZED VIEW IF EXISTS osm_natural_z8 CASCADE;
CREATE MATERIALIZED VIEW IF NOT EXISTS osm_natural_z8 AS
-SELECT id, tags, st_simplifypreservetopology(geom, 78270 / power(2, 8)) AS geom
-FROM osm_natural
-WHERE st_area(st_envelope(geom)) > 10 * power(78270 / power(2, 8), 2)
+WITH filtered AS (SELECT tags -> 'natural' AS tag,
+ st_buffer(
+ st_simplifypreservetopology(
+ geom,
+ 78270 / power(2, 8)
+ ),
+ 78270 / power(2, 8) * 1.1,
+ 'join=mitre'
+ ) AS geom
+ FROM osm_natural_z9
+ WHERE geom IS NOT NULL
+ AND NOT ST_IsEmpty(geom)
+ AND st_area(geom) > power(78270 / power(2, 8), 2) * 32),
+ clustered AS (SELECT tag,
+ geom,
+ st_clusterdbscan(geom, 0, 0) OVER (PARTITION BY tag) AS cluster
+ FROM filtered)
+SELECT row_number() OVER () AS id,
+ jsonb_build_object('natural', tag) AS tags,
+ st_simplifypreservetopology(
+ (st_dump(
+ st_buffer(
+ st_collect(geom),
+ -78270 / power(2, 8),
+ 'join=mitre'
+ )
+ )).geom,
+ 78270 / power(2, 8)
+ ) AS geom
+FROM clustered
+WHERE geom IS NOT NULL
+ AND NOT ST_IsEmpty(geom)
+ AND st_area(geom) > power(78270 / power(2, 8), 2) * 32
+GROUP BY tag, cluster
WITH NO DATA;
-DROP MATERIALIZED VIEW IF EXISTS osm_natural_z7;
+-- Zoom level 7
+
+DROP MATERIALIZED VIEW IF EXISTS osm_natural_z7 CASCADE;
CREATE MATERIALIZED VIEW IF NOT EXISTS osm_natural_z7 AS
-SELECT id, tags, st_simplifypreservetopology(geom, 78270 / power(2, 7)) AS geom
-FROM osm_natural
-WHERE st_area(st_envelope(geom)) > 10 * power(78270 / power(2, 7), 2)
+WITH filtered AS (SELECT tags -> 'natural' AS tag,
+ st_buffer(
+ st_simplifypreservetopology(
+ geom,
+ 78270 / power(2, 7)
+ ),
+ 78270 / power(2, 7) * 1.1,
+ 'join=mitre'
+ ) AS geom
+ FROM osm_natural_z8
+ WHERE geom IS NOT NULL
+ AND NOT ST_IsEmpty(geom)
+ AND st_area(geom) > power(78270 / power(2, 7), 2) * 32),
+ clustered AS (SELECT tag,
+ geom,
+ st_clusterdbscan(geom, 0, 0) OVER (PARTITION BY tag) AS cluster
+ FROM filtered)
+SELECT row_number() OVER () AS id,
+ jsonb_build_object('natural', tag) AS tags,
+ st_simplifypreservetopology(
+ (st_dump(
+ st_buffer(
+ st_collect(geom),
+ -78270 / power(2, 7),
+ 'join=mitre'
+ )
+ )).geom,
+ 78270 / power(2, 7)
+ ) AS geom
+FROM clustered
+WHERE geom IS NOT NULL
+ AND NOT ST_IsEmpty(geom)
+ AND st_area(geom) > power(78270 / power(2, 7), 2) * 32
+GROUP BY tag, cluster
WITH NO DATA;
-DROP MATERIALIZED VIEW IF EXISTS osm_natural_z6;
+-- Zoom level 6
+
+DROP MATERIALIZED VIEW IF EXISTS osm_natural_z6 CASCADE;
CREATE MATERIALIZED VIEW IF NOT EXISTS osm_natural_z6 AS
-SELECT id, tags, st_simplifypreservetopology(geom, 78270 / power(2, 6)) AS geom
-FROM osm_natural
-WHERE st_area(st_envelope(geom)) > 10 * power(78270 / power(2, 6), 2)
+WITH filtered AS (SELECT tags -> 'natural' AS tag,
+ st_buffer(
+ st_simplifypreservetopology(
+ geom,
+ 78270 / power(2, 6)
+ ),
+ 78270 / power(2, 6) * 1.1,
+ 'join=mitre'
+ ) AS geom
+ FROM osm_natural_z7
+ WHERE geom IS NOT NULL
+ AND NOT ST_IsEmpty(geom)
+ AND st_area(geom) > power(78270 / power(2, 6), 2) * 32),
+ clustered AS (SELECT tag,
+ geom,
+ st_clusterdbscan(geom, 0, 0) OVER (PARTITION BY tag) AS cluster
+ FROM filtered)
+SELECT row_number() OVER () AS id,
+ jsonb_build_object('natural', tag) AS tags,
+ st_simplifypreservetopology(
+ (st_dump(
+ st_buffer(
+ st_collect(geom),
+ -78270 / power(2, 6),
+ 'join=mitre'
+ )
+ )).geom,
+ 78270 / power(2, 6)
+ ) AS geom
+FROM clustered
+WHERE geom IS NOT NULL
+ AND NOT ST_IsEmpty(geom)
+ AND st_area(geom) > power(78270 / power(2, 6), 2) * 32
+GROUP BY tag, cluster
WITH NO DATA;
-DROP MATERIALIZED VIEW IF EXISTS osm_natural_z5;
+-- Zoom level 5
+
+DROP MATERIALIZED VIEW IF EXISTS osm_natural_z5 CASCADE;
CREATE MATERIALIZED VIEW IF NOT EXISTS osm_natural_z5 AS
-SELECT id, tags, st_simplifypreservetopology(geom, 78270 / power(2, 5)) AS geom
-FROM osm_natural
-WHERE st_area(st_envelope(geom)) > 10 * power(78270 / power(2, 5), 2)
+WITH filtered AS (SELECT tags -> 'natural' AS tag,
+ st_buffer(
+ st_simplifypreservetopology(
+ geom,
+ 78270 / power(2, 5)
+ ),
+ 78270 / power(2, 5) * 1.1,
+ 'join=mitre'
+ ) AS geom
+ FROM osm_natural_z6
+ WHERE geom IS NOT NULL
+ AND NOT ST_IsEmpty(geom)
+ AND st_area(geom) > power(78270 / power(2, 5), 2) * 32),
+ clustered AS (SELECT tag,
+ geom,
+ st_clusterdbscan(geom, 0, 0) OVER (PARTITION BY tag) AS cluster
+ FROM filtered)
+SELECT row_number() OVER () AS id,
+ jsonb_build_object('natural', tag) AS tags,
+ st_simplifypreservetopology(
+ (st_dump(
+ st_buffer(
+ st_collect(geom),
+ -78270 / power(2, 5),
+ 'join=mitre'
+ )
+ )).geom,
+ 78270 / power(2, 5)
+ ) AS geom
+FROM clustered
+WHERE geom IS NOT NULL
+ AND NOT ST_IsEmpty(geom)
+ AND st_area(geom) > power(78270 / power(2, 5), 2) * 32
+GROUP BY tag, cluster
WITH NO DATA;
-DROP MATERIALIZED VIEW IF EXISTS osm_natural_z4;
+-- Zoom level 4
+
+DROP MATERIALIZED VIEW IF EXISTS osm_natural_z4 CASCADE;
CREATE MATERIALIZED VIEW IF NOT EXISTS osm_natural_z4 AS
-SELECT id, tags, st_simplifypreservetopology(geom, 78270 / power(2, 4)) AS geom
-FROM osm_natural
-WHERE st_area(st_envelope(geom)) > 10 * power(78270 / power(2, 4), 2)
+WITH filtered AS (SELECT tags -> 'natural' AS tag,
+ st_buffer(
+ st_simplifypreservetopology(
+ geom,
+ 78270 / power(2, 4)
+ ),
+ 78270 / power(2, 4) * 1.1,
+ 'join=mitre'
+ ) AS geom
+ FROM osm_natural_z6
+ WHERE geom IS NOT NULL
+ AND NOT ST_IsEmpty(geom)
+ AND st_area(geom) > power(78270 / power(2, 4), 2) * 32),
+ clustered AS (SELECT tag,
+ geom,
+ st_clusterdbscan(geom, 0, 0) OVER (PARTITION BY tag) AS cluster
+ FROM filtered)
+SELECT row_number() OVER () AS id,
+ jsonb_build_object('natural', tag) AS tags,
+ st_simplifypreservetopology(
+ (st_dump(
+ st_buffer(
+ st_collect(geom),
+ -78270 / power(2, 4),
+ 'join=mitre'
+ )
+ )).geom,
+ 78270 / power(2, 4)
+ ) AS geom
+FROM clustered
+WHERE geom IS NOT NULL
+ AND NOT ST_IsEmpty(geom)
+ AND st_area(geom) > power(78270 / power(2, 4), 2) * 32
+GROUP BY tag, cluster
WITH NO DATA;
-DROP MATERIALIZED VIEW IF EXISTS osm_natural_z3;
+-- Zoom level 3
+
+DROP MATERIALIZED VIEW IF EXISTS osm_natural_z3 CASCADE;
CREATE MATERIALIZED VIEW IF NOT EXISTS osm_natural_z3 AS
SELECT id, tags, st_simplifypreservetopology(geom, 78270 / power(2, 3)) AS geom
-FROM osm_natural
-WHERE st_area(st_envelope(geom)) > 25 * power(78270 / power(2, 3), 2)
+FROM osm_natural_z4
+WHERE geom IS NOT NULL
+ AND NOT ST_IsEmpty(geom)
+ AND st_area(geom) > power(78270 / power(2, 3), 2) * 16
WITH NO DATA;
-DROP MATERIALIZED VIEW IF EXISTS osm_natural_z2;
+-- Zoom level 2
+
+DROP MATERIALIZED VIEW IF EXISTS osm_natural_z2 CASCADE;
CREATE MATERIALIZED VIEW IF NOT EXISTS osm_natural_z2 AS
SELECT id, tags, st_simplifypreservetopology(geom, 78270 / power(2, 2)) AS geom
-FROM osm_natural
-WHERE st_area(st_envelope(geom)) > 25 * power(78270 / power(2, 2), 2)
+FROM osm_natural_z4
+WHERE geom IS NOT NULL
+ AND NOT ST_IsEmpty(geom)
+ AND st_area(geom) > power(78270 / power(2, 2), 2) * 16
WITH NO DATA;
-DROP MATERIALIZED VIEW IF EXISTS osm_natural_z1;
+-- Zoom level 1
+
+DROP MATERIALIZED VIEW IF EXISTS osm_natural_z1 CASCADE;
CREATE MATERIALIZED VIEW IF NOT EXISTS osm_natural_z1 AS
SELECT id, tags, st_simplifypreservetopology(geom, 78270 / power(2, 1)) AS geom
-FROM osm_natural
-WHERE st_area(st_envelope(geom)) > 25 * power(78270 / power(2, 1), 2)
+FROM osm_natural_z4
+WHERE geom IS NOT NULL
+ AND NOT ST_IsEmpty(geom)
+ AND st_area(geom) > power(78270 / power(2, 1), 2) * 16
WITH NO DATA;
diff --git a/basemap/layers/natural/refresh.sql b/basemap/layers/natural/refresh.sql
index 05bc09bac..d470a3202 100644
--- a/basemap/layers/natural/refresh.sql
+++ b/basemap/layers/natural/refresh.sql
@@ -13,77 +13,116 @@
-- See the License for the specific language governing permissions and
-- limitations under the License.
-DROP INDEX IF EXISTS osm_natural_filtered_geom_idx;
-REFRESH MATERIALIZED VIEW osm_natural_filtered;
-CREATE INDEX IF NOT EXISTS osm_natural_filtered_geom_idx
- ON osm_natural_filtered USING GIST (geom);
+-- Zoom level 12
-DROP INDEX IF EXISTS osm_natural_clustered_geom_idx;
-REFRESH MATERIALIZED VIEW osm_natural_clustered;
-CREATE INDEX IF NOT EXISTS osm_natural_clustered_geom_idx
- ON osm_natural_clustered USING GIST (geom);
-
-DROP INDEX IF EXISTS osm_natural_geom_idx;
-REFRESH MATERIALIZED VIEW osm_natural;
-CREATE INDEX IF NOT EXISTS osm_natural_geom_idx
- ON osm_natural USING GIST (geom);
+DROP INDEX IF EXISTS osm_natural_z12_filtered_geom_idx;
+DROP INDEX IF EXISTS osm_natural_z12_filtered_tags_idx;
+REFRESH MATERIALIZED VIEW osm_natural_z12_filtered;
+CREATE INDEX IF NOT EXISTS osm_natural_z12_filtered_geom_idx ON osm_natural_z12_filtered USING GIST (geom);
+CREATE INDEX IF NOT EXISTS osm_natural_z12_filtered_tags_idx ON osm_natural_z12_filtered (tag);
DROP INDEX IF EXISTS osm_natural_z12_geom_idx;
+DROP INDEX IF EXISTS osm_natural_z12_tags_idx;
REFRESH MATERIALIZED VIEW osm_natural_z12;
-CREATE INDEX IF NOT EXISTS osm_natural_z12_geom_idx
- ON osm_natural_z12 USING GIST (geom);
+CREATE INDEX IF NOT EXISTS osm_natural_z12_geom_idx ON osm_natural_z12 USING GIST (geom);
+CREATE INDEX IF NOT EXISTS osm_natural_z12_tags_idx ON osm_natural_z12 USING GIN (tags);
+
+-- Zoom level 11
+
+DROP INDEX IF EXISTS osm_natural_z11_filtered_geom_idx;
+DROP INDEX IF EXISTS osm_natural_z11_filtered_tags_idx;
+REFRESH MATERIALIZED VIEW osm_natural_z11_filtered;
+CREATE INDEX IF NOT EXISTS osm_natural_z11_filtered_geom_idx ON osm_natural_z11_filtered USING GIST (geom);
+CREATE INDEX IF NOT EXISTS osm_natural_z11_filtered_tags_idx ON osm_natural_z11_filtered (tag);
DROP INDEX IF EXISTS osm_natural_z11_geom_idx;
+DROP INDEX IF EXISTS osm_natural_z11_tags_idx;
REFRESH MATERIALIZED VIEW osm_natural_z11;
-CREATE INDEX IF NOT EXISTS osm_natural_z11_geom_idx
- ON osm_natural_z11 USING GIST (geom);
+CREATE INDEX IF NOT EXISTS osm_natural_z11_geom_idx ON osm_natural_z11 USING GIST (geom);
+CREATE INDEX IF NOT EXISTS osm_natural_z11_tags_idx ON osm_natural_z11 USING GIN (tags);
+
+-- Zoom level 10
+
+DROP INDEX IF EXISTS osm_natural_z10_filtered_geom_idx;
+DROP INDEX IF EXISTS osm_natural_z10_filtered_tags_idx;
+REFRESH MATERIALIZED VIEW osm_natural_z10_filtered;
+CREATE INDEX IF NOT EXISTS osm_natural_z10_filtered_geom_idx ON osm_natural_z10_filtered USING GIST (geom);
+CREATE INDEX IF NOT EXISTS osm_natural_z10_filtered_tags_idx ON osm_natural_z10_filtered (tag);
DROP INDEX IF EXISTS osm_natural_z10_geom_idx;
+DROP INDEX IF EXISTS osm_natural_z10_tags_idx;
REFRESH MATERIALIZED VIEW osm_natural_z10;
-CREATE INDEX IF NOT EXISTS osm_natural_z10_geom_idx
- ON osm_natural_z10 USING GIST (geom);
+CREATE INDEX IF NOT EXISTS osm_natural_z10_geom_idx ON osm_natural_z10 USING GIST (geom);
+CREATE INDEX IF NOT EXISTS osm_natural_z10_tags_idx ON osm_natural_z10 USING GIN (tags);
+
+-- Zoom level 9
DROP INDEX IF EXISTS osm_natural_z9_geom_idx;
+DROP INDEX IF EXISTS osm_natural_z9_tags_idx;
REFRESH MATERIALIZED VIEW osm_natural_z9;
-CREATE INDEX IF NOT EXISTS osm_natural_z9_geom_idx
- ON osm_natural_z9 USING GIST (geom);
+CREATE INDEX IF NOT EXISTS osm_natural_z9_geom_idx ON osm_natural_z9 USING GIST (geom);
+CREATE INDEX IF NOT EXISTS osm_natural_z9_tags_idx ON osm_natural_z9 USING GIN (tags);
+
+-- Zoom level 8
DROP INDEX IF EXISTS osm_natural_z8_geom_idx;
+DROP INDEX IF EXISTS osm_natural_z8_tags_idx;
REFRESH MATERIALIZED VIEW osm_natural_z8;
-CREATE INDEX IF NOT EXISTS osm_natural_z8_geom_idx
- ON osm_natural_z8 USING GIST (geom);
+CREATE INDEX IF NOT EXISTS osm_natural_z8_geom_idx ON osm_natural_z8 USING GIST (geom);
+CREATE INDEX IF NOT EXISTS osm_natural_z8_tags_idx ON osm_natural_z8 USING GIN (tags);
+
+-- Zoom level 7
DROP INDEX IF EXISTS osm_natural_z7_geom_idx;
+DROP INDEX IF EXISTS osm_natural_z7_tags_idx;
REFRESH MATERIALIZED VIEW osm_natural_z7;
-CREATE INDEX IF NOT EXISTS osm_natural_z7_geom_idx
- ON osm_natural_z7 USING GIST (geom);
+CREATE INDEX IF NOT EXISTS osm_natural_z7_geom_idx ON osm_natural_z7 USING GIST (geom);
+CREATE INDEX IF NOT EXISTS osm_natural_z7_tags_idx ON osm_natural_z7 USING GIN (tags);
+
+-- Zoom level 6
DROP INDEX IF EXISTS osm_natural_z6_geom_idx;
+DROP INDEX IF EXISTS osm_natural_z6_tags_idx;
REFRESH MATERIALIZED VIEW osm_natural_z6;
-CREATE INDEX IF NOT EXISTS osm_natural_z6_geom_idx
- ON osm_natural_z6 USING GIST (geom);
+CREATE INDEX IF NOT EXISTS osm_natural_z6_geom_idx ON osm_natural_z6 USING GIST (geom);
+CREATE INDEX IF NOT EXISTS osm_natural_z6_tags_idx ON osm_natural_z6 USING GIN (tags);
+
+-- Zoom level 5
DROP INDEX IF EXISTS osm_natural_z5_geom_idx;
+DROP INDEX IF EXISTS osm_natural_z5_tags_idx;
REFRESH MATERIALIZED VIEW osm_natural_z5;
-CREATE INDEX IF NOT EXISTS osm_natural_z5_geom_idx
- ON osm_natural_z5 USING GIST (geom);
+CREATE INDEX IF NOT EXISTS osm_natural_z5_geom_idx ON osm_natural_z5 USING GIST (geom);
+CREATE INDEX IF NOT EXISTS osm_natural_z5_tags_idx ON osm_natural_z5 USING GIN (tags);
+
+-- Zoom level 4
DROP INDEX IF EXISTS osm_natural_z4_geom_idx;
+DROP INDEX IF EXISTS osm_natural_z4_tags_idx;
REFRESH MATERIALIZED VIEW osm_natural_z4;
-CREATE INDEX IF NOT EXISTS osm_natural_z4_geom_idx
- ON osm_natural_z4 USING GIST (geom);
+CREATE INDEX IF NOT EXISTS osm_natural_z4_geom_idx ON osm_natural_z4 USING GIST (geom);
+CREATE INDEX IF NOT EXISTS osm_natural_z4_tags_idx ON osm_natural_z4 USING GIN (tags);
+
+-- Zoom level 3
DROP INDEX IF EXISTS osm_natural_z3_geom_idx;
+DROP INDEX IF EXISTS osm_natural_z3_tags_idx;
REFRESH MATERIALIZED VIEW osm_natural_z3;
-CREATE INDEX IF NOT EXISTS osm_natural_z3_geom_idx
- ON osm_natural_z3 USING GIST (geom);
+CREATE INDEX IF NOT EXISTS osm_natural_z3_geom_idx ON osm_natural_z3 USING GIST (geom);
+CREATE INDEX IF NOT EXISTS osm_natural_z3_tags_idx ON osm_natural_z3 USING GIN (tags);
+
+-- Zoom level 2
DROP INDEX IF EXISTS osm_natural_z2_geom_idx;
+DROP INDEX IF EXISTS osm_natural_z2_tags_idx;
REFRESH MATERIALIZED VIEW osm_natural_z2;
-CREATE INDEX IF NOT EXISTS osm_natural_z2_geom_idx
- ON osm_natural_z2 USING GIST (geom);
+CREATE INDEX IF NOT EXISTS osm_natural_z2_geom_idx ON osm_natural_z2 USING GIST (geom);
+CREATE INDEX IF NOT EXISTS osm_natural_z2_tags_idx ON osm_natural_z2 USING GIN (tags);
+
+-- Zoom level 1
DROP INDEX IF EXISTS osm_natural_z1_geom_idx;
+DROP INDEX IF EXISTS osm_natural_z1_tags_idx;
REFRESH MATERIALIZED VIEW osm_natural_z1;
-CREATE INDEX IF NOT EXISTS osm_natural_z1_geom_idx
- ON osm_natural_z1 USING GIST (geom);
\ No newline at end of file
+CREATE INDEX IF NOT EXISTS osm_natural_z1_geom_idx ON osm_natural_z1 USING GIST (geom);
+CREATE INDEX IF NOT EXISTS osm_natural_z1_tags_idx ON osm_natural_z1 USING GIN (tags);
diff --git a/basemap/layers/natural/tileset.js b/basemap/layers/natural/tileset.js
index 2d2f6fce7..2e335d192 100644
--- a/basemap/layers/natural/tileset.js
+++ b/basemap/layers/natural/tileset.js
@@ -19,23 +19,8 @@ export default {
"queries": [
{
"minzoom": 1,
- "maxzoom": 8,
- "sql": "SELECT id, tags, geom FROM osm_natural_z$zoom WHERE tags ->> 'natural' IN ('wood', 'scrub', 'heath', 'grassland', 'bare_rock', 'scree', 'shingle', 'sand', 'mud', 'water', 'wetland', 'glacier', 'beach')"
- },
- {
- "minzoom": 8,
- "maxzoom": 13,
- "sql": "SELECT id, tags, geom FROM osm_natural_z$zoom WHERE tags ->> 'natural' IN ('wood', 'scrub', 'heath', 'grassland', 'bare_rock', 'scree', 'shingle', 'sand', 'mud', 'water', 'wetland', 'glacier', 'beach')"
- },
- {
- "minzoom": 13,
"maxzoom": 20,
- "sql": "SELECT id, tags, geom FROM osm_way WHERE tags ? 'natural' AND tags ->> 'natural' NOT IN ('coastline')"
+ "sql": "SELECT id, tags, geom FROM osm_natural_z$zoom"
},
- {
- "minzoom": 13,
- "maxzoom": 20,
- "sql": "SELECT id, tags, geom FROM osm_relation WHERE tags ? 'natural' AND tags ->> 'natural' NOT IN ('coastline')"
- }
]
}