Add aeroway_label layer
This commit is contained in:
parent
15cb940872
commit
db5cd682ea
7
layers/aerodrome_label/README.md
Normal file
7
layers/aerodrome_label/README.md
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
## Aerodrome Labels
|
||||||
|
|
||||||
|
### Mapping Diagram
|
||||||
|

|
||||||
|
|
||||||
|
### ETL diagram
|
||||||
|

|
||||||
37
layers/aerodrome_label/aerodrome_label.yaml
Normal file
37
layers/aerodrome_label/aerodrome_label.yaml
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
layer:
|
||||||
|
id: "aerodrome_label"
|
||||||
|
description: |
|
||||||
|
[Aerodrome labels](http://wiki.openstreetmap.org/wiki/Tag:aeroway%3Daerodrome)
|
||||||
|
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
|
||||||
|
fields:
|
||||||
|
name: The OSM [`name`](http://wiki.openstreetmap.org/wiki/Key:name) value of the aerodrome.
|
||||||
|
name_en: English name `name:en` if available, otherwise `name`.
|
||||||
|
name_de: German name `name:de` if available, otherwise `name` or `name:en`.
|
||||||
|
class:
|
||||||
|
description: |
|
||||||
|
Distinguish between more and less important aerodromes.
|
||||||
|
Class is derived from the value of
|
||||||
|
[`aerodrome`](http://wiki.openstreetmap.org/wiki/Proposed_features/Aerodrome)
|
||||||
|
and `aerodrome:type` tags.
|
||||||
|
values:
|
||||||
|
- international
|
||||||
|
- public
|
||||||
|
- regional
|
||||||
|
- military
|
||||||
|
- private
|
||||||
|
- other
|
||||||
|
iata: 3-character code issued by the IATA.
|
||||||
|
icao: 4-letter code issued by the ICAO.
|
||||||
|
ele: Elevation (`ele`) in meters.
|
||||||
|
ele_ft: Elevation (`ele`) in feets.
|
||||||
|
datasource:
|
||||||
|
geometry_field: geometry
|
||||||
|
srid: 900913
|
||||||
|
query: (SELECT osm_id, geometry, name, name_en, name_de, {name_languages}, class, iata, icao, ele, ele_ft FROM layer_aerodrome_label (!bbox!, z(!scale_denominator!), !pixel_width!)) AS t
|
||||||
|
schema:
|
||||||
|
- ./update.sql
|
||||||
|
- ./layer.sql
|
||||||
|
datasources:
|
||||||
|
- type: imposm3
|
||||||
|
mapping_file: ./mapping.yaml
|
||||||
BIN
layers/aerodrome_label/etl_diagram.png
Normal file
BIN
layers/aerodrome_label/etl_diagram.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 15 KiB |
60
layers/aerodrome_label/layer.sql
Normal file
60
layers/aerodrome_label/layer.sql
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
|
||||||
|
-- etldoc: layer_aerodrome_label[shape=record fillcolor=lightpink, style="rounded,filled", label="layer_aerodrome_label | <z10_> z10+" ] ;
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION layer_aerodrome_label(
|
||||||
|
bbox geometry,
|
||||||
|
zoom_level integer,
|
||||||
|
pixel_width numeric)
|
||||||
|
RETURNS TABLE(
|
||||||
|
osm_id bigint,
|
||||||
|
geometry geometry,
|
||||||
|
name text,
|
||||||
|
name_en text,
|
||||||
|
name_de text,
|
||||||
|
tags hstore,
|
||||||
|
class text,
|
||||||
|
iata text,
|
||||||
|
icao text,
|
||||||
|
ele int,
|
||||||
|
ele_ft int) AS
|
||||||
|
$$
|
||||||
|
-- etldoc: osm_aerodrome_label_point -> layer_aerodrome_label:z10_
|
||||||
|
SELECT
|
||||||
|
osm_id,
|
||||||
|
geometry,
|
||||||
|
name,
|
||||||
|
COALESCE(NULLIF(name_en, ''), name) AS name_en,
|
||||||
|
COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de,
|
||||||
|
tags,
|
||||||
|
CASE
|
||||||
|
WHEN aerodrome = 'international'
|
||||||
|
OR aerodrome_type = 'international'
|
||||||
|
THEN 'international'
|
||||||
|
WHEN
|
||||||
|
aerodrome = 'public'
|
||||||
|
OR aerodrome_type LIKE '%public%'
|
||||||
|
OR aerodrome_type = 'civil'
|
||||||
|
THEN 'public'
|
||||||
|
WHEN
|
||||||
|
aerodrome = 'regional'
|
||||||
|
OR aerodrome_type = 'regional'
|
||||||
|
THEN 'regional'
|
||||||
|
WHEN
|
||||||
|
aerodrome = 'military'
|
||||||
|
OR aerodrome_type LIKE '%military%'
|
||||||
|
OR military = 'airfield'
|
||||||
|
THEN 'military'
|
||||||
|
WHEN
|
||||||
|
aerodrome = 'private'
|
||||||
|
OR aerodrome_type = 'private'
|
||||||
|
THEN 'private'
|
||||||
|
ELSE 'other'
|
||||||
|
END AS class,
|
||||||
|
NULLIF(iata, '') AS iata,
|
||||||
|
NULLIF(icao, '') AS icao,
|
||||||
|
substring(ele from E'^(-?\\d+)(\\D|$)')::int AS ele,
|
||||||
|
round(substring(ele from E'^(-?\\d+)(\\D|$)')::int*3.2808399)::int AS ele_ft
|
||||||
|
FROM osm_aerodrome_label_point
|
||||||
|
WHERE geometry && bbox AND zoom_level >= 10;
|
||||||
|
|
||||||
|
$$ LANGUAGE SQL IMMUTABLE;
|
||||||
46
layers/aerodrome_label/mapping.yaml
Normal file
46
layers/aerodrome_label/mapping.yaml
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
tables:
|
||||||
|
|
||||||
|
# etldoc: imposm3 -> osm_aerodrome_label_point
|
||||||
|
aerodrome_label_point:
|
||||||
|
type: geometry
|
||||||
|
fields:
|
||||||
|
- name: osm_id
|
||||||
|
type: id
|
||||||
|
- name: geometry
|
||||||
|
type: geometry
|
||||||
|
- name: name
|
||||||
|
key: name
|
||||||
|
type: string
|
||||||
|
- name: name_en
|
||||||
|
key: name:en
|
||||||
|
type: string
|
||||||
|
- name: name_de
|
||||||
|
key: name:de
|
||||||
|
type: string
|
||||||
|
- name: tags
|
||||||
|
type: hstore_tags
|
||||||
|
- name: aerodrome_type
|
||||||
|
key: aerodrome:type
|
||||||
|
type: string
|
||||||
|
- name: aerodrome
|
||||||
|
key: aerodrome
|
||||||
|
type: string
|
||||||
|
- name: military
|
||||||
|
key: military
|
||||||
|
type: string
|
||||||
|
- name: iata
|
||||||
|
key: iata
|
||||||
|
type: string
|
||||||
|
- name: icao
|
||||||
|
key: icao
|
||||||
|
type: string
|
||||||
|
- name: ele
|
||||||
|
key: ele
|
||||||
|
type: string
|
||||||
|
type_mappings:
|
||||||
|
points:
|
||||||
|
aeroway:
|
||||||
|
- aerodrome
|
||||||
|
polygons:
|
||||||
|
aeroway:
|
||||||
|
- aerodrome
|
||||||
BIN
layers/aerodrome_label/mapping_diagram.png
Normal file
BIN
layers/aerodrome_label/mapping_diagram.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 114 B |
51
layers/aerodrome_label/update.sql
Normal file
51
layers/aerodrome_label/update.sql
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
DROP TRIGGER IF EXISTS trigger_flag ON osm_aerodrome_label_point;
|
||||||
|
DROP TRIGGER IF EXISTS trigger_refresh ON aerodrome_label.updates;
|
||||||
|
|
||||||
|
-- etldoc: osm_aerodrome_label_point -> osm_aerodrome_label_point
|
||||||
|
CREATE OR REPLACE FUNCTION update_aerodrome_label_point() RETURNS VOID AS $$
|
||||||
|
BEGIN
|
||||||
|
UPDATE osm_aerodrome_label_point
|
||||||
|
SET geometry = ST_Centroid(geometry)
|
||||||
|
WHERE ST_GeometryType(geometry) <> 'ST_Point';
|
||||||
|
|
||||||
|
UPDATE osm_aerodrome_label_point
|
||||||
|
SET tags = slice_language_tags(tags) || get_basic_names(tags, geometry)
|
||||||
|
WHERE COALESCE(tags->'name:latin', tags->'name:nonlatin', tags->'name_int') IS NULL;
|
||||||
|
END;
|
||||||
|
$$ LANGUAGE plpgsql;
|
||||||
|
|
||||||
|
SELECT update_aerodrome_label_point();
|
||||||
|
|
||||||
|
-- Handle updates
|
||||||
|
|
||||||
|
CREATE SCHEMA IF NOT EXISTS aerodrome_label;
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS aerodrome_label.updates(id serial primary key, t text, unique (t));
|
||||||
|
CREATE OR REPLACE FUNCTION aerodrome_label.flag() RETURNS trigger AS $$
|
||||||
|
BEGIN
|
||||||
|
INSERT INTO aerodrome_label.updates(t) VALUES ('y') ON CONFLICT(t) DO NOTHING;
|
||||||
|
RETURN null;
|
||||||
|
END;
|
||||||
|
$$ language plpgsql;
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION aerodrome_label.refresh() RETURNS trigger AS
|
||||||
|
$BODY$
|
||||||
|
BEGIN
|
||||||
|
RAISE LOG 'Refresh aerodrome_label';
|
||||||
|
PERFORM update_aerodrome_label_point();
|
||||||
|
DELETE FROM aerodrome_label.updates;
|
||||||
|
RETURN null;
|
||||||
|
END;
|
||||||
|
$BODY$
|
||||||
|
language plpgsql;
|
||||||
|
|
||||||
|
CREATE TRIGGER trigger_flag
|
||||||
|
AFTER INSERT OR UPDATE OR DELETE ON osm_aerodrome_label_point
|
||||||
|
FOR EACH STATEMENT
|
||||||
|
EXECUTE PROCEDURE aerodrome_label.flag();
|
||||||
|
|
||||||
|
CREATE CONSTRAINT TRIGGER trigger_refresh
|
||||||
|
AFTER INSERT ON aerodrome_label.updates
|
||||||
|
INITIALLY DEFERRED
|
||||||
|
FOR EACH ROW
|
||||||
|
EXECUTE PROCEDURE aerodrome_label.refresh();
|
||||||
@ -15,6 +15,7 @@ tileset:
|
|||||||
- 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/aerodrome_label/aerodrome_label.yaml
|
||||||
name: OpenMapTiles
|
name: OpenMapTiles
|
||||||
version: 3.3.0
|
version: 3.3.0
|
||||||
id: openmaptiles
|
id: openmaptiles
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user