diff --git a/europe.sh b/europe.sh index e984854..32303c3 100755 --- a/europe.sh +++ b/europe.sh @@ -1,4 +1,8 @@ set -e + +#area=europe +area=planet + make refresh-docker-images # Show mem info @@ -14,7 +18,7 @@ make init-dirs # rm -f "./data/${area}.mbtiles" #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 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] [PostGIS] Rotating tables took: 38.69062ms # [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 @@ -82,8 +86,8 @@ make test-perf-null ##echo " : " ##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 ... " -#make generate-tiles area=europe -# +make generate-tiles area=europe +#OVERLAY ## ##echo " " ##echo "-------------------------------------------------------------------------------------" diff --git a/layers/boundary/mapping.yaml b/layers/boundary/mapping.yaml index bf8c1f6..d2c7abf 100644 --- a/layers/boundary/mapping.yaml +++ b/layers/boundary/mapping.yaml @@ -139,6 +139,18 @@ tables: - key: name name: name 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 name: boundary type: string @@ -189,6 +201,9 @@ tables: - key: admin_level name: admin_level type: integer + - key: maritime + name: maritime + type: bool mapping: boundary: [ 'administrative' ] filters: diff --git a/layers/boundary/nuts.sql b/layers/boundary/nuts.sql index f8c305b..210d877 100644 --- a/layers/boundary/nuts.sql +++ b/layers/boundary/nuts.sql @@ -15,33 +15,24 @@ $$ LANGUAGE plpgsql; DROP MATERIALIZED VIEW IF EXISTS osm_boundary_polygon CASCADE; CREATE MATERIALIZED VIEW osm_boundary_polygon AS ( - SELECT - r.relation_id, - 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, - p.geometry - FROM ( - SELECT - relation_id, - 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 */ ; +SELECT r.osm_id as relation_id, + r.name, + r.name_en, + r.name_nl, + r.name_de, + r.name_fr, + r.admin_level, + p.geometry +FROM ( + SELECT relation_id, + ST_BuildArea(ST_Node(ST_Collect(geometry))) as geometry + 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_administrative_relation as r on r.osm_id = p.relation_id + ) /* DELAY_MATERIALIZED_VIEW_CREATION */ ; 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 DROP MATERIALIZED VIEW IF EXISTS osm_boundary_linestring CASCADE; CREATE MATERIALIZED VIEW osm_boundary_linestring AS -SELECT - osm_id, - geometry, - nuts_level, - nuts->>'l_nuts_0_name' as l_nuts_0_name, - nuts->>'l_nuts_1_name' as l_nuts_1_name, - nuts->>'l_nuts_2_name' as l_nuts_2_name, - nuts->>'l_nuts_3_name' as l_nuts_3_name, - nuts->>'l_nuts_4_name' as l_nuts_4_name, - nuts->>'l_nuts_5_name' as l_nuts_5_name, - nuts->>'r_nuts_0_name' as r_nuts_0_name, - nuts->>'r_nuts_1_name' as r_nuts_1_name, - nuts->>'r_nuts_2_name' as r_nuts_2_name, - nuts->>'r_nuts_3_name' as r_nuts_3_name, - nuts->>'r_nuts_4_name' as r_nuts_4_name, - nuts->>'r_nuts_5_name' as r_nuts_5_name +SELECT osm_id, + geometry, + nuts_level, + nuts ->> 'l_nuts_0_name' as l_nuts_0_name, + nuts ->> 'l_nuts_1_name' as l_nuts_1_name, + nuts ->> 'l_nuts_2_name' as l_nuts_2_name, + nuts ->> 'l_nuts_3_name' as l_nuts_3_name, + nuts ->> 'l_nuts_4_name' as l_nuts_4_name, + nuts ->> 'l_nuts_5_name' as l_nuts_5_name, + nuts ->> 'r_nuts_0_name' as r_nuts_0_name, + nuts ->> 'r_nuts_1_name' as r_nuts_1_name, + nuts ->> 'r_nuts_2_name' as r_nuts_2_name, + nuts ->> 'r_nuts_3_name' as r_nuts_3_name, + nuts ->> 'r_nuts_4_name' as r_nuts_4_name, + nuts ->> 'r_nuts_5_name' as r_nuts_5_name -- Shouldnt be needed for the map -- nuts->'l_nuts_1_id' as l_nuts_1_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_5_id' as r_nuts_5_id FROM ( - SELECT - osm_id, - geometry, - MIN(nuts_level) as nuts_level, - jsonb_object_agg( - CONCAT(side, '_nuts_', nuts_level, '_name'), name - ) - || jsonb_object_agg( - CONCAT(side, '_nuts_', nuts_level, '_id'), -relation_id - ) as nuts - FROM ( - SELECT - b.*, - m.maritime, - m.index, - m.role, - m.admin_level, - r.nuts_level, - r.name, - r.relation_id, - CASE - WHEN - ST_Within( - ST_OffsetCurve( - (ST_LineSubString(b.geometry, 0.499,0.501)), 10, 'quad_segs=4 join=mitre' - ), - r.geometry - ) - THEN 'r' - WHEN - ST_Within( - ST_OffsetCurve( - (ST_LineSubString(b.geometry, 0.499,0.501)), -10, 'quad_segs=4 join=mitre' - ), - r.geometry - ) - THEN 'l' - ELSE 'unknown' -- TODO: Debug if this ever happens, if so our method isn't fool proof - END as side, - r.geometry as relation - FROM - osm_administrative_boundary as b - 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 */ ; + SELECT osm_id, + geometry, + MIN(nuts_level) as nuts_level, + jsonb_object_agg( + CONCAT(side, '_nuts_', nuts_level, '_name'), name + ) + || jsonb_object_agg( + CONCAT(side, '_nuts_', nuts_level, '_id'), -relation_id + ) as nuts + FROM ( + SELECT b.osm_id, + b.geometry, + 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 + -- All other are stored as low priority NUTS, for future reference + ELSE 1000 + r.admin_level + END as nuts_level, + COALESCE(NULLIF(r.name_en,''), NULLIF(r.name,''), NULL) as name, + r.relation_id, + CASE + WHEN + ST_Within( + ST_OffsetCurve( + (ST_LineSubString(b.geometry, 0.499, 0.501)), 10, + 'quad_segs=4 join=mitre' + ), + r.geometry + ) + THEN 'r' + WHEN + ST_Within( + ST_OffsetCurve( + (ST_LineSubString(b.geometry, 0.499, 0.501)), -10, + 'quad_segs=4 join=mitre' + ), + r.geometry + ) + THEN 'l' + ELSE 'unknown' -- TODO: Debug if this ever happens, if so our method isn't fool proof + END as side + FROM osm_administrative_boundary as b + 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); @@ -151,32 +147,47 @@ CREATE OR REPLACE FUNCTION layer_nuts(bbox geometry, zoom_level int) ) AS $$ -SELECT - geometry, - nuts_level, - l_nuts_0_name, - l_nuts_1_name, - l_nuts_2_name, - l_nuts_3_name, - l_nuts_4_name, - l_nuts_5_name, - r_nuts_0_name, - r_nuts_1_name, - r_nuts_2_name, - r_nuts_3_name, - r_nuts_4_name, - r_nuts_5_name +SELECT geometry, + nuts_level, + l_nuts_0_name, + l_nuts_1_name, + l_nuts_2_name, + l_nuts_3_name, + l_nuts_4_name, + l_nuts_5_name, + r_nuts_0_name, + r_nuts_1_name, + r_nuts_2_name, + r_nuts_3_name, + r_nuts_4_name, + r_nuts_5_name FROM osm_boundary_linestring WHERE geometry && bbox - AND zoom_level > - ( CASE - WHEN nuts_level=0 THEN 2 - WHEN nuts_level=1 THEN 4 - WHEN nuts_level=2 THEN 6 - WHEN nuts_level=3 THEN 6 - WHEN nuts_level=4 THEN 8 - WHEN nuts_level=5 THEN 10 - END ) + AND zoom_level > + (CASE + WHEN nuts_level = 0 THEN 2 + WHEN nuts_level = 1 THEN 4 + WHEN nuts_level = 2 THEN 6 + WHEN nuts_level = 3 THEN 6 + WHEN nuts_level = 4 THEN 8 + WHEN nuts_level = 5 THEN 10 + END) $$ LANGUAGE SQL STABLE -- 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, + */ diff --git a/openmaptiles.yaml b/openmaptiles.yaml index 74e9c31..26b59c4 100644 --- a/openmaptiles.yaml +++ b/openmaptiles.yaml @@ -1,23 +1,23 @@ tileset: layers: -# - layers/water/water.yaml -# - layers/waterway/waterway.yaml -# - layers/landcover/landcover.yaml -# - layers/landuse/landuse.yaml -# - layers/mountain_peak/mountain_peak.yaml -# - layers/park/park.yaml + - layers/water/water.yaml + - layers/waterway/waterway.yaml + - layers/landcover/landcover.yaml + - layers/landuse/landuse.yaml + - layers/mountain_peak/mountain_peak.yaml + - layers/park/park.yaml - layers/boundary/boundary.yaml - layers/boundary/nuts.yaml -# - layers/aeroway/aeroway.yaml -# - layers/transportation/transportation.yaml -# - layers/building/building.yaml -# - layers/water_name/water_name.yaml -# - layers/transportation_name/transportation_name.yaml -# - layers/place/place.yaml -# - layers/housenumber/housenumber.yaml -# - layers/poi/poi.yaml -# - layers/landmarks/landmark.yaml -# - layers/aerodrome_label/aerodrome_label.yaml + - layers/aeroway/aeroway.yaml + - layers/transportation/transportation.yaml + - layers/building/building.yaml + - layers/water_name/water_name.yaml + - layers/transportation_name/transportation_name.yaml + - layers/place/place.yaml + - layers/housenumber/housenumber.yaml + - layers/poi/poi.yaml + - layers/landmarks/landmark.yaml + - layers/aerodrome_label/aerodrome_label.yaml name: OpenMapTiles version: 3.12.1 id: openmaptiles