kopia lustrzana https://github.com/openmaptiles/openmaptiles
				
				
				
			
		
			
				
	
	
		
			119 wiersze
		
	
	
		
			3.6 KiB
		
	
	
	
		
			PL/PgSQL
		
	
	
			
		
		
	
	
			119 wiersze
		
	
	
		
			3.6 KiB
		
	
	
	
		
			PL/PgSQL
		
	
	
| -- etldoc: osm_peak_point -> peak_point
 | |
| -- etldoc: ne_10m_admin_0_countries -> peak_point
 | |
| CREATE OR REPLACE VIEW peak_point AS
 | |
| (
 | |
| SELECT pp.osm_id,
 | |
|        pp.geometry,
 | |
|        pp.name,
 | |
|        pp.name_en,
 | |
|        pp.name_de,
 | |
|        pp.tags,
 | |
|        pp.ele,
 | |
|        ne.iso_a2,
 | |
|        pp.wikipedia
 | |
| FROM osm_peak_point pp, ne_10m_admin_0_countries ne
 | |
| WHERE ST_Intersects(pp.geometry, ne.geometry)
 | |
|     );
 | |
| 
 | |
| 
 | |
| 
 | |
| -- etldoc: layer_mountain_peak[shape=record fillcolor=lightpink,
 | |
| -- etldoc:     style="rounded,filled", label="layer_mountain_peak | <z7_> z7+ | <z13_> z13+" ] ;
 | |
| 
 | |
| CREATE OR REPLACE FUNCTION layer_mountain_peak(bbox geometry,
 | |
|                                                zoom_level integer,
 | |
|                                                pixel_width numeric)
 | |
|     RETURNS TABLE
 | |
|             (
 | |
|                 osm_id          bigint,
 | |
|                 geometry        geometry,
 | |
|                 name            text,
 | |
|                 name_en         text,
 | |
|                 name_de         text,
 | |
|                 class           text,
 | |
|                 tags            hstore,
 | |
|                 ele             int,
 | |
|                 ele_ft          int,
 | |
|                 customary_ft    int,
 | |
|                 "rank"          int
 | |
|             )
 | |
| AS
 | |
| $$
 | |
| SELECT
 | |
|     -- etldoc: peak_point -> layer_mountain_peak:z7_
 | |
|     osm_id,
 | |
|     geometry,
 | |
|     name,
 | |
|     name_en,
 | |
|     name_de,
 | |
|     tags->'natural' AS class,
 | |
|     tags,
 | |
|     ele::int,
 | |
|     ele_ft::int,
 | |
|     customary_ft,
 | |
|     rank::int
 | |
| FROM (
 | |
|          SELECT osm_id,
 | |
|                 geometry,
 | |
|                 name,
 | |
|                 COALESCE(NULLIF(name_en, ''), name) AS name_en,
 | |
|                 COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de,
 | |
|                 tags,
 | |
|                 substring(ele FROM E'^(-?\\d+)(\\D|$)')::int AS ele,
 | |
|                 round(substring(ele FROM E'^(-?\\d+)(\\D|$)')::int * 3.2808399)::int AS ele_ft,
 | |
|                 CASE WHEN iso_a2 = 'US' THEN 1 END AS customary_ft,
 | |
|                 row_number() OVER (
 | |
|                     PARTITION BY LabelGrid(geometry, 100 * pixel_width)
 | |
|                     ORDER BY (
 | |
|                             substring(ele FROM E'^(-?\\d+)(\\D|$)')::int +
 | |
|                             (CASE WHEN wikipedia <> '' THEN 10000 ELSE 0 END) +
 | |
|                             (CASE WHEN name <> '' THEN 10000 ELSE 0 END)
 | |
|                         ) DESC
 | |
|                     )::int AS "rank"
 | |
|          FROM peak_point
 | |
|          WHERE geometry && bbox
 | |
|            AND ele IS NOT NULL
 | |
|            AND ele ~ E'^-?\\d{1,4}(\\D|$)'
 | |
|      ) AS ranked_peaks
 | |
| WHERE zoom_level >= 7
 | |
|   AND (rank <= 5 OR zoom_level >= 14)
 | |
| 
 | |
| UNION ALL
 | |
| 
 | |
| SELECT
 | |
|     -- etldoc: osm_mountain_linestring -> layer_mountain_peak:z13_
 | |
|     osm_id,
 | |
|     geometry,
 | |
|     name,
 | |
|     name_en,
 | |
|     name_de,
 | |
|     tags->'natural' AS class,
 | |
|     tags,
 | |
|     NULL AS ele,
 | |
|     NULL AS ele_ft,
 | |
|     NULL AS customary_ft,
 | |
|     rank::int
 | |
| FROM (
 | |
|          SELECT osm_id,
 | |
|                 geometry,
 | |
|                 name,
 | |
|                 COALESCE(NULLIF(name_en, ''), name) AS name_en,
 | |
|                 COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de,
 | |
|                 tags,
 | |
|                 row_number() OVER (
 | |
|                     PARTITION BY LabelGrid(geometry, 100 * pixel_width)
 | |
|                     ORDER BY (
 | |
|                             (CASE WHEN wikipedia <> '' THEN 10000 ELSE 0 END) +
 | |
|                             (CASE WHEN name <> '' THEN 10000 ELSE 0 END)
 | |
|                         ) DESC
 | |
|                     )::int AS "rank"
 | |
|          FROM osm_mountain_linestring
 | |
|          WHERE geometry && bbox
 | |
|      ) AS ranked_mountain_linestring
 | |
| WHERE zoom_level >= 13
 | |
| ORDER BY "rank" ASC;
 | |
| 
 | |
| $$ LANGUAGE SQL STABLE
 | |
|                 PARALLEL SAFE;
 | |
| -- TODO: Check if the above can be made STRICT -- i.e. if pixel_width could be NULL
 |