Multilinguality (#279)
Improve multilinguality: names in 57 languages, name:latin, name:nonlatin, name_int. Fixes #211 #252 #80. See #279 for more info.
This commit is contained in:
@@ -4,10 +4,11 @@
|
||||
|
||||
-- etldoc: osm_city_point -> layer_city:z2_14
|
||||
CREATE OR REPLACE FUNCTION layer_city(bbox geometry, zoom_level int, pixel_width numeric)
|
||||
RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, name_de text, place city_place, "rank" int, capital int) AS $$
|
||||
RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, name_de text, tags hstore, place city_place, "rank" int, capital int) AS $$
|
||||
SELECT osm_id, geometry, name,
|
||||
COALESCE(NULLIF(name_en, ''), name) AS name_en,
|
||||
COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de,
|
||||
tags,
|
||||
place, "rank", normalize_capital_level(capital) AS capital
|
||||
FROM osm_city_point
|
||||
WHERE geometry && bbox
|
||||
@@ -18,6 +19,7 @@ RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, name_de
|
||||
SELECT osm_id, geometry, name,
|
||||
COALESCE(NULLIF(name_en, ''), name) AS name_en,
|
||||
COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de,
|
||||
tags,
|
||||
place,
|
||||
COALESCE("rank", gridrank + 10),
|
||||
normalize_capital_level(capital) AS capital
|
||||
@@ -25,6 +27,7 @@ RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, name_de
|
||||
SELECT osm_id, geometry, name,
|
||||
COALESCE(NULLIF(name_en, ''), name) AS name_en,
|
||||
COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de,
|
||||
tags,
|
||||
place, "rank", capital,
|
||||
row_number() OVER (
|
||||
PARTITION BY LabelGrid(geometry, 128 * pixel_width)
|
||||
|
||||
@@ -3,13 +3,14 @@
|
||||
-- etldoc: label="layer_place | <z0_3> z0-3|<z4_7> z4-7|<z8_11> z8-11| <z12_14> z12-z14+" ] ;
|
||||
|
||||
CREATE OR REPLACE FUNCTION layer_place(bbox geometry, zoom_level int, pixel_width numeric)
|
||||
RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, name_de text, class text, "rank" int, capital INT) AS $$
|
||||
RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, name_de text, tags hstore, class text, "rank" int, capital INT) AS $$
|
||||
|
||||
-- etldoc: osm_continent_point -> layer_place:z0_3
|
||||
SELECT
|
||||
osm_id, geometry, name,
|
||||
COALESCE(NULLIF(name_en, ''), name) AS name_en,
|
||||
COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de,
|
||||
tags,
|
||||
'continent' AS class, 1 AS "rank", NULL::int AS capital
|
||||
FROM osm_continent_point
|
||||
WHERE geometry && bbox AND zoom_level < 4
|
||||
@@ -23,6 +24,7 @@ RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, name_de
|
||||
osm_id, geometry, name,
|
||||
COALESCE(NULLIF(name_en, ''), name) AS name_en,
|
||||
COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de,
|
||||
tags,
|
||||
'country' AS class, "rank", NULL::int AS capital
|
||||
FROM osm_country_point
|
||||
WHERE geometry && bbox AND "rank" <= zoom_level + 1 AND name <> ''
|
||||
@@ -36,6 +38,7 @@ RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, name_de
|
||||
osm_id, geometry, name,
|
||||
COALESCE(NULLIF(name_en, ''), name) AS name_en,
|
||||
COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de,
|
||||
tags,
|
||||
'state' AS class, "rank", NULL::int AS capital
|
||||
FROM osm_state_point
|
||||
WHERE geometry && bbox AND
|
||||
@@ -51,6 +54,7 @@ RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, name_de
|
||||
osm_id, geometry, name,
|
||||
COALESCE(NULLIF(name_en, ''), name) AS name_en,
|
||||
COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de,
|
||||
tags,
|
||||
'island' AS class, 7 AS "rank", NULL::int AS capital
|
||||
FROM osm_island_point
|
||||
WHERE zoom_level >= 12
|
||||
@@ -63,6 +67,7 @@ RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, name_de
|
||||
osm_id, geometry, name,
|
||||
COALESCE(NULLIF(name_en, ''), name) AS name_en,
|
||||
COALESCE(NULLIF(name_de, ''), name, name_en) AS name_de,
|
||||
tags,
|
||||
'island' AS class, island_rank(area) AS "rank", NULL::int AS capital
|
||||
FROM osm_island_polygon
|
||||
WHERE geometry && bbox AND
|
||||
@@ -77,6 +82,7 @@ RETURNS TABLE(osm_id bigint, geometry geometry, name text, name_en text, name_de
|
||||
-- etldoc: layer_city -> layer_place:z12_14
|
||||
SELECT
|
||||
osm_id, geometry, name, name_en, name_de,
|
||||
tags,
|
||||
place::text AS class, "rank", capital
|
||||
FROM layer_city(bbox, zoom_level, pixel_width)
|
||||
ORDER BY "rank" ASC
|
||||
|
||||
@@ -6,38 +6,10 @@ name_en_field: &name_en
|
||||
name: name_en
|
||||
key: name:en
|
||||
type: string
|
||||
name_fr_field: &name_fr
|
||||
name: name_fr
|
||||
key: name:fr
|
||||
type: string
|
||||
name_de_field: &name_de
|
||||
name: name_de
|
||||
key: name:de
|
||||
type: string
|
||||
name_es_field: &name_es
|
||||
name: name_es
|
||||
key: name:es
|
||||
type: string
|
||||
name_pt_field: &name_pt
|
||||
name: name_pt
|
||||
key: name:pt
|
||||
type: string
|
||||
name_ru_field: &name_ru
|
||||
name: name_ru
|
||||
key: name:ru
|
||||
type: string
|
||||
name_zh_field: &name_zh
|
||||
name: name_zh
|
||||
key: name:zh
|
||||
type: string
|
||||
name_ar_field: &name_ar
|
||||
name: name_ar
|
||||
key: name:ar
|
||||
type: string
|
||||
name_ja_field: &name_ja
|
||||
name: name_ja
|
||||
key: name:ja
|
||||
type: string
|
||||
rank_field: &rank
|
||||
name: rank
|
||||
key: rank
|
||||
@@ -56,6 +28,8 @@ tables:
|
||||
- *name
|
||||
- *name_en
|
||||
- *name_de
|
||||
- name: tags
|
||||
type: hstore_tags
|
||||
filters:
|
||||
require:
|
||||
name: ["__any__"]
|
||||
@@ -74,14 +48,9 @@ tables:
|
||||
- *name
|
||||
- *name_en
|
||||
- *name_de
|
||||
- *name_fr
|
||||
- *name_es
|
||||
- *name_pt
|
||||
- *name_ru
|
||||
- *name_zh
|
||||
- *name_ar
|
||||
- *name_ja
|
||||
- *rank
|
||||
- name: tags
|
||||
type: hstore_tags
|
||||
filters:
|
||||
require:
|
||||
name: ["__any__"]
|
||||
@@ -104,13 +73,8 @@ tables:
|
||||
- *name
|
||||
- *name_en
|
||||
- *name_de
|
||||
- *name_fr
|
||||
- *name_es
|
||||
- *name_pt
|
||||
- *name_ru
|
||||
- *name_zh
|
||||
- *name_ar
|
||||
- *name_ja
|
||||
- name: tags
|
||||
type: hstore_tags
|
||||
- *rank
|
||||
filters:
|
||||
require:
|
||||
@@ -130,13 +94,8 @@ tables:
|
||||
- *name
|
||||
- *name_en
|
||||
- *name_de
|
||||
- *name_fr
|
||||
- *name_es
|
||||
- *name_pt
|
||||
- *name_ru
|
||||
- *name_zh
|
||||
- *name_ar
|
||||
- *name_ja
|
||||
- name: tags
|
||||
type: hstore_tags
|
||||
- *rank
|
||||
filters:
|
||||
require:
|
||||
@@ -156,13 +115,8 @@ tables:
|
||||
- *name
|
||||
- *name_en
|
||||
- *name_de
|
||||
- *name_fr
|
||||
- *name_es
|
||||
- *name_pt
|
||||
- *name_ru
|
||||
- *name_zh
|
||||
- *name_ar
|
||||
- *name_ja
|
||||
- name: tags
|
||||
type: hstore_tags
|
||||
- name: is_in_country
|
||||
key: is_in:country
|
||||
type: string
|
||||
@@ -191,13 +145,8 @@ tables:
|
||||
- *name
|
||||
- *name_en
|
||||
- *name_de
|
||||
- *name_fr
|
||||
- *name_es
|
||||
- *name_pt
|
||||
- *name_ru
|
||||
- *name_zh
|
||||
- *name_ar
|
||||
- *name_ja
|
||||
- name: tags
|
||||
type: hstore_tags
|
||||
- name: place
|
||||
key: place
|
||||
type: string
|
||||
|
||||
9
layers/place/name.sql
Normal file
9
layers/place/name.sql
Normal file
@@ -0,0 +1,9 @@
|
||||
DO $$
|
||||
BEGIN
|
||||
update osm_continent_point SET tags = slice_language_tags(tags) || get_basic_names(tags, geometry);
|
||||
update osm_country_point SET tags = slice_language_tags(tags) || get_basic_names(tags, geometry);
|
||||
update osm_island_polygon SET tags = slice_language_tags(tags) || get_basic_names(tags, geometry);
|
||||
update osm_island_point SET tags = slice_language_tags(tags) || get_basic_names(tags, geometry);
|
||||
update osm_state_point SET tags = slice_language_tags(tags) || get_basic_names(tags, geometry);
|
||||
update osm_city_point SET tags = slice_language_tags(tags) || get_basic_names(tags, geometry);
|
||||
END $$;
|
||||
@@ -53,8 +53,9 @@ layer:
|
||||
buffer_size: 256
|
||||
datasource:
|
||||
geometry_field: geometry
|
||||
query: (SELECT geometry, name, name_en, name_de, class, rank, capital FROM layer_place(!bbox!, z(!scale_denominator!), !pixel_width!)) AS t
|
||||
query: (SELECT geometry, name, name_en, name_de, {name_languages}, class, rank, capital FROM layer_place(!bbox!, z(!scale_denominator!), !pixel_width!)) AS t
|
||||
schema:
|
||||
- ./name.sql
|
||||
- ./types.sql
|
||||
- ./capital.sql
|
||||
- ./city.sql
|
||||
|
||||
Reference in New Issue
Block a user