Add countries based on Natural Earth tiles

pull/24/head
lukasmartinelli 2016-10-08 17:28:40 +02:00
rodzic bed74283df
commit 0d38b8b3db
2 zmienionych plików z 71 dodań i 0 usunięć

Wyświetl plik

@ -170,6 +170,31 @@ Layer:
properties:
"buffer-size": 64
srs: +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over
- id: country
Datasource:
dbname: osm
extent: -20037508.34,-20037508.34,20037508.34,20037508.34
geometry_field: geom
geometry_table: ''
host: db
key_field: ''
key_field_as_attribute: ''
max_size: 512
password: osm
port: 5432
srid: 900913
table: (SELECT * FROM layer_country(!bbox!, z(!scale_denominator!))) AS t
type: postgis
user: osm
description: Buildings
fields:
abbrev: String
labelrank: Number
name: String
scalerank: Number
properties:
"buffer-size": 64
srs: +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over
maxzoom: 14
minzoom: 0
name: OSM2VectorTiles v3.0

Wyświetl plik

@ -0,0 +1,46 @@
CREATE TABLE IF NOT EXISTS country_label AS (
SELECT topoint(geom) AS geom,
name,
adm0_a3, abbrev, postal,
scalerank, labelrank,
CASE WHEN tiny < 0 THEN 0 ELSE 1 END AS is_tiny
FROM ne_10m_admin_0_countries
WHERE scalerank <= 1
);
CREATE INDEX IF NOT EXISTS country_label_geom_idx ON country_label USING gist(geom);
CREATE OR REPLACE VIEW country_z1 AS (
SELECT * FROM country_label WHERE scalerank = 0 AND is_tiny = 0 AND labelrank <= 2
);
CREATE OR REPLACE VIEW country_z2 AS (
SELECT * FROM country_label WHERE scalerank = 0 AND is_tiny = 0 AND labelrank <= 3
);
CREATE OR REPLACE VIEW country_z3 AS (
SELECT * FROM country_label WHERE scalerank = 0 AND is_tiny = 0
);
CREATE OR REPLACE VIEW country_z5 AS (
SELECT * FROM country_label WHERE scalerank <= 1
);
CREATE OR REPLACE FUNCTION layer_country(bbox geometry, zoom_level int)
RETURNS TABLE(geom geometry, name text, abbrev text, postal text, scalerank int, labelrank int) AS $$
WITH zoom_levels AS (
SELECT * FROM country_z1
WHERE zoom_level = 1
UNION ALL
SELECT * FROM country_z2
WHERE zoom_level BETWEEN 2 AND 4
UNION ALL
SELECT * FROM country_z3
WHERE zoom_level BETWEEN 3 AND 4
UNION ALL
SELECT * FROM country_z5
WHERE zoom_level >= 5
)
SELECT geom, name, abbrev, postal, scalerank::int, labelrank::int FROM zoom_levels
WHERE geom && bbox
ORDER BY scalerank, labelrank, length(name);
$$ LANGUAGE SQL IMMUTABLE;