Uncomitted changes

This commit is contained in:
Miel Truyen 2023-04-09 20:01:38 +02:00
parent 7a239b66cf
commit d5e05f07d4
4 changed files with 168 additions and 138 deletions

View File

@ -1,4 +1,8 @@
set -e set -e
#area=europe
area=planet
make refresh-docker-images make refresh-docker-images
# Show mem info # Show mem info
@ -14,7 +18,7 @@ make init-dirs
# rm -f "./data/${area}.mbtiles" # rm -f "./data/${area}.mbtiles"
#echo "====> : Downloading ${area} from ${osm_server:-any source}..." #echo "====> : Downloading ${area} from ${osm_server:-any source}..."
#make "download${osm_server:+-${osm_server}}" #area=$area make "download${osm_server:+-${osm_server}}"
make clean make clean
make all make all
@ -30,9 +34,9 @@ make import-data
# [May 21 09:45:15] [INFO] Importing OSM data took: 52m21.813870474s # [May 21 09:45:15] [INFO] Importing OSM data took: 52m21.813870474s
# [May 21 09:45:15] [INFO] [PostGIS] Rotating tables took: 38.69062ms # [May 21 09:45:15] [INFO] [PostGIS] Rotating tables took: 38.69062ms
# [May 21 09:45:15] [INFO] Imposm took: 1h14m30.893125729s # [May 21 09:45:15] [INFO] Imposm took: 1h14m30.893125729s
make import-osm area=europe make import-osm area=$area
make import-borders area=europe make import-borders area=$area
make import-wikidata make import-wikidata
@ -82,8 +86,8 @@ make test-perf-null
##echo " : " ##echo " : "
##echo " : You will see a lot of deprecated warning in the log! This is normal! " ##echo " : You will see a lot of deprecated warning in the log! This is normal! "
##echo " : like : Mapnik LOG> ... is deprecated and will be removed in Mapnik 4.x ... " ##echo " : like : Mapnik LOG> ... is deprecated and will be removed in Mapnik 4.x ... "
#make generate-tiles area=europe make generate-tiles area=europe
# #OVERLAY
## ##
##echo " " ##echo " "
##echo "-------------------------------------------------------------------------------------" ##echo "-------------------------------------------------------------------------------------"

View File

@ -139,6 +139,18 @@ tables:
- key: name - key: name
name: name name: name
type: string type: string
- name: name_en
key: name:en
type: string
- name: name_nl
key: name:nl
type: string
- name: name_de
key: name:de
type: string
- name: name_fr
key: name:fr
type: string
- key: boundary - key: boundary
name: boundary name: boundary
type: string type: string
@ -189,6 +201,9 @@ tables:
- key: admin_level - key: admin_level
name: admin_level name: admin_level
type: integer type: integer
- key: maritime
name: maritime
type: bool
mapping: mapping:
boundary: [ 'administrative' ] boundary: [ 'administrative' ]
filters: filters:

View File

@ -15,33 +15,24 @@ $$ LANGUAGE plpgsql;
DROP MATERIALIZED VIEW IF EXISTS osm_boundary_polygon CASCADE; DROP MATERIALIZED VIEW IF EXISTS osm_boundary_polygon CASCADE;
CREATE MATERIALIZED VIEW osm_boundary_polygon AS CREATE MATERIALIZED VIEW osm_boundary_polygon AS
( (
SELECT SELECT r.osm_id as relation_id,
r.relation_id, r.name,
r.name, r.name_en,
CASE r.name_nl,
WHEN r.admin_level = 10 THEN 6 r.name_de,
WHEN r.admin_level = 9 THEN 5 r.name_fr,
WHEN r.admin_level = 8 THEN 4 r.admin_level,
WHEN r.admin_level = 7 THEN 3 p.geometry
WHEN r.admin_level = 6 THEN 2 FROM (
WHEN r.admin_level = 4 THEN 1 SELECT relation_id,
-- No admin_level =3? ST_BuildArea(ST_Node(ST_Collect(geometry))) as geometry
WHEN r.admin_level = 2 THEN 0 FROM osm_border_disp_relation
ELSE null WHERE (role = 'outer' or role = 'inner')
END as nuts_level, AND ST_GeometryType(geometry) = 'ST_LineString'
p.geometry GROUP BY relation_id
FROM ( ) as p
SELECT LEFT JOIN osm_administrative_relation as r on r.osm_id = p.relation_id
relation_id, ) /* DELAY_MATERIALIZED_VIEW_CREATION */ ;
ST_BuildArea(ST_Node(ST_Collect(geometry))) as geometry,
min(id) as minid -- Used just to join to one relation, could've also used subquery with LIMIT 1
FROM osm_border_disp_relation
WHERE (role = 'outer' or role = 'inner')
AND ST_GeometryType(geometry)='ST_LineString'
GROUP BY relation_id
) as p
LEFT JOIN osm_border_disp_relation as r on p.minid = r.id
) /* DELAY_MATERIALIZED_VIEW_CREATION */ ;
CREATE INDEX IF NOT EXISTS osm_boundary_polygon_idx ON osm_boundary_polygon USING gist (geometry); CREATE INDEX IF NOT EXISTS osm_boundary_polygon_idx ON osm_boundary_polygon USING gist (geometry);
@ -49,22 +40,21 @@ CREATE INDEX IF NOT EXISTS osm_boundary_polygon_idx ON osm_boundary_polygon USIN
-- etldoc: osm_border_linestring_adm -> osm_border_linestring_gen_z13 -- etldoc: osm_border_linestring_adm -> osm_border_linestring_gen_z13
DROP MATERIALIZED VIEW IF EXISTS osm_boundary_linestring CASCADE; DROP MATERIALIZED VIEW IF EXISTS osm_boundary_linestring CASCADE;
CREATE MATERIALIZED VIEW osm_boundary_linestring AS CREATE MATERIALIZED VIEW osm_boundary_linestring AS
SELECT SELECT osm_id,
osm_id, geometry,
geometry, nuts_level,
nuts_level, nuts ->> 'l_nuts_0_name' as l_nuts_0_name,
nuts->>'l_nuts_0_name' as l_nuts_0_name, nuts ->> 'l_nuts_1_name' as l_nuts_1_name,
nuts->>'l_nuts_1_name' as l_nuts_1_name, nuts ->> 'l_nuts_2_name' as l_nuts_2_name,
nuts->>'l_nuts_2_name' as l_nuts_2_name, nuts ->> 'l_nuts_3_name' as l_nuts_3_name,
nuts->>'l_nuts_3_name' as l_nuts_3_name, nuts ->> 'l_nuts_4_name' as l_nuts_4_name,
nuts->>'l_nuts_4_name' as l_nuts_4_name, nuts ->> 'l_nuts_5_name' as l_nuts_5_name,
nuts->>'l_nuts_5_name' as l_nuts_5_name, nuts ->> 'r_nuts_0_name' as r_nuts_0_name,
nuts->>'r_nuts_0_name' as r_nuts_0_name, nuts ->> 'r_nuts_1_name' as r_nuts_1_name,
nuts->>'r_nuts_1_name' as r_nuts_1_name, nuts ->> 'r_nuts_2_name' as r_nuts_2_name,
nuts->>'r_nuts_2_name' as r_nuts_2_name, nuts ->> 'r_nuts_3_name' as r_nuts_3_name,
nuts->>'r_nuts_3_name' as r_nuts_3_name, nuts ->> 'r_nuts_4_name' as r_nuts_4_name,
nuts->>'r_nuts_4_name' as r_nuts_4_name, nuts ->> 'r_nuts_5_name' as r_nuts_5_name
nuts->>'r_nuts_5_name' as r_nuts_5_name
-- Shouldnt be needed for the map -- Shouldnt be needed for the map
-- nuts->'l_nuts_1_id' as l_nuts_1_id, -- nuts->'l_nuts_1_id' as l_nuts_1_id,
-- nuts->'l_nuts_2_id' as l_nuts_2_id, -- nuts->'l_nuts_2_id' as l_nuts_2_id,
@ -77,55 +67,61 @@ SELECT
-- nuts->'r_nuts_4_id' as r_nuts_4_id, -- nuts->'r_nuts_4_id' as r_nuts_4_id,
-- nuts->'r_nuts_5_id' as r_nuts_5_id -- nuts->'r_nuts_5_id' as r_nuts_5_id
FROM ( FROM (
SELECT SELECT osm_id,
osm_id, geometry,
geometry, MIN(nuts_level) as nuts_level,
MIN(nuts_level) as nuts_level, jsonb_object_agg(
jsonb_object_agg( CONCAT(side, '_nuts_', nuts_level, '_name'), name
CONCAT(side, '_nuts_', nuts_level, '_name'), name )
) || jsonb_object_agg(
|| jsonb_object_agg( CONCAT(side, '_nuts_', nuts_level, '_id'), -relation_id
CONCAT(side, '_nuts_', nuts_level, '_id'), -relation_id ) as nuts
) as nuts FROM (
FROM ( SELECT b.osm_id,
SELECT b.geometry,
b.*, CASE
m.maritime, WHEN r.admin_level = 10 THEN 6
m.index, WHEN r.admin_level = 9 THEN 5
m.role, WHEN r.admin_level = 8 THEN 4
m.admin_level, WHEN r.admin_level = 7 THEN 3
r.nuts_level, WHEN r.admin_level = 6 THEN 2
r.name, WHEN r.admin_level = 4 THEN 1
r.relation_id, -- No admin_level =3?
CASE WHEN r.admin_level = 2 THEN 0
WHEN -- All other are stored as low priority NUTS, for future reference
ST_Within( ELSE 1000 + r.admin_level
ST_OffsetCurve( END as nuts_level,
(ST_LineSubString(b.geometry, 0.499,0.501)), 10, 'quad_segs=4 join=mitre' COALESCE(NULLIF(r.name_en,''), NULLIF(r.name,''), NULL) as name,
), r.relation_id,
r.geometry CASE
) WHEN
THEN 'r' ST_Within(
WHEN ST_OffsetCurve(
ST_Within( (ST_LineSubString(b.geometry, 0.499, 0.501)), 10,
ST_OffsetCurve( 'quad_segs=4 join=mitre'
(ST_LineSubString(b.geometry, 0.499,0.501)), -10, 'quad_segs=4 join=mitre' ),
), r.geometry
r.geometry )
) THEN 'r'
THEN 'l' WHEN
ELSE 'unknown' -- TODO: Debug if this ever happens, if so our method isn't fool proof ST_Within(
END as side, ST_OffsetCurve(
r.geometry as relation (ST_LineSubString(b.geometry, 0.499, 0.501)), -10,
FROM 'quad_segs=4 join=mitre'
osm_administrative_boundary as b ),
INNER JOIN osm_administrative_member as m r.geometry
ON b.osm_id = m.boundary_id )
INNER JOIN osm_boundary_polygon as r THEN 'l'
ON m.relation_id = r.relation_id ELSE 'unknown' -- TODO: Debug if this ever happens, if so our method isn't fool proof
) as g END as side
GROUP BY osm_id, geometry FROM osm_administrative_boundary as b
) as p /* DELAY_MATERIALIZED_VIEW_CREATION */ ; INNER JOIN osm_administrative_member as m
ON b.osm_id = m.boundary_id
INNER JOIN osm_boundary_polygon as r
ON m.relation_id = r.relation_id
) as g
GROUP BY osm_id, geometry
) as p /* DELAY_MATERIALIZED_VIEW_CREATION */ ;
CREATE INDEX IF NOT EXISTS osm_boundary_linestring_idx ON osm_boundary_linestring USING gist (geometry); CREATE INDEX IF NOT EXISTS osm_boundary_linestring_idx ON osm_boundary_linestring USING gist (geometry);
@ -151,32 +147,47 @@ CREATE OR REPLACE FUNCTION layer_nuts(bbox geometry, zoom_level int)
) )
AS AS
$$ $$
SELECT SELECT geometry,
geometry, nuts_level,
nuts_level, l_nuts_0_name,
l_nuts_0_name, l_nuts_1_name,
l_nuts_1_name, l_nuts_2_name,
l_nuts_2_name, l_nuts_3_name,
l_nuts_3_name, l_nuts_4_name,
l_nuts_4_name, l_nuts_5_name,
l_nuts_5_name, r_nuts_0_name,
r_nuts_0_name, r_nuts_1_name,
r_nuts_1_name, r_nuts_2_name,
r_nuts_2_name, r_nuts_3_name,
r_nuts_3_name, r_nuts_4_name,
r_nuts_4_name, r_nuts_5_name
r_nuts_5_name
FROM osm_boundary_linestring FROM osm_boundary_linestring
WHERE geometry && bbox WHERE geometry && bbox
AND zoom_level > AND zoom_level >
( CASE (CASE
WHEN nuts_level=0 THEN 2 WHEN nuts_level = 0 THEN 2
WHEN nuts_level=1 THEN 4 WHEN nuts_level = 1 THEN 4
WHEN nuts_level=2 THEN 6 WHEN nuts_level = 2 THEN 6
WHEN nuts_level=3 THEN 6 WHEN nuts_level = 3 THEN 6
WHEN nuts_level=4 THEN 8 WHEN nuts_level = 4 THEN 8
WHEN nuts_level=5 THEN 10 WHEN nuts_level = 5 THEN 10
END ) END)
$$ LANGUAGE SQL STABLE $$ LANGUAGE SQL STABLE
-- STRICT -- STRICT
PARALLEL SAFE; PARALLEL SAFE;
/*
r.name,
CASE
WHEN r.admin_level = 10 THEN 6
WHEN r.admin_level = 9 THEN 5
WHEN r.admin_level = 8 THEN 4
WHEN r.admin_level = 7 THEN 3
WHEN r.admin_level = 6 THEN 2
WHEN r.admin_level = 4 THEN 1
-- No admin_level =3?
WHEN r.admin_level = 2 THEN 0
ELSE null
END as nuts_level,
*/

View File

@ -1,23 +1,23 @@
tileset: tileset:
layers: layers:
# - layers/water/water.yaml - layers/water/water.yaml
# - layers/waterway/waterway.yaml - layers/waterway/waterway.yaml
# - layers/landcover/landcover.yaml - layers/landcover/landcover.yaml
# - layers/landuse/landuse.yaml - layers/landuse/landuse.yaml
# - layers/mountain_peak/mountain_peak.yaml - layers/mountain_peak/mountain_peak.yaml
# - layers/park/park.yaml - layers/park/park.yaml
- layers/boundary/boundary.yaml - layers/boundary/boundary.yaml
- layers/boundary/nuts.yaml - layers/boundary/nuts.yaml
# - layers/aeroway/aeroway.yaml - layers/aeroway/aeroway.yaml
# - layers/transportation/transportation.yaml - layers/transportation/transportation.yaml
# - layers/building/building.yaml - layers/building/building.yaml
# - layers/water_name/water_name.yaml - layers/water_name/water_name.yaml
# - layers/transportation_name/transportation_name.yaml - layers/transportation_name/transportation_name.yaml
# - layers/place/place.yaml - layers/place/place.yaml
# - layers/housenumber/housenumber.yaml - layers/housenumber/housenumber.yaml
# - layers/poi/poi.yaml - layers/poi/poi.yaml
# - layers/landmarks/landmark.yaml - layers/landmarks/landmark.yaml
# - layers/aerodrome_label/aerodrome_label.yaml - layers/aerodrome_label/aerodrome_label.yaml
name: OpenMapTiles name: OpenMapTiles
version: 3.12.1 version: 3.12.1
id: openmaptiles id: openmaptiles