diff --git a/README.md b/README.md index 181fe70..299e2a4 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,7 @@ It is derived from the Lyrk mapstyle you can found at [https://github.com/lyrk/l * [occitan](https://tile.openstreetmap.bzh/oc/) * [basque](https://tile.openstreetmap.bzh/eu/) * [alsacien](https://tile.openstreetmap.bzh/gsw/) +* [catalan](https://tile.openstreetmap.bzh/ca/) @@ -23,6 +24,7 @@ Il est dérivé du style Lyrk que vous pouvez trouver ici : [https://github.com/ * [occitan](https://tile.openstreetmap.bzh/oc/) * [basque](https://tile.openstreetmap.bzh/eu/) * [alsacien](https://tile.openstreetmap.bzh/gsw/) +* [catalan](https://tile.openstreetmap.bzh/ca/) # Preview @@ -129,7 +131,7 @@ It will : ## See the map -You can set up a whole tile server (see [here](https://switch2osm.org/serving-tiles/)) or, easier and faster, use [Kosmtik](https://github.com/kosmtik/kosmtik). +You can set up a whole tile server (see [here](https://switch2osm.org/serving-tiles/)) or, easier and faster and for developement purposes, use [Kosmtik](https://github.com/kosmtik/kosmtik). diff --git a/data/perpignan.osm b/data/perpignan.osm new file mode 100644 index 0000000..0e95d02 --- /dev/null +++ b/data/perpignan.osm @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/data/perpignan.poly b/data/perpignan.poly new file mode 100644 index 0000000..b438885 --- /dev/null +++ b/data/perpignan.poly @@ -0,0 +1,9 @@ +perpignan +1 + 3.218993 42.944361 + 2.381285 42.927269 + 2.367551 42.324034 + 3.260190 42.401152 + 3.218993 42.944361 +END +END diff --git a/osm_ca.xml b/osm_ca.xml new file mode 100644 index 0000000..65c0c8c --- /dev/null +++ b/osm_ca.xml @@ -0,0 +1,54526 @@ + + + + + + + + 1 + 2 + -180,-85,180,85 + -2.96,48.03,8 + + 4 + 18 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + 4 + 50 + 5000 + 0.01*!pixel_width!::real*!pixel_height!::real +) AS landcover_low]]> + + + + + + + + + + + + + + + true + 4 + 50 + 5000 + 1*!pixel_width!::real*!pixel_height!::real +ORDER BY z_order, way_area DESC +) AS landcover]]> + + + + + + + + + + + + + + + true + 4 + 50 + 5000 + + + + + + + + + + + + + + + + true + 4 + 50 + 5000 + 75000 +) AS waterarea_low]]> + + + + + + + + + + + + + + + true + 4 + 50 + 5000 + 50000 +) AS waterarea_med]]> + + + + + + + + + + + + + + + true + 4 + 50 + 5000 + 'name:ca'::text) as name, + COALESCE(waterway, '') || COALESCE(landuse, '') || COALESCE("natural", '') as type +FROM + planet_osm_polygon +WHERE + waterway IN ('riverbank') + OR (landuse = ANY (ARRAY['reservoir'::text, 'water'::text, 'basin'::text, 'salt_pond'::text])) + OR ("natural" = ANY (ARRAY['lake'::text, 'water'::text])) OR amenity = 'swimming_pool'::text + OR leisure = 'swimming_pool'::text +) AS waterarea]]> + + + + + + + + + + + + + + + true + 4 + 50 + 5000 + 'name:ca'::text) as name, COALESCE(waterway, '') as type, way +FROM + planet_osm_line +WHERE + waterway in ('river','canal') +ORDER BY z_order +) AS waterway_low]]> + + + + + + + + + + + + + + + true + 4 + 50 + 5000 + 'name:ca'::text) as name, COALESCE(waterway, '') as type, way +FROM + planet_osm_line +WHERE + waterway in ('stream','river','canal') +ORDER BY z_order +) AS waterway_med]]> + + + + + + + + + + + + + + + true + 4 + 50 + 5000 + 'name:ca'::text) as name, COALESCE(waterway, '') as type, way +FROM + planet_osm_line +WHERE + waterway in ('weir','river','canal','derelict_canal','stream','drain','ditch','wadi') +ORDER BY z_order +) AS waterway_high]]> + + + + + + + + + + + + + + + true + 4 + 50 + 5000 + + + + + + + + + + + + + + + + true + 4 + 50 + 5000 + 'usage'::text AS usage, + tunnel, + bridge +FROM + planet_osm_line +WHERE + railway IN ('rail') AND tags->'usage'::text IN ('main', 'branch') +) AS rail_low]]> + + + + + + + + + + + + + + + true + 4 + 50 + 5000 + + + + + + + + + + + + + + + + true + 4 + 50 + 5000 + + + + + + + + + + + + + + + + + + true + 4 + 50 + 5000 + + + + + + + + + + + + + + + + + + true + 4 + 50 + 5000 + + + + + + + + + + + + + + + + true + 4 + 50 + 5000 + + + + + + + + + + + + + + + + true + 4 + 50 + 5000 + 'maritime','no') AS maritime, + count(r.*)::integer AS nb, + string_agg(id::text,',') AS rels +FROM planet_osm_roads b +LEFT JOIN planet_osm_rels r ON (r.parts @> ARRAY[osm_id] + AND r.members @> ARRAY['w' || osm_id] + AND regexp_replace(r.tags::text,'[{}]',',') ~ format('(,admin_level,%s.*,boundary,administrative|,boundary,administrative.*,admin_level,%s,)',admin_level,admin_level)) +WHERE + way && !bbox! + AND boundary='administrative' + AND admin_level IS NOT NULL +GROUP BY 1,2,3 +ORDER BY admin_level DESC ) AS admin_boundaries]]> + + + + + + + + + + + + + + + true + 4 + 50 + 5000 + 'name:ca'::text,'') as name + , substring(substring(r.tags::text,'admin_level,[0-9]'),'[0-9]')::integer AS admin_level + , p.way + FROM planet_osm_point p + LEFT JOIN planet_osm_rels r ON (r.parts @> ARRAY[p.osm_id] AND r.members @> ARRAY['n' || p.osm_id]) + WHERE + way && !bbox! + AND p.place IN ('town','city') + AND r.members::text ~ 'admin_centre' + AND r.tags::text ~ 'admin_level,[0-9]' = TRUE + GROUP BY osm_id, place, COALESCE(p.tags -> 'name:ca'::text,''), way, substring(substring(r.tags::text,'admin_level,[0-9]'),'[0-9]') +) AS src +WHERE rank = 1 AND name <> '' +ORDER BY admin_level, name ) AS placenames_medium]]> + + + + + + + + + + + + + + + + + + + + + + + true + 4 + 50 + 5000 + 'name:ca'::text,'') as name + FROM planet_osm_point + WHERE + place IN ('suburb','village','locality','hamlet','quarter','neighbourhood','isolated_dwelling','farm') + AND COALESCE(tags -> 'name:ca'::text) IS NOT NULL + AND NOT tags @> 'capital=>yes' + ORDER BY CASE + WHEN place = 'suburb' THEN 7 + WHEN place = 'village' THEN 6 + WHEN place IN ('locality','hamlet') THEN 5 + WHEN place = 'quarter' THEN 4 + WHEN place = 'neighbourhood' THEN 3 + WHEN place = 'isolated_dwelling' THEN 2 + WHEN place = 'farm' THEN 1 + END DESC) AS placenames_small]]> + + + + + + + + + + + + + + + true + 4 + 50 + 5000 + 'name:ca'::text,'') as name, + ref, + oneway, + CHAR_LENGTH(ref) AS reflen, + way +FROM + planet_osm_line +WHERE + highway IN ('motorway', 'trunk') + AND (COALESCE(tags -> 'name:ca'::text,'') IS NOT NULL OR ref IS NOT NULL) ) AS motorway_label]]> + + + + + + + + + + + + + + + true + 4 + 50 + 5000 + 'name:ca'::text,'') as name, + way +FROM + planet_osm_line +WHERE + highway IN ('primary', 'secondary', 'tertiary') ) AS mainroad_label]]> + + + + + + + + + + + + + + + true + 4 + 50 + 5000 + 'name:ca'::text,'') as name, + way +FROM + planet_osm_line +WHERE + highway IN ('motorway','motorway_link','trunk','trunk_link','primary','primary_link','secondary','secondary_link','tertiary','tertiary_link','road','path','track','service','footway','bridleway','cycleway','steps','pedestrian','living_street','unclassified','residential','raceway') ) AS minorroad_label]]> + + + + + + + + + + + + + + + true + 4 + 50 + 5000 + 'name:ca'::text) as name, + way, + way_area/NULLIF(!pixel_width!::real*!pixel_height!::real,0) AS way_pixels + FROM planet_osm_polygon + WHERE building IS NOT NULL + AND building NOT IN ('no') + AND name IS NOT NULL + ORDER BY way_area DESC +) AS building_text]]> + + + + + + + + + + + + + + + true + 4 + 50 + 5000 + 'name:ca'::text) as name, + way, + way_area/NULLIF(!pixel_width!::real*!pixel_height!::real,0) AS way_pixels + FROM planet_osm_polygon + WHERE leisure IN ('park', 'sports_centre', 'stadium', 'pitch') + AND name IS NOT NULL + ORDER BY way_area DESC +) AS leisure_text]]> + + + + diff --git a/osm_ca.yml b/osm_ca.yml new file mode 100644 index 0000000..0ffc940 --- /dev/null +++ b/osm_ca.yml @@ -0,0 +1,680 @@ +name: OpenStreetMap en català +description: 'A general-purpose OpenStreetMap mapnik style, focused on minored langages, in CartoCSS' +attribution: 'CC-BY-SA OSM-BZH' +scale: 1 +metatile: 2 +bounds: &world + - -180 + - -85 + - 180 + - 85 +center: + - -2.96 + - 48.03 + - 8 +format: 'png' +interactivity: false +minzoom: 4 +maxzoom: 18 +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" + + +_parts: + # default values used by layers + extents: &extents + extent: *world + srs-name: "3857" + 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" + class: '' + status: 'on' + + extents84: &extents84 + extent: *world + srs-name: "WGS84" + srs: "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs" + + osm2pgsql: &osm2pgsql + type: "postgis" + dbname: "osm" + key_field: "" + geometry_field: "way" + extent: "-20037508,-20037508,20037508,20037508" + host: db.openstreetmap.world + user: osmbr + password: m4d31nbr31zh + asynchronous_request: true + max_async_connection: 4 + max_size: 50 + cursor_size: 5000 + + +# stylesheets +Stylesheet: + - styles/palette.mss + - styles/base.mss + - styles/landcover.mss + - styles/admin.mss + - styles/roads.mss + - styles/placenames.mss + - styles/labels.mss + + +# the layers +Layer: + + - id: land_low + geometry: polygon + <<: *extents + Datasource: + file: /data/styles/data/simplified-land-polygons-complete-3857/simplified_land_polygons.shp + type: shape + properties: + maxzoom: 10 + + + - id: land_high + geometry: polygon + <<: *extents + Datasource: + file: /data/styles/data/land-polygons-split-3857/land_polygons.shp + type: shape + + + - id: landcover_low + geometry: polygon + <<: *extents + Datasource: + <<: *osm2pgsql + table: |- + (SELECT + osm_id, way, way_area AS area, COALESCE(landuse, leisure, "natural", highway, amenity, tourism) AS type + FROM + planet_osm_polygon + WHERE + landuse IN ('forest') + AND way && !bbox! + AND way_area > 0.01*!pixel_width!::real*!pixel_height!::real + ) AS landcover_low + simplify_geometries: 'true' + properties: + minzoom: 6 + maxzoom: 9 + + + - id: landcover + geometry: polygon + <<: *extents + Datasource: + <<: *osm2pgsql + table: |- + (SELECT + osm_id, way, way_area AS area, COALESCE(landuse, leisure, "natural", highway, amenity, tourism) AS type + FROM + planet_osm_polygon + WHERE + way && !bbox! + AND way_area > 1*!pixel_width!::real*!pixel_height!::real + ORDER BY z_order, way_area DESC + ) AS landcover + simplify_geometries: 'true' + properties: + minzoom: 10 + + + - id: aeroway + geometry: polygon + <<: *extents + Datasource: + <<: *osm2pgsql + table: |- + (SELECT + osm_id, way, aeroway AS type + FROM + planet_osm_line + WHERE + aeroway IN ('apron', 'runway', 'taxiway') + ) AS aeroway + properties: + minzoom: 10 + + + - id: waterarea_low + geometry: polygon + <<: *extents + Datasource: + <<: *osm2pgsql + table: |- + (SELECT + osm_id, way, "natural" AS type, way_area AS area + FROM + planet_osm_polygon + WHERE + ("natural" IN ('water', 'pond') + OR waterway IN ('basin', 'canal', 'mill_pond', 'pond', 'riverbank', 'stream')) + AND way_area > 75000 + ) AS waterarea_low + simplify_geometries: 'true' + properties: + minzoom: 7 + maxzoom: 10 + + - id: waterarea_med + geometry: polygon + <<: *extents + Datasource: + <<: *osm2pgsql + table: |- + (SELECT + osm_id, way, "natural" AS type, way_area AS area + FROM + planet_osm_polygon + WHERE + ("natural" IN ('water', 'pond') + OR waterway IN ('basin', 'canal', 'mill_pond', 'pond', 'riverbank', 'stream')) + AND way_area > 50000 + ) AS waterarea_med + simplify_geometries: 'true' + properties: + minzoom: 10 + maxzoom: 12 + + - id: waterarea + geometry: polygon + <<: *extents + Datasource: + <<: *osm2pgsql + table: |- + (SELECT + osm_id, + way, + way_area AS area, + COALESCE(tags -> 'name:ca'::text) as name, + COALESCE(waterway, '') || COALESCE(landuse, '') || COALESCE("natural", '') as type + FROM + planet_osm_polygon + WHERE + waterway IN ('riverbank') + OR (landuse = ANY (ARRAY['reservoir'::text, 'water'::text, 'basin'::text, 'salt_pond'::text])) + OR ("natural" = ANY (ARRAY['lake'::text, 'water'::text])) OR amenity = 'swimming_pool'::text + OR leisure = 'swimming_pool'::text + ) AS waterarea + properties: + minzoom: 12 + + + - id: waterway_low + geometry: linestring + <<: *extents + Datasource: + <<: *osm2pgsql + table: |- + (SELECT + osm_id, COALESCE(tags -> 'name:ca'::text) as name, COALESCE(waterway, '') as type, way + FROM + planet_osm_line + WHERE + waterway in ('river','canal') + ORDER BY z_order + ) AS waterway_low + simplify_geometries: 'true' + properties: + minzoom: 8 + maxzoom: 12 + + + - id: waterway_med + geometry: linestring + <<: *extents + Datasource: + <<: *osm2pgsql + table: |- + (SELECT + osm_id, COALESCE(tags -> 'name:ca'::text) as name, COALESCE(waterway, '') as type, way + FROM + planet_osm_line + WHERE + waterway in ('stream','river','canal') + ORDER BY z_order + ) AS waterway_med + simplify_geometries: 'true' + properties: + minzoom: 13 + maxzoom: 14 + + - id: waterway_high + geometry: linestring + <<: *extents + Datasource: + <<: *osm2pgsql + table: |- + (SELECT + osm_id, COALESCE(tags -> 'name:ca'::text) as name, COALESCE(waterway, '') as type, way + FROM + planet_osm_line + WHERE + waterway in ('weir','river','canal','derelict_canal','stream','drain','ditch','wadi') + ORDER BY z_order + ) AS waterway_high + properties: + minzoom: 15 + + + - id: buildings + geometry: polygon + <<: *extents + Datasource: + <<: *osm2pgsql + table: |- + (SELECT + osm_id, way, 'building' AS type + FROM + planet_osm_polygon + WHERE + building NOT IN ('', '0','false', 'no') + ORDER BY z_order, way_area DESC + ) AS buildings + properties: + minzoom: 13 + + + - id: rail_low + geometry: linestring + <<: *extents + Datasource: + <<: *osm2pgsql + table: |- + (SELECT + osm_id, + way, + COALESCE(railway) AS type, + tags->'usage'::text AS usage, + tunnel, + bridge + FROM + planet_osm_line + WHERE + railway IN ('rail') AND tags->'usage'::text IN ('main', 'branch') + ) AS rail_low + simplify_geometries: 'true' + properties: + minzoom: 6 + maxzoom: 8 + + + - id: tunnel + geometry: linestring + <<: *extents + Datasource: + <<: *osm2pgsql + table: |- + (SELECT + osm_id, + way, + COALESCE(highway, railway) AS type, + 0 AS bridge, + access, + render, + layer, + 1 as tunnel, + CASE + WHEN highway IN ('motorway', 'trunk') THEN 'motorway' + WHEN highway IN ('primary', 'secondary') THEN 'mainroad' + WHEN highway IN ('motorway_link', 'trunk_link', 'primary_link', 'secondary_link', 'tertiary', 'tertiary_link', 'residential', 'unclassified', 'road', 'living_street') THEN 'minorroad' + WHEN highway IN ('service', 'track') THEN 'service' + WHEN highway IN ('path', 'cycleway', 'footway', 'pedestrian', 'steps', 'bridleway') THEN 'noauto' + WHEN railway IN ('light_rail', 'subway', 'narrow_gauge', 'rail', 'tram') THEN 'railway' + ELSE + 'other' + END AS stylegroup + FROM + ( + SELECT *, '1_outline' AS render + FROM planet_osm_line + WHERE tunnel NOT IN ('', '0', 'no') + UNION ALL + SELECT *, '2_line' AS render + FROM planet_osm_line + WHERE tunnel NOT IN ('', '0', 'no') + UNION ALL + SELECT *, '3_inline' AS render + FROM planet_osm_line + WHERE tunnel NOT IN ('', '0', 'no') + ) AS tunnels + ORDER BY layer ASC, render ASC ) AS tunnel + simplify_geometries: 'true' + properties: + minzoom: 11 + + + - id: roads_low + geometry: linestring + <<: *extents + Datasource: + <<: *osm2pgsql + table: |- + (SELECT + osm_id, + way, + COALESCE(highway, railway) AS type, + 0 AS tunnel, + 0 AS bridge, + access, + 'fill' AS render, + CASE + WHEN highway IN ('motorway', 'trunk') THEN 'motorway' + WHEN highway IN ('primary') THEN 'mainroad' + WHEN railway IN ('rail') THEN 'railway' + ELSE 'other' + END AS stylegroup + FROM planet_osm_line + WHERE + highway IN ('motorway', 'trunk', 'primary') + OR railway IN ('rail') + AND (tunnel IS NULL OR tunnel = 'no') + AND (bridge IS NULL OR bridge = 'no') + ORDER BY z_order ) AS roads_low + simplify_geometries: 'true' + properties: + minzoom: 6 + maxzoom: 8 + + + - id: roads_med + geometry: linestring + <<: *extents + Datasource: + <<: *osm2pgsql + table: |- + (SELECT + osm_id, + way, + COALESCE(highway, railway) AS type, + 0 AS tunnel, 0 AS bridge, access, 'fill' AS render, + CASE + WHEN highway IN ('motorway', 'trunk') THEN 'motorway' + WHEN highway IN ('primary', 'secondary') THEN 'mainroad' + WHEN highway IN ('motorway_link', 'trunk_link', 'primary_link', 'secondary_link', 'tertiary', 'tertiary_link') THEN 'minorroad' + WHEN railway IN ('light_rail', 'subway', 'narrow_gauge', 'rail', 'tram') THEN 'railway' + ELSE 'other' + END AS stylegroup + FROM planet_osm_line + WHERE + highway IN ('motorway', 'trunk', 'primary', 'secondary', 'motorway_link', 'trunk_link', 'primary_link', 'secondary_link', 'tertiary', 'tertiary_link') + OR railway IN ('light_rail', 'subway', 'narrow_gauge', 'rail', 'tram') + AND (tunnel IS NULL OR tunnel = 'no') AND (bridge IS NULL OR bridge = 'no') + ORDER BY z_order ) AS roads_med + simplify_geometries: 'true' + properties: + minzoom: 9 + maxzoom: 10 + + + - id: roads_high + geometry: linestring + <<: *extents + Datasource: + <<: *osm2pgsql + table: |- + (SELECT + osm_id, + way, + COALESCE(highway, railway) AS type, + 0 AS tunnel, + 0 AS bridge, + access, + 'fill' AS render, + CASE + WHEN highway IN ('motorway', 'trunk') THEN 'motorway' + WHEN highway IN ('primary', 'secondary') THEN 'mainroad' + WHEN highway IN ('motorway_link', 'trunk_link', 'primary_link', 'secondary_link', 'tertiary', 'tertiary_link', 'residential', 'unclassified', 'road', 'living_street') THEN 'minorroad' + WHEN highway IN ('service', 'track') THEN 'service' + WHEN highway IN ('path', 'cycleway', 'footway', 'pedestrian', 'steps', 'bridleway') THEN 'noauto' + WHEN railway IN ('light_rail', 'subway', 'narrow_gauge', 'rail', 'tram') THEN 'railway' + ELSE 'other' + END AS stylegroup + FROM planet_osm_line + WHERE + (highway IS NOT NULL OR railway IS NOT NULL) + AND (tunnel IS NULL OR tunnel = 'no') + AND (bridge IS NULL OR bridge = 'no') + ORDER BY z_order ) AS roads_high + simplify_geometries: 'true' + properties: + minzoom: 11 + + + - id: bridge + geometry: linestring + <<: *extents + Datasource: + <<: *osm2pgsql + table: |- + (SELECT + way, + COALESCE(highway, railway) AS type, + 1 AS bridge, access, render, layer, + 0 as tunnel, + CASE + WHEN highway IN ('motorway', 'trunk') THEN 'motorway' + WHEN highway IN ('primary', 'secondary') THEN 'mainroad' + WHEN highway IN ('motorway_link', 'trunk_link', 'primary_link', 'secondary_link', 'tertiary', 'tertiary_link', 'residential', 'unclassified', 'road', 'living_street') THEN 'minorroad' + WHEN highway IN ('service', 'track') THEN 'service' + WHEN highway IN ('path', 'cycleway', 'footway', 'pedestrian', 'steps', 'bridleway') THEN 'noauto' + WHEN railway IN ('light_rail', 'subway', 'narrow_gauge', 'rail', 'tram') THEN 'railway' + ELSE 'other' + END AS stylegroup + FROM + ( + SELECT *, '1_outline' AS render + FROM planet_osm_line + WHERE bridge NOT IN ('', '0', 'no') + UNION ALL + SELECT *, '2_line' AS render + FROM planet_osm_line + WHERE bridge NOT IN ('', '0', 'no') + UNION ALL + SELECT *, '3_inline' AS render + FROM planet_osm_line + WHERE bridge NOT IN ('', '0', 'no') + ) AS bridges + ORDER BY layer ASC, render ASC ) AS bridge + simplify_geometries: 'true' + properties: + minzoom: 11 + + + - id: admin_boundaries + geometry: linestring + <<: *extents + Datasource: + <<: *osm2pgsql + table: |- + (SELECT + ST_Simplify(b.way,!pixel_width!/4) as way, + admin_level::integer AS admin_level, + coalesce(b.tags->'maritime','no') AS maritime, + count(r.*)::integer AS nb, + string_agg(id::text,',') AS rels + FROM planet_osm_roads b + LEFT JOIN planet_osm_rels r ON (r.parts @> ARRAY[osm_id] + AND r.members @> ARRAY['w' || osm_id] + AND regexp_replace(r.tags::text,'[{}]',',') ~ format('(,admin_level,%s.*,boundary,administrative|,boundary,administrative.*,admin_level,%s,)',admin_level,admin_level)) + WHERE + way && !bbox! + AND boundary='administrative' + AND admin_level IS NOT NULL + GROUP BY 1,2,3 + ORDER BY admin_level DESC ) AS admin_boundaries + simplify_geometries: 'true' + properties: + minzoom: 11 + + + - id: placenames_medium + geometry: point + <<: *extents + Datasource: + <<: *osm2pgsql + table: |- + (SELECT name, place, admin_level, way + FROM + ( + SELECT + ROW_NUMBER() OVER(PARTITION BY p.osm_id + ORDER BY substring(substring(r.tags::text,'admin_level,[0-9]'),'[0-9]') ASC) AS rank + , p.osm_id + , p.place + , COALESCE(p.tags -> 'name:ca'::text,'') as name + , substring(substring(r.tags::text,'admin_level,[0-9]'),'[0-9]')::integer AS admin_level + , p.way + FROM planet_osm_point p + LEFT JOIN planet_osm_rels r ON (r.parts @> ARRAY[p.osm_id] AND r.members @> ARRAY['n' || p.osm_id]) + WHERE + way && !bbox! + AND p.place IN ('town','city') + AND r.members::text ~ 'admin_centre' + AND r.tags::text ~ 'admin_level,[0-9]' = TRUE + GROUP BY osm_id, place, COALESCE(p.tags -> 'name:ca'::text,''), way, substring(substring(r.tags::text,'admin_level,[0-9]'),'[0-9]') + ) AS src + WHERE rank = 1 AND name <> '' + ORDER BY admin_level, name ) AS placenames_medium + properties: + cache-features: true + minzoom: 4 + maxzoom: 15 + + + - id: placenames_small + geometry: point + <<: *extents + Datasource: + <<: *osm2pgsql + table: |- + (SELECT + way, + place, + COALESCE(tags -> 'name:ca'::text,'') as name + FROM planet_osm_point + WHERE + place IN ('suburb','village','locality','hamlet','quarter','neighbourhood','isolated_dwelling','farm') + AND COALESCE(tags -> 'name:ca'::text) IS NOT NULL + AND NOT tags @> 'capital=>yes' + ORDER BY CASE + WHEN place = 'suburb' THEN 7 + WHEN place = 'village' THEN 6 + WHEN place IN ('locality','hamlet') THEN 5 + WHEN place = 'quarter' THEN 4 + WHEN place = 'neighbourhood' THEN 3 + WHEN place = 'isolated_dwelling' THEN 2 + WHEN place = 'farm' THEN 1 + END DESC) AS placenames_small + properties: + cache-features: true + minzoom: 10 + maxzoom: 17 + + + - id: motorway_label + geometry: linestring + <<: *extents + Datasource: + <<: *osm2pgsql + table: |- + (SELECT + osm_id, + COALESCE(highway, '') as type, + COALESCE(tags -> 'name:ca'::text,'') as name, + ref, + oneway, + CHAR_LENGTH(ref) AS reflen, + way + FROM + planet_osm_line + WHERE + highway IN ('motorway', 'trunk') + AND (COALESCE(tags -> 'name:ca'::text,'') IS NOT NULL OR ref IS NOT NULL) ) AS motorway_label + simplify_geometries: 'true' + properties: + minzoom: 9 + + + - id: mainroad_label + geometry: linestring + <<: *extents + Datasource: + <<: *osm2pgsql + table: |- + (SELECT + osm_id, + COALESCE(highway, '') as type, + COALESCE(tags -> 'name:ca'::text,'') as name, + way + FROM + planet_osm_line + WHERE + highway IN ('primary', 'secondary', 'tertiary') ) AS mainroad_label + simplify_geometries: 'true' + properties: + minzoom: 12 + + + - id: minorroad_label + geometry: linestring + <<: *extents + Datasource: + <<: *osm2pgsql + table: |- + (SELECT + osm_id, + COALESCE(highway, '') as type, + COALESCE(tags -> 'name:ca'::text,'') as name, + way + FROM + planet_osm_line + WHERE + highway IN ('motorway','motorway_link','trunk','trunk_link','primary','primary_link','secondary','secondary_link','tertiary','tertiary_link','road','path','track','service','footway','bridleway','cycleway','steps','pedestrian','living_street','unclassified','residential','raceway') ) AS minorroad_label + simplify_geometries: 'true' + properties: + minzoom: 14 + + + - id: building_label + geometry: polygon + <<: *extents + Datasource: + <<: *osm2pgsql + table: |- + (SELECT + COALESCE(tags -> 'name:ca'::text) as name, + way, + way_area/NULLIF(!pixel_width!::real*!pixel_height!::real,0) AS way_pixels + FROM planet_osm_polygon + WHERE building IS NOT NULL + AND building NOT IN ('no') + AND name IS NOT NULL + ORDER BY way_area DESC + ) AS building_text + properties: + minzoom: 14 + + + - id: leisure_label + geometry: polygon + <<: *extents + Datasource: + <<: *osm2pgsql + table: |- + (SELECT + COALESCE(tags -> 'name:ca'::text) as name, + way, + way_area/NULLIF(!pixel_width!::real*!pixel_height!::real,0) AS way_pixels + FROM planet_osm_polygon + WHERE leisure IN ('park', 'sports_centre', 'stadium', 'pitch') + AND name IS NOT NULL + ORDER BY way_area DESC + ) AS leisure_text + properties: + minzoom: 14 + + + diff --git a/osm_ca_control.xml b/osm_ca_control.xml new file mode 100644 index 0000000..3e18e6e --- /dev/null +++ b/osm_ca_control.xml @@ -0,0 +1,277 @@ + + + + + + + + 1 + 2 + -180,-85,180,85 + -2.96,48.03,8 + + 4 + 18 + + + + + + + + + + + + + + + + + + + + true + 4 + 50 + 5000 + 'name:ca' AS local_name + FROM planet_osm_point + WHERE (tags -> 'name:ca'::text IS NOT NULL) +) AS b ON a.osm_id = b.osm_id +WHERE name IS NOT NULL AND place IS NOT NULL +) AS places]]> + + + + + + + + + + + + + + + true + 4 + 50 + 5000 + 'name:ca' AS local_name + FROM planet_osm_line + WHERE (tags -> 'name:ca'::text IS NOT NULL) +) AS b ON a.osm_id = b.osm_id +WHERE name IS NOT NULL AND highway IS NOT NULL +) AS ways]]> + + + + diff --git a/osm_ca_control.yml b/osm_ca_control.yml new file mode 100644 index 0000000..1abb63a --- /dev/null +++ b/osm_ca_control.yml @@ -0,0 +1,120 @@ +name: OpenStreetMap en català - control layer +description: 'A general-purpose OpenStreetMap mapnik style, focused on minored langages, in CartoCSS' +attribution: 'CC-BY-SA OSM-BZH' +scale: 1 +metatile: 2 +bounds: &world + - -180 + - -85 + - 180 + - 85 +center: + - -2.96 + - 48.03 + - 8 +format: 'png' +interactivity: false +minzoom: 4 +maxzoom: 18 +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" + + +_parts: + # default values used by layers + extents: &extents + extent: *world + srs-name: "3857" + 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" + class: '' + status: 'on' + + extents84: &extents84 + extent: *world + srs-name: "WGS84" + srs: "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs" + + osm2pgsql: &osm2pgsql + type: "postgis" + dbname: "osm" + key_field: "" + geometry_field: "way" + extent: "-20037508,-20037508,20037508,20037508" + host: db.openstreetmap.world + user: osmbr + password: m4d31nbr31zh + asynchronous_request: true + max_async_connection: 4 + max_size: 50 + cursor_size: 5000 + + +# stylesheets +Stylesheet: + - styles/control_map.mss + + +# the layers +Layer: + + - id: land_high + geometry: polygon + <<: *extents + Datasource: + file: /data/styles/data/land-polygons-split-3857/land_polygons.shp + type: shape + + + - id: places + geometry: point + <<: *extents + Datasource: + <<: *osm2pgsql + table: |- + (SELECT + a.osm_id, a.name, b.local_name, + CASE + WHEN b.local_name IS NULL THEN 'null' + ELSE 'done' + END AS check, + a.way + FROM planet_osm_point a + FULL JOIN + ( + SELECT osm_id, tags -> 'name:ca' AS local_name + FROM planet_osm_point + WHERE (tags -> 'name:ca'::text IS NOT NULL) + ) AS b ON a.osm_id = b.osm_id + WHERE name IS NOT NULL AND place IS NOT NULL + ) AS places + simplify_geometries: 'false' + properties: + minzoom: 10 + + + - id: ways + geometry: linestring + <<: *extents + Datasource: + <<: *osm2pgsql + table: |- + (SELECT + a.osm_id, a.name, b.local_name, + CASE + WHEN b.local_name IS NULL THEN 'null' + ELSE 'done' + END AS check, + a.way + FROM planet_osm_line a + FULL JOIN + ( + SELECT osm_id, tags -> 'name:ca' AS local_name + FROM planet_osm_line + WHERE (tags -> 'name:ca'::text IS NOT NULL) + ) AS b ON a.osm_id = b.osm_id + WHERE name IS NOT NULL AND highway IS NOT NULL + ) AS ways + simplify_geometries: 'true' + properties: + minzoom: 10 + + diff --git a/scripts/yaml2xml.sh b/scripts/yaml2xml.sh index 52913c5..a9df390 100755 --- a/scripts/yaml2xml.sh +++ b/scripts/yaml2xml.sh @@ -34,6 +34,13 @@ cp osm_gsw.yml osm_gsw.mml carto osm_gsw.mml > osm_gsw.xml rm osm_gsw.mml +echo "" +echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++" +echo " CA" + +cp osm_ca.yml osm_ca.mml +carto osm_ca.mml > osm_ca.xml +rm osm_ca.mml echo "" echo "" diff --git a/scripts/yaml2xml_control.sh b/scripts/yaml2xml_control.sh index bbc62de..490a50a 100755 --- a/scripts/yaml2xml_control.sh +++ b/scripts/yaml2xml_control.sh @@ -34,6 +34,13 @@ cp osm_gsw_control.yml osm_gsw_control.mml carto osm_gsw_control.mml > osm_gsw_control.xml rm osm_gsw_control.mml +echo "" +echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++" +echo " CA" + +cp osm_ca_control.yml osm_ca_control.mml +carto osm_ca_control.mml > osm_ca_control.xml +rm osm_ca_control.mml echo "" echo ""