From 010b764d40b872dfc70eb5ffac6d3e61d1632ca0 Mon Sep 17 00:00:00 2001 From: Tomas Vajda Date: Tue, 30 Jul 2019 19:14:02 +0200 Subject: [PATCH 01/27] Try add contours layer --- queries.yaml | 137 +++----------------------------- queries/contours.jinja2 | 14 ++++ vectordatasource/meta/python.py | 2 +- vectordatasource/sort.py | 4 + yaml/contours.yaml | 14 ++++ 5 files changed, 44 insertions(+), 127 deletions(-) create mode 100644 queries/contours.jinja2 create mode 100644 yaml/contours.yaml diff --git a/queries.yaml b/queries.yaml index f25324d9c..b23e9d474 100644 --- a/queries.yaml +++ b/queries.yaml @@ -9,6 +9,7 @@ all: - boundaries - transit - admin_areas + - contours sources: @@ -20,135 +21,19 @@ sources: # NOTE: end_zoom is exclusive - planet_osm_polygon: - - template: planet_osm_polygon.jinja2 - # landuse and pois start at 4 - start_zoom: 4 - planet_osm_line: - - template: planet_osm_line.jinja2 - # transit starts at 5 - start_zoom: 5 - planet_osm_point: - # earth and places start at zoom 0 - - template: planet_osm_point.jinja2 - - ne: - ## places - # ne_10m_populated_places - - template: ne-places.jinja2 - - ## boundaries - - # ne_110m_admin_0_boundary_lines_land - - template: ne-boundaries-110m.jinja2 - end_zoom: 2 - - # ne_50m_admin_0_boundary_lines_land - # ne_50m_admin_1_states_provinces_lines - - template: ne-boundaries-50m.jinja2 - start_zoom: 2 - end_zoom: 5 - - # ne_10m_admin_0_boundary_lines_land - # ne_10m_admin_0_boundary_lines_map_units - # ne_10m_admin_1_states_provinces_lines - - template: ne-boundaries-10m.jinja2 - start_zoom: 5 - end_zoom: 8 - - ## earth - - # ne_110m_land - - template: ne-earth-110m.jinja2 - end_zoom: 2 - - # ne_50m_land - - template: ne-earth-50m.jinja2 - start_zoom: 2 - end_zoom: 5 - - # ne_10m_land - - template: ne-earth-10m.jinja2 - start_zoom: 5 - end_zoom: 8 - - ## landuse - - # ne_50m_urban_areas - - template: ne-landuse-50m.jinja2 - start_zoom: 4 - end_zoom: 6 - - # ne_10m_urban_areas - - template: ne-landuse-10m.jinja2 - start_zoom: 6 - end_zoom: 10 - - ## roads - - # ne_10m_roads - - template: ne-roads.jinja2 - start_zoom: 5 - end_zoom: 8 - - ## water - - # ne_110m_ocean - # ne_110m_lakes - # ne_110m_coastline - # ne_110m_lakes - - template: ne-water-110m.jinja2 - end_zoom: 2 - - # ne_50m_ocean - # ne_50m_lakes - # ne_50m_coastline - # ne_50m_lakes - - template: ne-water-50m.jinja2 - start_zoom: 2 - end_zoom: 5 - - # ne_10m_ocean - # ne_10m_lakes - # ne_10m_coastline - # ne_10m_lakes - - template: ne-water-10m.jinja2 - start_zoom: 5 - end_zoom: 8 - - # ne_50m_playas - - template: ne-water-playas-50m.jinja2 - start_zoom: 4 - end_zoom: 5 - - # ne_10m_playas - - template: ne-water-playas-10m.jinja2 - start_zoom: 5 - end_zoom: 8 - - osmdata: - - - template: osmdata-earth.jinja2 - start_zoom: 8 - - - template: osmdata-water.jinja2 - start_zoom: 8 - - wof: - - template: wof.jinja2 + contours: + - template: contours.jinja2 start_zoom: 11 - admin_areas: - - template: admin_areas.jinja2 - # starts at the min zoom where we have road layer data - start_zoom: 5 - - # note: this goes into the _boundaries_ layer. - buffered_land: - - template: buffered_land.jinja2 - start_zoom: 8 - layers: + contours: + geometry_types: [Point, MultiPoint, Polygon, MultiPolygon, LineString, MultiLineString] + simplify_before_intersect: true + simplify_start: 11 + transform: + - vectordatasource.transform.add_id_to_properties + sort: vectordatasource.sort.contours + area-inclusion-threshold: 1 water: geometry_types: [Point, MultiPoint, Polygon, MultiPolygon, LineString, MultiLineString] simplify_before_intersect: true diff --git a/queries/contours.jinja2 b/queries/contours.jinja2 new file mode 100644 index 000000000..81ef5df5c --- /dev/null +++ b/queries/contours.jinja2 @@ -0,0 +1,14 @@ +SELECT + osm_id AS __id__, + + {% filter geometry %}{{ bounds['polygon']|bbox_intersection('way') }}{% endfilter %} AS __geometry__, + + -- common properties across all layers + to_jsonb(tags) || jsonb_build_object( + 'source', 'openstreetmap.org' + ) AS __properties__ + +FROM planet_osm_line + +WHERE + {{ bounds['polygon']|bbox_filter('way', 3857) }} diff --git a/vectordatasource/meta/python.py b/vectordatasource/meta/python.py index e65a7d383..3045edf9f 100644 --- a/vectordatasource/meta/python.py +++ b/vectordatasource/meta/python.py @@ -580,7 +580,7 @@ def compile(self, matchers, fn_name): def parse_layers(yaml_path, output_fn, fn_name_fn): layer_data = [] layers = ('landuse', 'pois', 'transit', 'water', 'places', 'boundaries', - 'buildings', 'roads', 'earth', 'admin_areas') + 'buildings', 'roads', 'earth', 'admin_areas', 'contours') filter_compiler = FilterCompiler() diff --git a/vectordatasource/sort.py b/vectordatasource/sort.py index a8f9e6c5a..1966bd66a 100644 --- a/vectordatasource/sort.py +++ b/vectordatasource/sort.py @@ -95,3 +95,7 @@ def water(features, zoom): def transit(features, zoom): return _sort_features_by_key(features, _by_feature_id) + + +def contours(features, zoom): + return _sort_by_area_then_id(features) diff --git a/yaml/contours.yaml b/yaml/contours.yaml new file mode 100644 index 000000000..176fb6a57 --- /dev/null +++ b/yaml/contours.yaml @@ -0,0 +1,14 @@ +global: + + - &output_properties + id: {col: id} + kind: 'contour' + +filters: + + - filter: + id: true + output: + <<: *output_properties + table: osm + From e3f62906a532e1ec1722a0568407a0b94b41fd6e Mon Sep 17 00:00:00 2001 From: Tomas Vajda Date: Tue, 20 Aug 2019 13:41:09 +0200 Subject: [PATCH 02/27] Add contours layer --- queries.yaml | 154 ++++++++++++++++++++++++++-- queries/contours.jinja2 | 30 ++++-- spreadsheets/collision_rank.yaml | 3 + spreadsheets/sort_rank/contours.csv | 2 + vectordatasource/meta/sql.py | 3 + yaml/contours.yaml | 13 +-- 6 files changed, 184 insertions(+), 21 deletions(-) create mode 100644 spreadsheets/sort_rank/contours.csv diff --git a/queries.yaml b/queries.yaml index b23e9d474..6d0b4ab5c 100644 --- a/queries.yaml +++ b/queries.yaml @@ -21,19 +21,139 @@ sources: # NOTE: end_zoom is exclusive + planet_osm_polygon: + - template: planet_osm_polygon.jinja2 + # landuse and pois start at 4 + start_zoom: 4 + planet_osm_line: + - template: planet_osm_line.jinja2 + # transit starts at 5 + start_zoom: 5 + planet_osm_point: + # earth and places start at zoom 0 + - template: planet_osm_point.jinja2 + + ne: + ## places + # ne_10m_populated_places + - template: ne-places.jinja2 + + ## boundaries + + # ne_110m_admin_0_boundary_lines_land + - template: ne-boundaries-110m.jinja2 + end_zoom: 2 + + # ne_50m_admin_0_boundary_lines_land + # ne_50m_admin_1_states_provinces_lines + - template: ne-boundaries-50m.jinja2 + start_zoom: 2 + end_zoom: 5 + + # ne_10m_admin_0_boundary_lines_land + # ne_10m_admin_0_boundary_lines_map_units + # ne_10m_admin_1_states_provinces_lines + - template: ne-boundaries-10m.jinja2 + start_zoom: 5 + end_zoom: 8 + + ## earth + + # ne_110m_land + - template: ne-earth-110m.jinja2 + end_zoom: 2 + + # ne_50m_land + - template: ne-earth-50m.jinja2 + start_zoom: 2 + end_zoom: 5 + + # ne_10m_land + - template: ne-earth-10m.jinja2 + start_zoom: 5 + end_zoom: 8 + + ## landuse + + # ne_50m_urban_areas + - template: ne-landuse-50m.jinja2 + start_zoom: 4 + end_zoom: 6 + + # ne_10m_urban_areas + - template: ne-landuse-10m.jinja2 + start_zoom: 6 + end_zoom: 10 + + ## roads + + # ne_10m_roads + - template: ne-roads.jinja2 + start_zoom: 5 + end_zoom: 8 + + ## water + + # ne_110m_ocean + # ne_110m_lakes + # ne_110m_coastline + # ne_110m_lakes + - template: ne-water-110m.jinja2 + end_zoom: 2 + + # ne_50m_ocean + # ne_50m_lakes + # ne_50m_coastline + # ne_50m_lakes + - template: ne-water-50m.jinja2 + start_zoom: 2 + end_zoom: 5 + + # ne_10m_ocean + # ne_10m_lakes + # ne_10m_coastline + # ne_10m_lakes + - template: ne-water-10m.jinja2 + start_zoom: 5 + end_zoom: 8 + + # ne_50m_playas + - template: ne-water-playas-50m.jinja2 + start_zoom: 4 + end_zoom: 5 + + # ne_10m_playas + - template: ne-water-playas-10m.jinja2 + start_zoom: 5 + end_zoom: 8 + + osmdata: + + - template: osmdata-earth.jinja2 + start_zoom: 8 + + - template: osmdata-water.jinja2 + start_zoom: 8 + + wof: + - template: wof.jinja2 + start_zoom: 11 + + admin_areas: + - template: admin_areas.jinja2 + # starts at the min zoom where we have road layer data + start_zoom: 5 + + # note: this goes into the _boundaries_ layer. + buffered_land: + - template: buffered_land.jinja2 + start_zoom: 8 + contours: - template: contours.jinja2 start_zoom: 11 layers: - contours: - geometry_types: [Point, MultiPoint, Polygon, MultiPolygon, LineString, MultiLineString] - simplify_before_intersect: true - simplify_start: 11 - transform: - - vectordatasource.transform.add_id_to_properties - sort: vectordatasource.sort.contours - area-inclusion-threshold: 1 water: geometry_types: [Point, MultiPoint, Polygon, MultiPolygon, LineString, MultiLineString] simplify_before_intersect: true @@ -211,6 +331,15 @@ layers: - vectordatasource.transform.add_id_to_properties - vectordatasource.transform.remove_feature_id area-inclusion-threshold: 1 + contours: + geometry_types: [LineString, MultiLineString] + simplify_start: 999 + tolerance: 2.0 + transform: + - vectordatasource.transform.tags_create_dict + - vectordatasource.transform.tags_name_i18n + - vectordatasource.transform.tags_remove + area-inclusion-threshold: 1 post_process: - fn: vectordatasource.transform.build_fence params: @@ -365,6 +494,15 @@ post_process: params: source_layer: transit target_value_type: int + - fn: vectordatasource.transform.csv_match_properties + resources: + matcher: + type: file + init_fn: vectordatasource.transform.CSVMatcher + path: spreadsheets/sort_rank/contours.csv + params: + source_layer: contours + target_value_type: int # this needs to run before the water sort_rank csv matcher - fn: vectordatasource.transform.exterior_boundaries params: diff --git a/queries/contours.jinja2 b/queries/contours.jinja2 index 81ef5df5c..dfc5cfb93 100644 --- a/queries/contours.jinja2 +++ b/queries/contours.jinja2 @@ -1,14 +1,30 @@ SELECT + osm_id AS __id__, - {% filter geometry %}{{ bounds['polygon']|bbox_intersection('way') }}{% endfilter %} AS __geometry__, + {% filter geometry %}{{ bounds['line']|bbox_intersection('way') }}{% endfilter %} AS __geometry__, -- common properties across all layers - to_jsonb(tags) || jsonb_build_object( - 'source', 'openstreetmap.org' - ) AS __properties__ + jsonb_build_object( + 'source', 'viewfinderpanoramas.org', + 'min_zoom', 11, + 'ele', ele + ) AS __contours_properties__ + +FROM ( + + SELECT + + osm_id, + ele, + way + + FROM + + contours + + WHERE -FROM planet_osm_line + {{ bounds['line']|bbox_filter('way', 3857) }} -WHERE - {{ bounds['polygon']|bbox_filter('way', 3857) }} +) p diff --git a/spreadsheets/collision_rank.yaml b/spreadsheets/collision_rank.yaml index 7c93ddcfd..8e88261b5 100644 --- a/spreadsheets/collision_rank.yaml +++ b/spreadsheets/collision_rank.yaml @@ -108,6 +108,9 @@ - {$layer: 'water', kind: 'sea'} - {$layer: 'pois', kind: 'nature_reserve'} - {$layer: 'water', kind: 'lake'} +# for contours +- _reserved: {count: 10} +- {$layer: 'contours', kind: 'contour'} # for shields & etc - _reserved: {count: 10} - {$layer: 'roads', kind: 'highway', kind_detail: 'motorway'} diff --git a/spreadsheets/sort_rank/contours.csv b/spreadsheets/sort_rank/contours.csv new file mode 100644 index 000000000..bcd43fa12 --- /dev/null +++ b/spreadsheets/sort_rank/contours.csv @@ -0,0 +1,2 @@ +kind,sort_rank +*,1500 diff --git a/vectordatasource/meta/sql.py b/vectordatasource/meta/sql.py index 3e65d33bd..cda20bcd6 100644 --- a/vectordatasource/meta/sql.py +++ b/vectordatasource/meta/sql.py @@ -49,6 +49,9 @@ 'ne_10m_roads', 'planet_osm_line', ], + 'contours': [ + 'contours', + ], 'transit': [ 'planet_osm_line', 'planet_osm_polygon', diff --git a/yaml/contours.yaml b/yaml/contours.yaml index 176fb6a57..cad73ed3d 100644 --- a/yaml/contours.yaml +++ b/yaml/contours.yaml @@ -1,14 +1,15 @@ global: - - &output_properties - id: {col: id} - kind: 'contour' + source: {col: source} + min_zoom: {col: min_zoom} + ele: {col: ele} filters: - - filter: - id: true + geom_type: line + min_zoom: 11 + table: vfp output: <<: *output_properties - table: osm + kind: contour From af927b966430a21073d54bbb1f4812763118a765 Mon Sep 17 00:00:00 2001 From: Tomas Vajda Date: Tue, 20 Aug 2019 23:52:43 +0200 Subject: [PATCH 03/27] Change min zoom for contours layer to 12 --- queries.yaml | 4 ++-- queries/contours.jinja2 | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/queries.yaml b/queries.yaml index 6d0b4ab5c..ab73a3986 100644 --- a/queries.yaml +++ b/queries.yaml @@ -151,7 +151,7 @@ sources: contours: - template: contours.jinja2 - start_zoom: 11 + start_zoom: 12 layers: water: @@ -333,7 +333,7 @@ layers: area-inclusion-threshold: 1 contours: geometry_types: [LineString, MultiLineString] - simplify_start: 999 + simplify_start: 12 tolerance: 2.0 transform: - vectordatasource.transform.tags_create_dict diff --git a/queries/contours.jinja2 b/queries/contours.jinja2 index dfc5cfb93..e398d2d52 100644 --- a/queries/contours.jinja2 +++ b/queries/contours.jinja2 @@ -7,7 +7,7 @@ SELECT -- common properties across all layers jsonb_build_object( 'source', 'viewfinderpanoramas.org', - 'min_zoom', 11, + 'min_zoom', 12, 'ele', ele ) AS __contours_properties__ From c080e56ca74545347408ade3b906c24fdf6fab6f Mon Sep 17 00:00:00 2001 From: Tomas Vajda Date: Wed, 21 Aug 2019 12:07:25 +0200 Subject: [PATCH 04/27] Contours kind changed to std --- queries.yaml | 4 ++-- queries/contours.jinja2 | 2 +- spreadsheets/collision_rank.yaml | 2 +- yaml/contours.yaml | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/queries.yaml b/queries.yaml index ab73a3986..68b3a9674 100644 --- a/queries.yaml +++ b/queries.yaml @@ -151,7 +151,7 @@ sources: contours: - template: contours.jinja2 - start_zoom: 12 + start_zoom: 13 layers: water: @@ -333,7 +333,7 @@ layers: area-inclusion-threshold: 1 contours: geometry_types: [LineString, MultiLineString] - simplify_start: 12 + simplify_start: 999 tolerance: 2.0 transform: - vectordatasource.transform.tags_create_dict diff --git a/queries/contours.jinja2 b/queries/contours.jinja2 index e398d2d52..a595c47f0 100644 --- a/queries/contours.jinja2 +++ b/queries/contours.jinja2 @@ -7,7 +7,7 @@ SELECT -- common properties across all layers jsonb_build_object( 'source', 'viewfinderpanoramas.org', - 'min_zoom', 12, + 'min_zoom', 13, 'ele', ele ) AS __contours_properties__ diff --git a/spreadsheets/collision_rank.yaml b/spreadsheets/collision_rank.yaml index 8e88261b5..a104e4023 100644 --- a/spreadsheets/collision_rank.yaml +++ b/spreadsheets/collision_rank.yaml @@ -110,7 +110,7 @@ - {$layer: 'water', kind: 'lake'} # for contours - _reserved: {count: 10} -- {$layer: 'contours', kind: 'contour'} +- {$layer: 'contours', kind: 'std'} # for shields & etc - _reserved: {count: 10} - {$layer: 'roads', kind: 'highway', kind_detail: 'motorway'} diff --git a/yaml/contours.yaml b/yaml/contours.yaml index cad73ed3d..b010891b6 100644 --- a/yaml/contours.yaml +++ b/yaml/contours.yaml @@ -7,9 +7,9 @@ global: filters: - filter: geom_type: line - min_zoom: 11 + min_zoom: 13 table: vfp output: <<: *output_properties - kind: contour + kind: std From 267ce647f55628d31da87e5e9575fd604bc31f6f Mon Sep 17 00:00:00 2001 From: Tomas Vajda Date: Sat, 24 Aug 2019 23:26:18 +0200 Subject: [PATCH 05/27] Add fiona module --- requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements.txt b/requirements.txt index 357c281e5..8202c136b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,6 +3,7 @@ argparse==1.4.0 ASTFormatter==0.6.4 boto==2.49.0 edtf==2.6.0 +fiona==1.8.6 future==0.16.0 gunicorn==19.9.0 hiredis==0.2.0 From a53f1ef0b54c66da391584e25fa750f8aed1a9c9 Mon Sep 17 00:00:00 2001 From: Tomas Vajda Date: Sat, 24 Aug 2019 23:53:31 +0200 Subject: [PATCH 06/27] Add contours table to meta data computation --- vectordatasource/meta/sql.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/vectordatasource/meta/sql.py b/vectordatasource/meta/sql.py index cda20bcd6..28c274e22 100644 --- a/vectordatasource/meta/sql.py +++ b/vectordatasource/meta/sql.py @@ -686,6 +686,8 @@ def table_is_polygonal(name): def calculate_meta_source_for_table(name): if table_is_osm(name) or name == 'admin_areas': return 'osm' + elif name == 'contours': + return 'vfp' elif name.startswith('ne_'): return 'ne' elif name.startswith('wof_'): From cfbbf7c1e6535fe20c9b23958621c3068d2b886e Mon Sep 17 00:00:00 2001 From: Tomas Vajda Date: Mon, 30 Sep 2019 11:48:15 +0200 Subject: [PATCH 07/27] Add crop to landuse --- yaml/landuse.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/yaml/landuse.yaml b/yaml/landuse.yaml index 6c2ad2586..e7ba619df 100644 --- a/yaml/landuse.yaml +++ b/yaml/landuse.yaml @@ -21,6 +21,7 @@ global: zoo: {col: zoo} barrier: {col: barrier} fence_type: {col: fence_type} + crop: {col: crop} min_zoom: case: - when: { meta.source: ne } From a1f4643d8b28091635be46561922a17533f6943e Mon Sep 17 00:00:00 2001 From: Tomas Vajda Date: Mon, 30 Sep 2019 11:54:33 +0200 Subject: [PATCH 08/27] Add historic and castle_type tags --- yaml/buildings.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/yaml/buildings.yaml b/yaml/buildings.yaml index 3621e1ec6..c8c146fca 100644 --- a/yaml/buildings.yaml +++ b/yaml/buildings.yaml @@ -19,7 +19,9 @@ globals: building_levels: {col: "building:levels"} building_min_levels: {col: "building:min_levels"} building_material: {col: "building:material"} + castle_type: {col: castle_type} height: {col: height} + historic: {col: historic} min_height: {col: min_height} layer: {col: layer} location: {col: location} From 695eb6ebe59a68a426f8caa26fc03f35ac127d48 Mon Sep 17 00:00:00 2001 From: Tomas Vajda Date: Mon, 30 Sep 2019 11:58:43 +0200 Subject: [PATCH 09/27] Add man_made tag to roads layer --- yaml/roads.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/yaml/roads.yaml b/yaml/roads.yaml index 2096a7ef2..8fd83850a 100644 --- a/yaml/roads.yaml +++ b/yaml/roads.yaml @@ -27,6 +27,7 @@ global: motor_vehicle: {col: motor_vehicle} access: {col: access} bicycle: {col: bicycle} + man_made: {col: man_made} hgv: case: - when: {hgv: [agricultural, delivery, designated, destination, local, 'no']} From 232e531faf94424f8b594d3365b15f8f464d8b6f Mon Sep 17 00:00:00 2001 From: Tomas Vajda Date: Mon, 30 Sep 2019 12:12:21 +0200 Subject: [PATCH 10/27] Add dyke --- spreadsheets/collision_rank.yaml | 2 +- spreadsheets/sort_rank/landuse.csv | 2 +- tilejson/tilejson.json.erb | 2 +- yaml/landuse.yaml | 9 ++++----- 4 files changed, 7 insertions(+), 8 deletions(-) diff --git a/spreadsheets/collision_rank.yaml b/spreadsheets/collision_rank.yaml index 7c93ddcfd..3748c4dea 100644 --- a/spreadsheets/collision_rank.yaml +++ b/spreadsheets/collision_rank.yaml @@ -676,7 +676,7 @@ - {$layer: 'landuse', kind: 'land'} - {$layer: 'landuse', kind: 'dam'} - {$layer: 'landuse', kind: 'groyne'} -- {$layer: 'landuse', kind: 'dike'} +- {$layer: 'landuse', kind: 'dyke'} - {$layer: 'landuse', kind: 'pier'} - {$layer: 'landuse', kind: 'bridge'} - {$layer: 'pois', kind: 'stop_area'} diff --git a/spreadsheets/sort_rank/landuse.csv b/spreadsheets/sort_rank/landuse.csv index 02f76a49a..76d001ed8 100644 --- a/spreadsheets/sort_rank/landuse.csv +++ b/spreadsheets/sort_rank/landuse.csv @@ -13,7 +13,7 @@ tree_row,*,264 hedge,*,263 bridge,*,229 pier,*,228 -dike,*,227 +dyke,*,227 cutline,*,226 groyne,*,225 breakwater,*,224 diff --git a/tilejson/tilejson.json.erb b/tilejson/tilejson.json.erb index 00df88c93..7fc65c7ed 100644 --- a/tilejson/tilejson.json.erb +++ b/tilejson/tilejson.json.erb @@ -100,7 +100,7 @@ "name" : "String. Localized name variants are in properties like 'name:en'. Common value.", "id" : "Integer. Common value.", "source" : "String. Common value, one of: openstreetmap.org, naturalearthdata.com.", - "kind" : "String. Common value, one of: aerodrome, airfield, allotments, amusement_ride, animal, apron, aquarium, artwork, attraction, aviary, bare_rock, barren, battlefield, beach, boatyard, breakwater, bridge, camp_site, caravan_site, carousel, cemetery, cinema, city_wall, college, commercial, common, container_terminal, crane, cutline, cutting, dam, danger_area, desert, dike, ditch, dog_park, embankment, enclosure, farm, farmland, farmyard, fence, fence, ferry_terminal, footway, forest, fort, fuel, garden, gate, generator, glacier, golf_course, grass, grassland, groyne, guard_rail, hanami, harbour, heath, hospital, industrial, kerb, land, library, maze, meadow, military, mud, national_park, nature_reserve, naval_base, orchard, park, parking, pedestrian, petting_zoo, picnic_site, pier, pier, pitch, place_of_worship, plant, plant_nursery, playground, port, port_terminal, power_line, power_minor_line, prison, protected_area, quarry, quay, railway, range, recreation_ground, recreation_track, residential, resort, rest_area, retail, retaining_wall, rock, roller_coaster, runway, rural, sand, school, scree, scrub, service_area, shingle, shipyard, snow_fence, sports_centre, stadium, stone, substation, summer_toboggan, taxiway, theatre, theme_park, tower, trail_riding_station, university, urban, urban_area, village_green, vineyard, wall, wastewater_plant, water_park, water_slide, water_works, wetland, wharf, wilderness_hut, wildlife_park, winery, winter_sports, wood, works, zoo, low_emission_zone.", + "kind" : "String. Common value, one of: aerodrome, airfield, allotments, amusement_ride, animal, apron, aquarium, artwork, attraction, aviary, bare_rock, barren, battlefield, beach, boatyard, breakwater, bridge, camp_site, caravan_site, carousel, cemetery, cinema, city_wall, college, commercial, common, container_terminal, crane, cutline, cutting, dam, danger_area, desert, dyke, ditch, dog_park, embankment, enclosure, farm, farmland, farmyard, fence, fence, ferry_terminal, footway, forest, fort, fuel, garden, gate, generator, glacier, golf_course, grass, grassland, groyne, guard_rail, hanami, harbour, heath, hospital, industrial, kerb, land, library, maze, meadow, military, mud, national_park, nature_reserve, naval_base, orchard, park, parking, pedestrian, petting_zoo, picnic_site, pier, pier, pitch, place_of_worship, plant, plant_nursery, playground, port, port_terminal, power_line, power_minor_line, prison, protected_area, quarry, quay, railway, range, recreation_ground, recreation_track, residential, resort, rest_area, retail, retaining_wall, rock, roller_coaster, runway, rural, sand, school, scree, scrub, service_area, shingle, fell, shipyard, snow_fence, sports_centre, stadium, stone, substation, summer_toboggan, taxiway, theatre, theme_park, tower, trail_riding_station, university, urban, urban_area, village_green, vineyard, wall, wastewater_plant, water_park, water_slide, water_works, wetland, wharf, wilderness_hut, wildlife_park, winery, winter_sports, wood, works, zoo, low_emission_zone.", "kind_detail" : "String. Common optional value.", "min_zoom" : "Number. A suggested minimum zoom at which the features should become visible. Common value.", "sort_rank" : "Integer. Suggestion for which order to draw features (lower values are bottom, bigger values on top). Common value.", diff --git a/yaml/landuse.yaml b/yaml/landuse.yaml index 6c2ad2586..9f8b59038 100644 --- a/yaml/landuse.yaml +++ b/yaml/landuse.yaml @@ -891,14 +891,13 @@ filters: <<: *output_properties kind: groyne tier: 4 - # dike + # dyke - filter: - man_made: dike - geom_type: polygon - min_zoom: { max: [ 13, *tier4_min_zoom ] } + man_made: dyke + min_zoom: 13 output: <<: *output_properties - kind: dike + kind: dyke tier: 4 # cutline - filter: From 418ad3fb58ef18e5c39d22d1cdc3b88c64429914 Mon Sep 17 00:00:00 2001 From: Tomas Vajda Date: Mon, 30 Sep 2019 12:25:50 +0200 Subject: [PATCH 11/27] Add chimney to pois --- yaml/pois.yaml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/yaml/pois.yaml b/yaml/pois.yaml index 3a65dab42..15052aa59 100644 --- a/yaml/pois.yaml +++ b/yaml/pois.yaml @@ -443,7 +443,7 @@ global: - landuse: quarry - leisure: [ dog_park, firepit, fishing, pitch, playground, slipway, swimming_area ] - lock: yes - - man_made: [ adit, communications_tower, crane, mast, mineshaft, obelisk, observatory, + - man_made: [ adit, communications_tower, chimney, crane, mast, mineshaft, obelisk, observatory, offshore_platform, petroleum_well, power_wind, telescope, water_tower, water_well, watermill, windmill ] - military: bunker @@ -2640,6 +2640,11 @@ filters: - shiploader - tower_crane then: {col: "crane:type"} + - filter: {man_made: chimney} + min_zoom: 14 + output: + <<: *output_properties + kind: chimney - filter: {leisure: water_park} min_zoom: { clamp: { min: 13, max: 15, value: { sum: [ { col: zoom }, 2.34 ] } } } output: From 642a9dc9563a83d869909d9bb6f6f509ed22e795 Mon Sep 17 00:00:00 2001 From: Tomas Vajda Date: Mon, 30 Sep 2019 12:30:46 +0200 Subject: [PATCH 12/27] Add weir to water layer --- spreadsheets/sort_rank/water.csv | 1 + yaml/water.yaml | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/spreadsheets/sort_rank/water.csv b/spreadsheets/sort_rank/water.csv index 237b5afb0..dddf18133 100644 --- a/spreadsheets/sort_rank/water.csv +++ b/spreadsheets/sort_rank/water.csv @@ -6,6 +6,7 @@ dam,-,201 ditch,-,201 drain,-,201 playa,-,203 +weir,-,205 lake,-,204 water,-,204 riverbank,-,204 diff --git a/yaml/water.yaml b/yaml/water.yaml index feca16d2f..fd5730b40 100644 --- a/yaml/water.yaml +++ b/yaml/water.yaml @@ -138,6 +138,12 @@ filters: <<: *water_standard_properties_osm kind: drain table: osm + - filter: {waterway: weir} + min_zoom: 14 + output: + <<: *water_standard_properties_osm + kind: weir + table: osm # reef - filter: natural: reef From 78dff55181269c14590536adc48514be63db7944 Mon Sep 17 00:00:00 2001 From: Tomas Vajda Date: Mon, 30 Sep 2019 12:32:05 +0200 Subject: [PATCH 13/27] Add to tilejson description --- tilejson/tilejson.json.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tilejson/tilejson.json.erb b/tilejson/tilejson.json.erb index 00df88c93..60cc27c71 100644 --- a/tilejson/tilejson.json.erb +++ b/tilejson/tilejson.json.erb @@ -288,7 +288,7 @@ "id" : "water", "fields" : { "name" : "String. Localized name variants are in properties like 'name:en'. Common value.", - "kind" : "String. detailed below, per geometry type. Common value, one of: basin, bay, canal, dam, ditch, dock, drain, fjord, fountain, lake, ocean, playa, reef, river, riverbank, sea, strait, stream, swimming_pool, water.", + "kind" : "String. detailed below, per geometry type. Common value, one of: basin, bay, canal, dam, ditch, dock, drain, fjord, fountain, lake, ocean, playa, reef, river, riverbank, sea, strait, stream, swimming_pool, water, weir.", "source" : "String. Common value, one of: naturalearthdata.com, osmdata.openstreetmap.de, openstreetmap.org.", "min_zoom" : "Number. A suggested minimum zoom at which the features should become visible. Common value.", "boundary" : "Boolean. For line geometries only. Common value.", From 929a71f6dacde872d112368af1d6d2337ed4a43c Mon Sep 17 00:00:00 2001 From: Tomas Vajda Date: Mon, 30 Sep 2019 12:38:44 +0200 Subject: [PATCH 14/27] Add fell --- queries.yaml | 1 + spreadsheets/collision_rank.yaml | 1 + tilejson/tilejson.json.erb | 2 +- yaml/landuse.yaml | 5 +++++ 4 files changed, 8 insertions(+), 1 deletion(-) diff --git a/queries.yaml b/queries.yaml index f25324d9c..581028565 100644 --- a/queries.yaml +++ b/queries.yaml @@ -373,6 +373,7 @@ post_process: scree: barren shingle: barren stone: barren + fell: barren # desert bare_rock: desert diff --git a/spreadsheets/collision_rank.yaml b/spreadsheets/collision_rank.yaml index 7c93ddcfd..f76e35d5e 100644 --- a/spreadsheets/collision_rank.yaml +++ b/spreadsheets/collision_rank.yaml @@ -965,6 +965,7 @@ - {$layer: 'water', kind: 'fountain'} - {$layer: 'water', kind: 'ditch'} - {$layer: 'water', kind: 'drain'} +- {$layer: 'water', kind: 'weir'} - {$layer: 'water', kind: 'swimming_pool'} - {$layer: 'landuse', kind: 'breakwater'} - {$layer: 'landuse', kind: 'cutline'} diff --git a/tilejson/tilejson.json.erb b/tilejson/tilejson.json.erb index 00df88c93..4ac69f6db 100644 --- a/tilejson/tilejson.json.erb +++ b/tilejson/tilejson.json.erb @@ -100,7 +100,7 @@ "name" : "String. Localized name variants are in properties like 'name:en'. Common value.", "id" : "Integer. Common value.", "source" : "String. Common value, one of: openstreetmap.org, naturalearthdata.com.", - "kind" : "String. Common value, one of: aerodrome, airfield, allotments, amusement_ride, animal, apron, aquarium, artwork, attraction, aviary, bare_rock, barren, battlefield, beach, boatyard, breakwater, bridge, camp_site, caravan_site, carousel, cemetery, cinema, city_wall, college, commercial, common, container_terminal, crane, cutline, cutting, dam, danger_area, desert, dike, ditch, dog_park, embankment, enclosure, farm, farmland, farmyard, fence, fence, ferry_terminal, footway, forest, fort, fuel, garden, gate, generator, glacier, golf_course, grass, grassland, groyne, guard_rail, hanami, harbour, heath, hospital, industrial, kerb, land, library, maze, meadow, military, mud, national_park, nature_reserve, naval_base, orchard, park, parking, pedestrian, petting_zoo, picnic_site, pier, pier, pitch, place_of_worship, plant, plant_nursery, playground, port, port_terminal, power_line, power_minor_line, prison, protected_area, quarry, quay, railway, range, recreation_ground, recreation_track, residential, resort, rest_area, retail, retaining_wall, rock, roller_coaster, runway, rural, sand, school, scree, scrub, service_area, shingle, shipyard, snow_fence, sports_centre, stadium, stone, substation, summer_toboggan, taxiway, theatre, theme_park, tower, trail_riding_station, university, urban, urban_area, village_green, vineyard, wall, wastewater_plant, water_park, water_slide, water_works, wetland, wharf, wilderness_hut, wildlife_park, winery, winter_sports, wood, works, zoo, low_emission_zone.", + "kind" : "String. Common value, one of: aerodrome, airfield, allotments, amusement_ride, animal, apron, aquarium, artwork, attraction, aviary, bare_rock, barren, battlefield, beach, boatyard, breakwater, bridge, camp_site, caravan_site, carousel, cemetery, cinema, city_wall, college, commercial, common, container_terminal, crane, cutline, cutting, dam, danger_area, desert, dike, ditch, dog_park, embankment, enclosure, farm, farmland, farmyard, fence, fence, ferry_terminal, footway, forest, fort, fuel, garden, gate, generator, glacier, golf_course, grass, grassland, groyne, guard_rail, hanami, harbour, heath, hospital, industrial, kerb, land, library, maze, meadow, military, mud, national_park, nature_reserve, naval_base, orchard, park, parking, pedestrian, petting_zoo, picnic_site, pier, pier, pitch, place_of_worship, plant, plant_nursery, playground, port, port_terminal, power_line, power_minor_line, prison, protected_area, quarry, quay, railway, range, recreation_ground, recreation_track, residential, resort, rest_area, retail, retaining_wall, rock, roller_coaster, runway, rural, sand, school, scree, scrub, service_area, shingle, fell, shipyard, snow_fence, sports_centre, stadium, stone, substation, summer_toboggan, taxiway, theatre, theme_park, tower, trail_riding_station, university, urban, urban_area, village_green, vineyard, wall, wastewater_plant, water_park, water_slide, water_works, wetland, wharf, wilderness_hut, wildlife_park, winery, winter_sports, wood, works, zoo, low_emission_zone.", "kind_detail" : "String. Common optional value.", "min_zoom" : "Number. A suggested minimum zoom at which the features should become visible. Common value.", "sort_rank" : "Integer. Suggestion for which order to draw features (lower values are bottom, bigger values on top). Common value.", diff --git a/yaml/landuse.yaml b/yaml/landuse.yaml index 6c2ad2586..18ec9b924 100644 --- a/yaml/landuse.yaml +++ b/yaml/landuse.yaml @@ -1165,6 +1165,11 @@ filters: output: <<: *output_properties kind: {col: natural} + - filter: {natural: fell} + min_zoom: { clamp: { max: 16, min: 9, value: { col: zoom } } } + output: + <<: *output_properties + kind: fell - filter: {landuse: vineyard} min_zoom: { clamp: { max: 16, min: 9, value: { col: zoom } } } output: From 96b959fa11d92eb5d11ef756c5d728dec44ff66f Mon Sep 17 00:00:00 2001 From: Tomas Vajda Date: Mon, 30 Sep 2019 12:41:23 +0200 Subject: [PATCH 15/27] Remove typo --- spreadsheets/collision_rank.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/spreadsheets/collision_rank.yaml b/spreadsheets/collision_rank.yaml index f76e35d5e..7c93ddcfd 100644 --- a/spreadsheets/collision_rank.yaml +++ b/spreadsheets/collision_rank.yaml @@ -965,7 +965,6 @@ - {$layer: 'water', kind: 'fountain'} - {$layer: 'water', kind: 'ditch'} - {$layer: 'water', kind: 'drain'} -- {$layer: 'water', kind: 'weir'} - {$layer: 'water', kind: 'swimming_pool'} - {$layer: 'landuse', kind: 'breakwater'} - {$layer: 'landuse', kind: 'cutline'} From 491cf5e6a437d817b56966ee4f188a687ec34aac Mon Sep 17 00:00:00 2001 From: Tomas Vajda Date: Mon, 30 Sep 2019 12:51:10 +0200 Subject: [PATCH 16/27] Add dyke to tilejson description --- tilejson/tilejson.json.erb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tilejson/tilejson.json.erb b/tilejson/tilejson.json.erb index 7fc65c7ed..8a6672876 100644 --- a/tilejson/tilejson.json.erb +++ b/tilejson/tilejson.json.erb @@ -55,7 +55,7 @@ "kind" : "String. Common value, one of: address, building, building_part, entrance, exit.", "kind_detail" : "String. Common value, one of: abandoned, administrative, agricultural, airport, allotment_house, apartments, arbour, arch, balcony, bank, barn, base, basilica, beach_hut, bell_tower, boathouse, brewery, bridge, bungalow, bunker, cabin, carport, castle, cathedral, chapel, chimney, church, civic, clinic, clubhouse, collapsed, college, column, commercial, construction, container, convent, cowshed, dam, damaged, depot, destroyed, detached, disused, door, dormitory, duplex, elevator, emergency, entrance, factory, farm, farm_auxiliary, fire_exit, fire_station, floor, garage, garages, gazebo, ger, glasshouse, government, grandstand, greenhouse, hall, hangar, healthcare, hermitage, home, hospital, hotel, house, houseboat, hut, industrial, kindergarten, kiosk, library, main, mall, manor, manufacture, mixed_use, mobile_home, monastery, mortuary, mosque, museum, office, or unisex, outbuilding, parking, passageway, pavilion, pillar, porch, power, prison, private, proposed, pub, public, ramp, residence, residential, restaurant, retail, roof, room, ruin, ruins, school, secondary, semidetached_house, service, shed, shelter, shop, shrine, silo, slurry_tank, stable, stadium, staircase, static_caravan, steps, stilobate, storage, storage_tank, store, substation, summer_cottage, summer_house, supermarket, synagogue, tank, temple, terrace, tier, tower, train_station, transformer_tower, transportation, university, utility, veranda, verticalpassage, wall, warehouse, wayside_shrine, window, works.", "source" : "String. Common value, one of: openstreetmap.org.", - "landuse_kind" : "String. Tilezen calculates the `landuse_kind` value by intercutting `buildings` with the `landuse` layer to determine if a building is over a parks, hospitals, universities or other landuse features. Common value, one of: aerodrome, allotments, amusement_ride, animal, apron, aquarium, artwork, attraction, aviary, battlefield, beach, breakwater, bridge, camp_site, caravan_site, carousel, cemetery, cinema, city_wall, college, commercial, common, cutline, dam, dike, dog_park, enclosure, farm, farmland, farmyard, fence, footway, forest, fort, fuel, garden, gate, generator, glacier, golf_course, grass, groyne, hanami, hospital, industrial, land, library, maze, meadow, military, national_park, nature_reserve, park, parking, pedestrian, petting_zoo, picnic_site, pier, pitch, place_of_worship, plant, playground, prison, protected_area, quarry, railway, recreation_ground, recreation_track, residential, resort, rest_area, retail, retaining_wall, rock, roller_coaster, runway, rural, school, scree, scrub, service_area, snow_fence, sports_centre, stadium, stone, substation, summer_toboggan, taxiway, theatre, theme_park, tower, trail_riding_station, university, urban_area, urban, village_green, wastewater_plant, water_park, water_slide, water_works, wetland, wilderness_hut, wildlife_park, winery, winter_sports, wood, works, zoo.", + "landuse_kind" : "String. Tilezen calculates the `landuse_kind` value by intercutting `buildings` with the `landuse` layer to determine if a building is over a parks, hospitals, universities or other landuse features. Common value, one of: aerodrome, allotments, amusement_ride, animal, apron, aquarium, artwork, attraction, aviary, battlefield, beach, breakwater, bridge, camp_site, caravan_site, carousel, cemetery, cinema, city_wall, college, commercial, common, cutline, dam, dyke, dog_park, enclosure, farm, farmland, farmyard, fence, footway, forest, fort, fuel, garden, gate, generator, glacier, golf_course, grass, groyne, hanami, hospital, industrial, land, library, maze, meadow, military, national_park, nature_reserve, park, parking, pedestrian, petting_zoo, picnic_site, pier, pitch, place_of_worship, plant, playground, prison, protected_area, quarry, railway, recreation_ground, recreation_track, residential, resort, rest_area, retail, retaining_wall, rock, roller_coaster, runway, rural, school, scree, scrub, service_area, snow_fence, sports_centre, stadium, stone, substation, summer_toboggan, taxiway, theatre, theme_park, tower, trail_riding_station, university, urban_area, urban, village_green, wastewater_plant, water_park, water_slide, water_works, wetland, wilderness_hut, wildlife_park, winery, winter_sports, wood, works, zoo.", "sort_rank" : "Integer. Suggestion for which order to draw features (lower values are bottom, bigger values on top). Common value.", "collision_rank" : "Integer. Common property. Suggestion for which order labels should collide. Use as tie breaker with min_zoom.", "min_zoom" : "Number. A suggested minimum zoom at which the features should become visible (eg: based on area and volume limits). Common value.", @@ -194,7 +194,7 @@ "source" : "String. Common value, one of: openstreetmap.org, naturalearthdata.com.", "min_zoom" : "Number. A suggested minimum zoom at which the features should become visible. Common value.", "kind" : "String. Common value, one of: aerialway, exit, ferry, highway, major_road, minor_road, path, piste, quay, racetrack, rail.", - "landuse_kind" : "String. Tilezen calculates the `landuse_kind` value by intercutting `buildings` with the `landuse` layer to determine if a building is over a parks, hospitals, universities or other landuse features. Common value, one of: aerodrome, allotments, amusement_ride, animal, apron, aquarium, artwork, attraction, aviary, battlefield, beach, breakwater, bridge, camp_site, caravan_site, carousel, cemetery, cinema, city_wall, college, commercial, common, cutline, dam, dike, dog_park, enclosure, farm, farmland, farmyard, fence, footway, forest, fort, fuel, garden, gate, generator, glacier, golf_course, grass, groyne, hanami, hospital, industrial, land, library, maze, meadow, military, national_park, nature_reserve, park, parking, pedestrian, petting_zoo, picnic_site, pier, pitch, place_of_worship, plant, playground, prison, protected_area, quarry, railway, recreation_ground, recreation_track, residential, resort, rest_area, retail, retaining_wall, rock, roller_coaster, runway, rural, school, scree, scrub, service_area, snow_fence, sports_centre, stadium, stone, substation, summer_toboggan, taxiway, theatre, theme_park, tower, trail_riding_station, university, urban_area, urban, village_green, wastewater_plant, water_park, water_slide, water_works, wetland, wilderness_hut, wildlife_park, winery, winter_sports, wood, works, zoo.", + "landuse_kind" : "String. Tilezen calculates the `landuse_kind` value by intercutting `buildings` with the `landuse` layer to determine if a building is over a parks, hospitals, universities or other landuse features. Common value, one of: aerodrome, allotments, amusement_ride, animal, apron, aquarium, artwork, attraction, aviary, battlefield, beach, breakwater, bridge, camp_site, caravan_site, carousel, cemetery, cinema, city_wall, college, commercial, common, cutline, dam, dog_park, dyke, enclosure, farm, farmland, farmyard, fence, footway, forest, fort, fuel, garden, gate, generator, glacier, golf_course, grass, groyne, hanami, hospital, industrial, land, library, maze, meadow, military, national_park, nature_reserve, park, parking, pedestrian, petting_zoo, picnic_site, pier, pitch, place_of_worship, plant, playground, prison, protected_area, quarry, railway, recreation_ground, recreation_track, residential, resort, rest_area, retail, retaining_wall, rock, roller_coaster, runway, rural, school, scree, scrub, service_area, snow_fence, sports_centre, stadium, stone, substation, summer_toboggan, taxiway, theatre, theme_park, tower, trail_riding_station, university, urban_area, urban, village_green, wastewater_plant, water_park, water_slide, water_works, wetland, wilderness_hut, wildlife_park, winery, winter_sports, wood, works, zoo.", "ref" : "String. Used for road shields. Common value.", "sort_rank" : "Integer. Suggestion for which order to draw features (lower values are bottom, bigger values on top). Common value.", "collision_rank" : "Integer. Common property. Suggestion for which order labels should collide. Use as tie breaker with min_zoom.", From adc5b80038f937862ce331eb887500400b0853a8 Mon Sep 17 00:00:00 2001 From: Tomas Vajda Date: Mon, 30 Sep 2019 13:14:06 +0200 Subject: [PATCH 17/27] Update according to comments --- queries.yaml | 1 - spreadsheets/collision_rank.yaml | 6 +++--- spreadsheets/sort_rank/contours.csv | 2 +- spreadsheets/sort_rank/landuse.csv | 10 +++++----- yaml/contours.yaml | 5 +++-- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/queries.yaml b/queries.yaml index 68b3a9674..5477ed1e9 100644 --- a/queries.yaml +++ b/queries.yaml @@ -9,7 +9,6 @@ all: - boundaries - transit - admin_areas - - contours sources: diff --git a/spreadsheets/collision_rank.yaml b/spreadsheets/collision_rank.yaml index a104e4023..f2b3aa5df 100644 --- a/spreadsheets/collision_rank.yaml +++ b/spreadsheets/collision_rank.yaml @@ -108,9 +108,6 @@ - {$layer: 'water', kind: 'sea'} - {$layer: 'pois', kind: 'nature_reserve'} - {$layer: 'water', kind: 'lake'} -# for contours -- _reserved: {count: 10} -- {$layer: 'contours', kind: 'std'} # for shields & etc - _reserved: {count: 10} - {$layer: 'roads', kind: 'highway', kind_detail: 'motorway'} @@ -1023,5 +1020,8 @@ - {$layer: 'pois', kind: 'waste_basket'} - {$layer: 'pois', kind: 'water_point'} - {$layer: 'pois', kind: 'watering_place'} +# for contours +- _reserved: {count: 10} +- {$layer: 'contours', kind: 'contour'} # catch-all, assign lowest priority - { $layer: true } diff --git a/spreadsheets/sort_rank/contours.csv b/spreadsheets/sort_rank/contours.csv index bcd43fa12..c3d2daff4 100644 --- a/spreadsheets/sort_rank/contours.csv +++ b/spreadsheets/sort_rank/contours.csv @@ -1,2 +1,2 @@ kind,sort_rank -*,1500 +*,225 diff --git a/spreadsheets/sort_rank/landuse.csv b/spreadsheets/sort_rank/landuse.csv index 02f76a49a..4ca6f19dd 100644 --- a/spreadsheets/sort_rank/landuse.csv +++ b/spreadsheets/sort_rank/landuse.csv @@ -11,11 +11,11 @@ retaining_wall,*,266 dam,LineString;MultiLineString,265 tree_row,*,264 hedge,*,263 -bridge,*,229 -pier,*,228 -dike,*,227 -cutline,*,226 -groyne,*,225 +bridge,*,230 +pier,*,229 +dike,*,228 +cutline,*,227 +groyne,*,226 breakwater,*,224 dam,*,223 land,*,222 diff --git a/yaml/contours.yaml b/yaml/contours.yaml index b010891b6..753f955dc 100644 --- a/yaml/contours.yaml +++ b/yaml/contours.yaml @@ -2,7 +2,8 @@ global: - &output_properties source: {col: source} min_zoom: {col: min_zoom} - ele: {col: ele} + # Elevation of the contour in meters. + elevation: {col: ele} filters: - filter: @@ -11,5 +12,5 @@ filters: table: vfp output: <<: *output_properties - kind: std + kind: contour From 7ae7d2a9e82ffa292b81e84fd4565fe9b591927d Mon Sep 17 00:00:00 2001 From: Tomas Vajda Date: Mon, 30 Sep 2019 13:22:29 +0200 Subject: [PATCH 18/27] Update layer tests --- test/test_meta.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/test_meta.py b/test/test_meta.py index e0835a986..0d5cf11c9 100644 --- a/test/test_meta.py +++ b/test/test_meta.py @@ -82,12 +82,12 @@ def setUpClass(cls): cls.layer_data, cls.by_name = make_layer_data_props() def test_layer_data_count(self): - self.assertEquals(10, len(self.layer_data)) + self.assertEquals(11, len(self.layer_data)) def test_layer_names(self): exp_layers = set(('landuse', 'pois', 'transit', 'water', 'places', 'boundaries', 'buildings', 'roads', 'earth', - 'admin_areas')) + 'admin_areas', 'contours')) self.assertEquals(exp_layers, set(self.by_name.keys())) def test_layers_called_empty_feature(self): From 7fde574dfc772f65bc96f28928e355c21192e705 Mon Sep 17 00:00:00 2001 From: Tomas Vajda Date: Sat, 18 Jun 2022 16:46:36 +0200 Subject: [PATCH 19/27] Add support for hiking colours and symbols --- data/functions.sql | 6 +- requirements.txt | 5 +- vectordatasource/transform.py | 143 ++++++++++++++++++++++------------ yaml/roads.yaml | 14 ++-- 4 files changed, 106 insertions(+), 62 deletions(-) diff --git a/data/functions.sql b/data/functions.sql index 21b9439c6..5da08a996 100644 --- a/data/functions.sql +++ b/data/functions.sql @@ -127,7 +127,7 @@ FROM ( unnest(tags) AS unnested FROM ( SELECT - mz_modify_network(hstore(tags))->ARRAY['route','network','ref'] AS tags + mz_modify_network(hstore(tags))->ARRAY['route','network','ref','colour','symbol'] AS tags FROM planet_osm_rels WHERE @@ -135,7 +135,9 @@ FROM ( parts[way_off+1:rel_off] && ARRAY[way_id] AND hstore(tags) ? 'route' AND (hstore(tags) ? 'network' OR - hstore(tags) ? 'ref') + hstore(tags) ? 'ref') AND + hstore(tags) ? 'colour' AND + hstore(tags) ? 'symbol' ) inner1 ) inner2; $$ LANGUAGE sql STABLE; diff --git a/requirements.txt b/requirements.txt index 357c281e5..3f2b96816 100644 --- a/requirements.txt +++ b/requirements.txt @@ -21,9 +21,10 @@ simplejson==3.12.0 six==1.11.0 StreetNames==0.1.5 tqdm==4.31.1 -urllib3==1.24.3 ## REMOVE THIS AS SOON AS botocore ALLOWS >=1.25 +urllib3==1.25.11 +webcolors<=1.11 ## Last version to support py2 Werkzeug==0.12.2 wsgiref==0.1.2 -git+https://github.com/tilezen/tilequeue@master#egg=tilequeue +git+https://github.com/tilezen/tilequeue@v2.4.1-final#egg=tilequeue git+https://github.com/tilezen/tileserver@master#egg=tileserver git+https://github.com/tilezen/raw_tiles@master#egg=raw_tiles diff --git a/vectordatasource/transform.py b/vectordatasource/transform.py index 0622d139b..eeea62711 100644 --- a/vectordatasource/transform.py +++ b/vectordatasource/transform.py @@ -5760,7 +5760,7 @@ def _do_not_backfill(tags): return None -def _sort_network_us(network, ref): +def _sort_network_us(network, ref, colour, symbol): if network is None: network_code = 9999 elif network == 'US:I': @@ -5789,7 +5789,7 @@ def _sort_network_us(network, ref): } -def _sort_network_au(network, ref): +def _sort_network_au(network, ref, colour, symbol): if network is None or \ not network.startswith('AU:'): network_code = 9999 @@ -5801,7 +5801,7 @@ def _sort_network_au(network, ref): return network_code * 10000 + min(ref, 9999) -def _sort_network_br(network, ref): +def _sort_network_br(network, ref, colour, symbol): if network is None: network_code = 9999 elif network == 'BR:Trans-Amazonian': @@ -5814,7 +5814,7 @@ def _sort_network_br(network, ref): return network_code * 10000 + min(ref, 9999) -def _sort_network_ca(network, ref): +def _sort_network_ca(network, ref, colour, symbol): if network is None: network_code = 9999 elif network == 'CA:transcanada': @@ -5829,7 +5829,7 @@ def _sort_network_ca(network, ref): return network_code * 10000 + min(ref, 9999) -def _sort_network_ch(network, ref): +def _sort_network_ch(network, ref, colour, symbol): if network is None: network_code = 9999 elif network == 'CH:national': @@ -5846,7 +5846,7 @@ def _sort_network_ch(network, ref): return network_code * 10000 + min(ref, 9999) -def _sort_network_cn(network, ref): +def _sort_network_cn(network, ref, colour, symbol): if network is None: network_code = 9999 elif network == 'CN:expressway': @@ -5865,7 +5865,7 @@ def _sort_network_cn(network, ref): return network_code * 10000 + min(ref, 9999) -def _sort_network_es(network, ref): +def _sort_network_es(network, ref, colour, symbol): if network is None: network_code = 9999 elif network == 'ES:A-road': @@ -5888,7 +5888,7 @@ def _sort_network_es(network, ref): return network_code * 10000 + min(ref, 9999) -def _sort_network_fr(network, ref): +def _sort_network_fr(network, ref, colour, symbol): if network is None: network_code = 9999 elif network == 'FR:A-road': @@ -5909,7 +5909,7 @@ def _sort_network_fr(network, ref): return network_code * 10000 + min(ref, 9999) -def _sort_network_de(network, ref): +def _sort_network_de(network, ref, colour, symbol): if network is None: network_code = 9999 elif network == 'DE:BAB': @@ -5934,7 +5934,7 @@ def _sort_network_de(network, ref): return network_code * 10000 + min(ref, 9999) -def _sort_network_ga(network, ref): +def _sort_network_ga(network, ref, colour, symbol): if network is None: network_code = 9999 elif network == 'GA:national': @@ -5949,7 +5949,7 @@ def _sort_network_ga(network, ref): return network_code * 10000 + min(ref, 9999) -def _sort_network_gr(network, ref): +def _sort_network_gr(network, ref, colour, symbol): if network is None: network_code = 9999 elif network == 'GR:motorway': @@ -5966,7 +5966,7 @@ def _sort_network_gr(network, ref): return network_code * 10000 + min(ref, 9999) -def _sort_network_in(network, ref): +def _sort_network_in(network, ref, colour, symbol): if network is None: network_code = 9999 elif network == 'IN:NH': @@ -5983,7 +5983,7 @@ def _sort_network_in(network, ref): return network_code * 10000 + min(ref, 9999) -def _sort_network_ir(network, ref): +def _sort_network_ir(network, ref, colour, symbol): if network is None: network_code = 9999 elif network == 'AsianHighway': @@ -5996,7 +5996,7 @@ def _sort_network_ir(network, ref): return network_code * 10000 + min(ref, 9999) -def _sort_network_kz(network, ref): +def _sort_network_kz(network, ref, colour, symbol): if network is None: network_code = 9999 elif network == 'KZ:national': @@ -6015,7 +6015,7 @@ def _sort_network_kz(network, ref): return network_code * 10000 + min(ref, 9999) -def _sort_network_la(network, ref): +def _sort_network_la(network, ref, colour, symbol): if network is None: network_code = 9999 elif network == 'LA:national': @@ -6030,7 +6030,7 @@ def _sort_network_la(network, ref): return network_code * 10000 + min(ref, 9999) -def _sort_network_mx(network, ref): +def _sort_network_mx(network, ref, colour, symbol): if network is None: network_code = 9999 elif network == 'MX:MEX': @@ -6043,7 +6043,7 @@ def _sort_network_mx(network, ref): return network_code * 10000 + min(ref, 9999) -def _sort_network_my(network, ref): +def _sort_network_my(network, ref, colour, symbol): if network is None: network_code = 9999 elif network == 'MY:federal': @@ -6060,7 +6060,7 @@ def _sort_network_my(network, ref): return network_code * 10000 + min(ref, 9999) -def _sort_network_no(network, ref): +def _sort_network_no(network, ref, colour, symbol): if network is None: network_code = 9999 elif network == 'NO:oslo:ring': @@ -6079,7 +6079,7 @@ def _sort_network_no(network, ref): return network_code * 10000 + min(ref, 9999) -def _sort_network_gb(network, ref): +def _sort_network_gb(network, ref, colour, symbol): if network is None: network_code = 9999 elif network == 'GB:M-road': @@ -6100,7 +6100,7 @@ def _sort_network_gb(network, ref): return network_code * 10000 + min(ref, 9999) -def _sort_network_pl(network, ref): +def _sort_network_pl(network, ref, colour, symbol): if network is None: network_code = 9999 elif network == 'PL:motorway': @@ -6119,7 +6119,7 @@ def _sort_network_pl(network, ref): return network_code * 10000 + min(ref, 9999) -def _sort_network_pt(network, ref): +def _sort_network_pt(network, ref, colour, symbol): if network is None: network_code = 9999 elif network == 'PT:motorway': @@ -6148,7 +6148,7 @@ def _sort_network_pt(network, ref): return network_code * 10000 + min(ref, 9999) -def _sort_network_ro(network, ref): +def _sort_network_ro(network, ref, colour, symbol): if network is None: network_code = 9999 elif network == 'RO:motorway': @@ -6169,7 +6169,7 @@ def _sort_network_ro(network, ref): return network_code * 10000 + min(ref, 9999) -def _sort_network_ru(network, ref): +def _sort_network_ru(network, ref, colour, symbol): ref = _make_unicode_or_none(ref) if network is None: @@ -6200,7 +6200,7 @@ def _sort_network_ru(network, ref): return network_code * 10000 + min(ref, 9999) -def _sort_network_tr(network, ref): +def _sort_network_tr(network, ref, colour, symbol): ref = _make_unicode_or_none(ref) if network is None: @@ -6233,7 +6233,7 @@ def _sort_network_tr(network, ref): return network_code * 10000 + min(ref, 9999) -def _sort_network_ua(network, ref): +def _sort_network_ua(network, ref, colour, symbol): ref = _make_unicode_or_none(ref) if network is None: @@ -6259,7 +6259,7 @@ def _sort_network_ua(network, ref): return network_code * 10000 + min(ref, 9999) -def _sort_network_vn(network, ref): +def _sort_network_vn(network, ref, colour, symbol): if network is None: network_code = 9999 elif network == 'VN:expressway': @@ -6283,7 +6283,7 @@ def _sort_network_vn(network, ref): return network_code * 10000 + min(ref, 9999) -def _sort_network_za(network, ref): +def _sort_network_za(network, ref, colour, symbol): if network is None: network_code = 9999 elif network == 'ZA:national': @@ -7649,6 +7649,9 @@ def merge_networks_from_tags(shape, props, fid, zoom): network = props.get('network') ref = props.get('ref') + colour = props.get('colour') + symbol = props.get('symbol') + mz_networks = props.get('mz_networks', []) country_code = props.get('country_code') @@ -7658,8 +7661,10 @@ def merge_networks_from_tags(shape, props, fid, zoom): # * if they begin with two letters and a dash, then make the letters upper # case and replace the dash with a colon. # * expand ;-delimited lists in refs - for i in xrange(0, len(mz_networks), 3): - t, n, r = mz_networks[i:i+3] + for i in xrange(0, len(mz_networks), 5): + #print("props: {}".format(props)) + #print("len: {} {}".format(len(mz_networks), mz_networks)) + t, n, r, c, s = mz_networks[i:i+5] if t == 'road' and n is not None: n = _fixup_network_country_code(n) mz_networks[i+1] = n @@ -7667,7 +7672,7 @@ def merge_networks_from_tags(shape, props, fid, zoom): refs = r.split(';') mz_networks[i+2] = refs.pop() for new_ref in refs: - mz_networks.extend((t, n, new_ref)) + mz_networks.extend((t, n, new_ref, c, s)) # for road networks, if there's no explicit network, but the country code # and ref are both available, then try to use them to back-fill the @@ -7683,8 +7688,8 @@ def merge_networks_from_tags(shape, props, fid, zoom): # then use the network from the relation instead. if network is None: solo_networks_from_relations = [] - for i in xrange(0, len(mz_networks), 3): - t, n, r = mz_networks[i:i+3] + for i in xrange(0, len(mz_networks), 5): + t, n, r, c, s = mz_networks[i:i+5] if t == 'road' and n and (r is None or r == ref): solo_networks_from_relations.append((n, i)) @@ -7697,7 +7702,7 @@ def merge_networks_from_tags(shape, props, fid, zoom): # add network back into properties in case we need to pass it # to the backfill. props['network'] = network - del mz_networks[i:i+3] + del mz_networks[i:i+5] if logic and logic.backfill: networks_and_refs = logic.backfill(props) or [] @@ -7724,8 +7729,8 @@ def merge_networks_from_tags(shape, props, fid, zoom): # an entry in mz_networks with the same ref! if ref: found = False - for i in xrange(0, len(mz_networks), 3): - t, _, r = mz_networks[i:i+3] + for i in xrange(0, len(mz_networks), 5): + t, _, r, _, _ = mz_networks[i:i+5] if t == 'road' and r == ref: found = True break @@ -7744,7 +7749,7 @@ def merge_networks_from_tags(shape, props, fid, zoom): if network and ref: props.pop('network', None) props.pop('ref') - mz_networks.extend([_guess_type_from_network(network), network, ref]) + mz_networks.extend([_guess_type_from_network(network), network, ref, colour, symbol]) if mz_networks: props['mz_networks'] = mz_networks @@ -7757,7 +7762,7 @@ def merge_networks_from_tags(shape, props, fid, zoom): _ANY_NUMBER = re.compile('[^0-9]*([0-9]+)') -def _default_sort_network(network, ref): +def _default_sort_network(network, ref, colour, symbol): """ Returns an integer representing the numeric importance of the network, where lower numbers are more important. @@ -7824,15 +7829,15 @@ def _generic_network_importance(network, ref, codes): return code * 10000 + min(ref, 9999) -def _walking_network_importance(network, ref): +def _walking_network_importance(network, ref, colour, symbol): return _generic_network_importance(network, ref, _WALKING_NETWORK_CODES) -def _bicycle_network_importance(network, ref): +def _bicycle_network_importance(network, ref, colour, symbol): return _generic_network_importance(network, ref, _BICYCLE_NETWORK_CODES) -def _bus_network_importance(network, ref): +def _bus_network_importance(network, ref, colour, symbol): return _generic_network_importance(network, ref, {}) @@ -7964,14 +7969,17 @@ def extract_network_information(shape, properties, fid, zoom): itr = iter(mz_networks) groups = defaultdict(list) - for (type, network, ref) in zip(itr, itr, itr): + for (type, network, ref, colour, symbol) in zip(itr, itr, itr, itr, itr): n = _NETWORKS.get(type) if n: - groups[n].append([network, ref]) + groups[n].append([network, ref, colour, symbol]) for network, vals in groups.items(): + #print("network prefix: {}".format(network.prefix)) all_networks = 'all_' + network.prefix + 'networks' all_shield_texts = 'all_' + network.prefix + 'shield_texts' + all_network_colours = 'all_' + network.prefix + 'network_colours' + all_network_symbols = 'all_' + network.prefix + 'network_symbols' shield_text_fn = network.shield_text_fn if network is _ROAD_NETWORK and country_logic and \ @@ -7980,7 +7988,9 @@ def extract_network_information(shape, properties, fid, zoom): shield_texts = list() network_names = list() - for network_name, ref in vals: + network_colours = list() + network_symbols = list() + for network_name, ref, colour, symbol in vals: network_names.append(network_name) ref = _make_unicode_or_none(ref) @@ -7994,9 +8004,13 @@ def extract_network_information(shape, properties, fid, zoom): ref = ref.encode('utf-8') shield_texts.append(ref) + network_colours.append(colour) + network_symbols.append(symbol) properties[all_networks] = network_names properties[all_shield_texts] = shield_texts + properties[all_network_colours] = network_colours + properties[all_network_symbols] = network_symbols return (shape, properties, fid) @@ -8009,16 +8023,20 @@ def _choose_most_important_network(properties, prefix, importance_fn): all_networks = 'all_' + prefix + 'networks' all_shield_texts = 'all_' + prefix + 'shield_texts' + all_network_colours = 'all_' + prefix + 'network_colours' + all_network_symbols = 'all_' + prefix + 'network_symbols' networks = properties.pop(all_networks, None) shield_texts = properties.pop(all_shield_texts, None) + colours = properties.pop(all_network_colours, None) + symbols = properties.pop(all_network_symbols, None) country_code = properties.get('country_code') - if networks and shield_texts: + if networks and shield_texts and colours and symbols: def network_key(t): return importance_fn(*t) - tuples = sorted(set(zip(networks, shield_texts)), key=network_key) + tuples = sorted(set(zip(networks, shield_texts, colours, symbols)), key=network_key) # i think most route designers would try pretty hard to make sure that # a segment of road isn't on two routes of different networks but with @@ -8028,27 +8046,50 @@ def network_key(t): # with the same ref (and network != none). seen_ref = set() new_tuples = [] - for network, ref in tuples: + for network, ref, colour, symbol in tuples: if network: if ref: seen_ref.add(ref) - new_tuples.append((network, ref)) + new_tuples.append((network, ref, colour, symbol)) elif ref is not None and ref not in seen_ref: # network is None, fall back to the country code - new_tuples.append((country_code, ref)) + new_tuples.append((country_code, ref, colour, symbol)) tuples = new_tuples if tuples: # expose first network as network/shield_text - network, ref = tuples[0] + network, ref, colour, symbol = tuples[0] properties[prefix + 'network'] = network properties[prefix + 'shield_text'] = ref + properties[prefix + 'network_colour'] = colour + properties[prefix + 'network_symbol'] = symbol # replace properties with sorted versions of themselves properties[all_networks] = [n[0] for n in tuples] properties[all_shield_texts] = [n[1] for n in tuples] + properties[all_network_colours] = [n[2] for n in tuples] + properties[all_network_symbols] = [n[3] for n in tuples] + + properties[all_networks + '_str'] = '' + properties[all_shield_texts + '_str'] = '' + properties[all_network_colours + '_str'] = '' + properties[all_network_symbols + '_str'] = '' + + if properties[all_network_colours] is not None: + for x in properties[all_network_colours]: + if x is not None: + properties[all_network_colours + '_str'] += ("," if properties[all_network_colours + '_str'] != '' else '') + x + else: + properties[all_network_colours + '_str'] += ("," if properties[all_network_colours + '_str'] != '' else '') + + if properties[all_network_symbols] is not None: + for x in properties[all_network_symbols]: + if x is not None: + properties[all_network_symbols + '_str'] += ("," if properties[all_network_symbols + '_str'] != '' else '') + x + else: + properties[all_network_symbols + '_str'] += ("," if properties[all_network_symbols + '_str'] != '' else '') return properties @@ -8324,10 +8365,10 @@ def _fixup_country_specific_networks(shape, props, fid, zoom): # mz_networks is a list of repeated [type, network, ref, ...], it isn't # nested! itr = iter(mz_networks) - for (type, network, ref) in zip(itr, itr, itr): + for (type, network, ref, color, symbol) in zip(itr, itr, itr, itr, itr): if type == 'road': network, ref = logic.fix(network, ref) - new_networks.extend([type, network, ref]) + new_networks.extend([type, network, ref, color, symbol]) props['mz_networks'] = new_networks diff --git a/yaml/roads.yaml b/yaml/roads.yaml index 2096a7ef2..7c2388001 100644 --- a/yaml/roads.yaml +++ b/yaml/roads.yaml @@ -177,31 +177,31 @@ global: - when: sov_a3: CAN level: ['Federal', 'Interstate', 'State'] - then: ['road', 'CA:??:primary', { col: name }] + then: ['road', 'CA:??:primary', { col: name }, { col: colour }, { col: symbol }] - when: sov_a3: 'MEX' level: 'Interstate' - then: ['road', 'MX', { col: name }] + then: ['road', 'MX', { col: name }, { col: colour }, { col: symbol }] - when: sov_a3: 'MEX' level: 'Federal' - then: ['road', 'MX:MX', { col: name }] + then: ['road', 'MX:MX', { col: name }, { col: colour }, { col: symbol }] - when: sov_a3: 'USA' level: 'Interstate' - then: ['road', 'US:I', { col: name }] + then: ['road', 'US:I', { col: name }, { col: colour }, { col: symbol }] - when: sov_a3: 'USA' level: 'Federal' - then: ['road', 'US:US', { col: name }] + then: ['road', 'US:US', { col: name }, { col: colour }, { col: symbol }] - when: continent: 'Oceania' level: 'Federal' - then: ['road', 'NZ:SH', { col: label}] + then: ['road', 'NZ:SH', { col: label}, { col: colour }, { col: symbol }] - when: continent: ['Europe', 'Asia'] level: 'E' - then: ['road', 'e-road', { col: name }] + then: ['road', 'e-road', { col: name }, { col: colour }, { col: symbol }] columns: [ sov_a3, continent, label, level ] # tolls toll: From 41ce83fe6878bd73dd590b4f273b2ade5ef97fcd Mon Sep 17 00:00:00 2001 From: Tomas Vajda Date: Wed, 29 Jun 2022 18:11:06 +0200 Subject: [PATCH 20/27] Change to using osmc:symbol for waymarked hiking routes --- data/functions.sql | 5 +- requirements.txt | 12 +-- vectordatasource/transform.py | 152 +++++++++++++++------------------- yaml/roads.yaml | 14 ++-- 4 files changed, 81 insertions(+), 102 deletions(-) diff --git a/data/functions.sql b/data/functions.sql index 5da08a996..4953e82b6 100644 --- a/data/functions.sql +++ b/data/functions.sql @@ -127,7 +127,7 @@ FROM ( unnest(tags) AS unnested FROM ( SELECT - mz_modify_network(hstore(tags))->ARRAY['route','network','ref','colour','symbol'] AS tags + mz_modify_network(hstore(tags))->ARRAY['route','network','ref','osmc:symbol'] AS tags FROM planet_osm_rels WHERE @@ -136,8 +136,7 @@ FROM ( hstore(tags) ? 'route' AND (hstore(tags) ? 'network' OR hstore(tags) ? 'ref') AND - hstore(tags) ? 'colour' AND - hstore(tags) ? 'symbol' + hstore(tags) ? 'osmc:symbol' ) inner1 ) inner2; $$ LANGUAGE sql STABLE; diff --git a/requirements.txt b/requirements.txt index 3f2b96816..bad4044a9 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,8 +5,9 @@ boto==2.49.0 edtf==2.6.0 future==0.16.0 gunicorn==19.9.0 +hanzidentifier==1.0.2 hiredis==0.2.0 -lxml==4.1.1 +lxml==4.6.2 mapbox-vector-tile==1.2.0 ModestMaps==1.4.7 protobuf==3.4.0 @@ -15,16 +16,17 @@ pyclipper==1.0.6 pycountry==17.9.23 python-dateutil==2.6.1 PyYAML==4.2b4 +git+https://github.com/tilezen/raw_tiles@master#egg=raw_tiles redis==2.10.6 +setuptools<=44.1.1 ## Last version to support py2 Shapely==1.6.2.post1 simplejson==3.12.0 six==1.11.0 StreetNames==0.1.5 +git+https://github.com/tilezen/tilequeue@v2.4.1-final#egg=tilequeue +git+https://github.com/tilezen/tileserver@master#egg=tileserver tqdm==4.31.1 urllib3==1.25.11 webcolors<=1.11 ## Last version to support py2 -Werkzeug==0.12.2 +Werkzeug<=0.16.1 wsgiref==0.1.2 -git+https://github.com/tilezen/tilequeue@v2.4.1-final#egg=tilequeue -git+https://github.com/tilezen/tileserver@master#egg=tileserver -git+https://github.com/tilezen/raw_tiles@master#egg=raw_tiles diff --git a/vectordatasource/transform.py b/vectordatasource/transform.py index eeea62711..70ba96319 100644 --- a/vectordatasource/transform.py +++ b/vectordatasource/transform.py @@ -5760,7 +5760,7 @@ def _do_not_backfill(tags): return None -def _sort_network_us(network, ref, colour, symbol): +def _sort_network_us(network, ref, osmc_symbol): if network is None: network_code = 9999 elif network == 'US:I': @@ -5789,7 +5789,7 @@ def _sort_network_us(network, ref, colour, symbol): } -def _sort_network_au(network, ref, colour, symbol): +def _sort_network_au(network, ref, osmc_symbol): if network is None or \ not network.startswith('AU:'): network_code = 9999 @@ -5801,7 +5801,7 @@ def _sort_network_au(network, ref, colour, symbol): return network_code * 10000 + min(ref, 9999) -def _sort_network_br(network, ref, colour, symbol): +def _sort_network_br(network, ref, osmc_symbol): if network is None: network_code = 9999 elif network == 'BR:Trans-Amazonian': @@ -5814,7 +5814,7 @@ def _sort_network_br(network, ref, colour, symbol): return network_code * 10000 + min(ref, 9999) -def _sort_network_ca(network, ref, colour, symbol): +def _sort_network_ca(network, ref, osmc_symbol): if network is None: network_code = 9999 elif network == 'CA:transcanada': @@ -5829,7 +5829,7 @@ def _sort_network_ca(network, ref, colour, symbol): return network_code * 10000 + min(ref, 9999) -def _sort_network_ch(network, ref, colour, symbol): +def _sort_network_ch(network, ref, osmc_symbol): if network is None: network_code = 9999 elif network == 'CH:national': @@ -5846,7 +5846,7 @@ def _sort_network_ch(network, ref, colour, symbol): return network_code * 10000 + min(ref, 9999) -def _sort_network_cn(network, ref, colour, symbol): +def _sort_network_cn(network, ref, osmc_symbol): if network is None: network_code = 9999 elif network == 'CN:expressway': @@ -5865,7 +5865,7 @@ def _sort_network_cn(network, ref, colour, symbol): return network_code * 10000 + min(ref, 9999) -def _sort_network_es(network, ref, colour, symbol): +def _sort_network_es(network, ref, osmc_symbol): if network is None: network_code = 9999 elif network == 'ES:A-road': @@ -5888,7 +5888,7 @@ def _sort_network_es(network, ref, colour, symbol): return network_code * 10000 + min(ref, 9999) -def _sort_network_fr(network, ref, colour, symbol): +def _sort_network_fr(network, ref, osmc_symbol): if network is None: network_code = 9999 elif network == 'FR:A-road': @@ -5909,7 +5909,7 @@ def _sort_network_fr(network, ref, colour, symbol): return network_code * 10000 + min(ref, 9999) -def _sort_network_de(network, ref, colour, symbol): +def _sort_network_de(network, ref, osmc_symbol): if network is None: network_code = 9999 elif network == 'DE:BAB': @@ -5934,7 +5934,7 @@ def _sort_network_de(network, ref, colour, symbol): return network_code * 10000 + min(ref, 9999) -def _sort_network_ga(network, ref, colour, symbol): +def _sort_network_ga(network, ref, osmc_symbol): if network is None: network_code = 9999 elif network == 'GA:national': @@ -5949,7 +5949,7 @@ def _sort_network_ga(network, ref, colour, symbol): return network_code * 10000 + min(ref, 9999) -def _sort_network_gr(network, ref, colour, symbol): +def _sort_network_gr(network, ref, osmc_symbol): if network is None: network_code = 9999 elif network == 'GR:motorway': @@ -5966,7 +5966,7 @@ def _sort_network_gr(network, ref, colour, symbol): return network_code * 10000 + min(ref, 9999) -def _sort_network_in(network, ref, colour, symbol): +def _sort_network_in(network, ref, osmc_symbol): if network is None: network_code = 9999 elif network == 'IN:NH': @@ -5983,7 +5983,7 @@ def _sort_network_in(network, ref, colour, symbol): return network_code * 10000 + min(ref, 9999) -def _sort_network_ir(network, ref, colour, symbol): +def _sort_network_ir(network, ref, osmc_symbol): if network is None: network_code = 9999 elif network == 'AsianHighway': @@ -5996,7 +5996,7 @@ def _sort_network_ir(network, ref, colour, symbol): return network_code * 10000 + min(ref, 9999) -def _sort_network_kz(network, ref, colour, symbol): +def _sort_network_kz(network, ref, osmc_symbol): if network is None: network_code = 9999 elif network == 'KZ:national': @@ -6015,7 +6015,7 @@ def _sort_network_kz(network, ref, colour, symbol): return network_code * 10000 + min(ref, 9999) -def _sort_network_la(network, ref, colour, symbol): +def _sort_network_la(network, ref, osmc_symbol): if network is None: network_code = 9999 elif network == 'LA:national': @@ -6030,7 +6030,7 @@ def _sort_network_la(network, ref, colour, symbol): return network_code * 10000 + min(ref, 9999) -def _sort_network_mx(network, ref, colour, symbol): +def _sort_network_mx(network, ref, osmc_symbol): if network is None: network_code = 9999 elif network == 'MX:MEX': @@ -6043,7 +6043,7 @@ def _sort_network_mx(network, ref, colour, symbol): return network_code * 10000 + min(ref, 9999) -def _sort_network_my(network, ref, colour, symbol): +def _sort_network_my(network, ref, osmc_symbol): if network is None: network_code = 9999 elif network == 'MY:federal': @@ -6060,7 +6060,7 @@ def _sort_network_my(network, ref, colour, symbol): return network_code * 10000 + min(ref, 9999) -def _sort_network_no(network, ref, colour, symbol): +def _sort_network_no(network, ref, osmc_symbol): if network is None: network_code = 9999 elif network == 'NO:oslo:ring': @@ -6079,7 +6079,7 @@ def _sort_network_no(network, ref, colour, symbol): return network_code * 10000 + min(ref, 9999) -def _sort_network_gb(network, ref, colour, symbol): +def _sort_network_gb(network, ref, osmc_symbol): if network is None: network_code = 9999 elif network == 'GB:M-road': @@ -6100,7 +6100,7 @@ def _sort_network_gb(network, ref, colour, symbol): return network_code * 10000 + min(ref, 9999) -def _sort_network_pl(network, ref, colour, symbol): +def _sort_network_pl(network, ref, osmc_symbol): if network is None: network_code = 9999 elif network == 'PL:motorway': @@ -6119,7 +6119,7 @@ def _sort_network_pl(network, ref, colour, symbol): return network_code * 10000 + min(ref, 9999) -def _sort_network_pt(network, ref, colour, symbol): +def _sort_network_pt(network, ref, osmc_symbol): if network is None: network_code = 9999 elif network == 'PT:motorway': @@ -6148,7 +6148,7 @@ def _sort_network_pt(network, ref, colour, symbol): return network_code * 10000 + min(ref, 9999) -def _sort_network_ro(network, ref, colour, symbol): +def _sort_network_ro(network, ref, osmc_symbol): if network is None: network_code = 9999 elif network == 'RO:motorway': @@ -6169,7 +6169,7 @@ def _sort_network_ro(network, ref, colour, symbol): return network_code * 10000 + min(ref, 9999) -def _sort_network_ru(network, ref, colour, symbol): +def _sort_network_ru(network, ref, osmc_symbol): ref = _make_unicode_or_none(ref) if network is None: @@ -6200,7 +6200,7 @@ def _sort_network_ru(network, ref, colour, symbol): return network_code * 10000 + min(ref, 9999) -def _sort_network_tr(network, ref, colour, symbol): +def _sort_network_tr(network, ref, osmc_symbol): ref = _make_unicode_or_none(ref) if network is None: @@ -6233,7 +6233,7 @@ def _sort_network_tr(network, ref, colour, symbol): return network_code * 10000 + min(ref, 9999) -def _sort_network_ua(network, ref, colour, symbol): +def _sort_network_ua(network, ref, osmc_symbol): ref = _make_unicode_or_none(ref) if network is None: @@ -6259,7 +6259,7 @@ def _sort_network_ua(network, ref, colour, symbol): return network_code * 10000 + min(ref, 9999) -def _sort_network_vn(network, ref, colour, symbol): +def _sort_network_vn(network, ref, osmc_symbol): if network is None: network_code = 9999 elif network == 'VN:expressway': @@ -6283,7 +6283,7 @@ def _sort_network_vn(network, ref, colour, symbol): return network_code * 10000 + min(ref, 9999) -def _sort_network_za(network, ref, colour, symbol): +def _sort_network_za(network, ref, osmc_symbol): if network is None: network_code = 9999 elif network == 'ZA:national': @@ -7649,8 +7649,7 @@ def merge_networks_from_tags(shape, props, fid, zoom): network = props.get('network') ref = props.get('ref') - colour = props.get('colour') - symbol = props.get('symbol') + osmc_symbol = props.get('osmc:symbol') mz_networks = props.get('mz_networks', []) country_code = props.get('country_code') @@ -7661,10 +7660,8 @@ def merge_networks_from_tags(shape, props, fid, zoom): # * if they begin with two letters and a dash, then make the letters upper # case and replace the dash with a colon. # * expand ;-delimited lists in refs - for i in xrange(0, len(mz_networks), 5): - #print("props: {}".format(props)) - #print("len: {} {}".format(len(mz_networks), mz_networks)) - t, n, r, c, s = mz_networks[i:i+5] + for i in xrange(0, len(mz_networks), 4): + t, n, r, o = mz_networks[i:i+4] if t == 'road' and n is not None: n = _fixup_network_country_code(n) mz_networks[i+1] = n @@ -7672,7 +7669,7 @@ def merge_networks_from_tags(shape, props, fid, zoom): refs = r.split(';') mz_networks[i+2] = refs.pop() for new_ref in refs: - mz_networks.extend((t, n, new_ref, c, s)) + mz_networks.extend((t, n, new_ref, o)) # for road networks, if there's no explicit network, but the country code # and ref are both available, then try to use them to back-fill the @@ -7688,8 +7685,8 @@ def merge_networks_from_tags(shape, props, fid, zoom): # then use the network from the relation instead. if network is None: solo_networks_from_relations = [] - for i in xrange(0, len(mz_networks), 5): - t, n, r, c, s = mz_networks[i:i+5] + for i in xrange(0, len(mz_networks), 4): + t, n, r, o = mz_networks[i:i+4] if t == 'road' and n and (r is None or r == ref): solo_networks_from_relations.append((n, i)) @@ -7702,7 +7699,7 @@ def merge_networks_from_tags(shape, props, fid, zoom): # add network back into properties in case we need to pass it # to the backfill. props['network'] = network - del mz_networks[i:i+5] + del mz_networks[i:i+4] if logic and logic.backfill: networks_and_refs = logic.backfill(props) or [] @@ -7729,8 +7726,8 @@ def merge_networks_from_tags(shape, props, fid, zoom): # an entry in mz_networks with the same ref! if ref: found = False - for i in xrange(0, len(mz_networks), 5): - t, _, r, _, _ = mz_networks[i:i+5] + for i in xrange(0, len(mz_networks), 4): + t, _, r, _ = mz_networks[i:i+4] if t == 'road' and r == ref: found = True break @@ -7749,7 +7746,7 @@ def merge_networks_from_tags(shape, props, fid, zoom): if network and ref: props.pop('network', None) props.pop('ref') - mz_networks.extend([_guess_type_from_network(network), network, ref, colour, symbol]) + mz_networks.extend([_guess_type_from_network(network), network, ref, osmc_symbol]) if mz_networks: props['mz_networks'] = mz_networks @@ -7762,7 +7759,7 @@ def merge_networks_from_tags(shape, props, fid, zoom): _ANY_NUMBER = re.compile('[^0-9]*([0-9]+)') -def _default_sort_network(network, ref, colour, symbol): +def _default_sort_network(network, ref, osmc_symbol): """ Returns an integer representing the numeric importance of the network, where lower numbers are more important. @@ -7829,15 +7826,15 @@ def _generic_network_importance(network, ref, codes): return code * 10000 + min(ref, 9999) -def _walking_network_importance(network, ref, colour, symbol): +def _walking_network_importance(network, ref, osmc_symbol): return _generic_network_importance(network, ref, _WALKING_NETWORK_CODES) -def _bicycle_network_importance(network, ref, colour, symbol): +def _bicycle_network_importance(network, ref, osmc_symbol): return _generic_network_importance(network, ref, _BICYCLE_NETWORK_CODES) -def _bus_network_importance(network, ref, colour, symbol): +def _bus_network_importance(network, ref, osmc_symbol): return _generic_network_importance(network, ref, {}) @@ -7969,17 +7966,15 @@ def extract_network_information(shape, properties, fid, zoom): itr = iter(mz_networks) groups = defaultdict(list) - for (type, network, ref, colour, symbol) in zip(itr, itr, itr, itr, itr): + for (type, network, ref, osmc_symbol) in zip(itr, itr, itr, itr): n = _NETWORKS.get(type) if n: - groups[n].append([network, ref, colour, symbol]) + groups[n].append([network, ref, osmc_symbol]) for network, vals in groups.items(): - #print("network prefix: {}".format(network.prefix)) all_networks = 'all_' + network.prefix + 'networks' all_shield_texts = 'all_' + network.prefix + 'shield_texts' - all_network_colours = 'all_' + network.prefix + 'network_colours' - all_network_symbols = 'all_' + network.prefix + 'network_symbols' + all_osmc_symbols = 'all_' + network.prefix + 'osmc_symbols' shield_text_fn = network.shield_text_fn if network is _ROAD_NETWORK and country_logic and \ @@ -7988,9 +7983,8 @@ def extract_network_information(shape, properties, fid, zoom): shield_texts = list() network_names = list() - network_colours = list() - network_symbols = list() - for network_name, ref, colour, symbol in vals: + osmc_symbols = list() + for network_name, ref, osmc_symbol in vals: network_names.append(network_name) ref = _make_unicode_or_none(ref) @@ -8004,13 +7998,11 @@ def extract_network_information(shape, properties, fid, zoom): ref = ref.encode('utf-8') shield_texts.append(ref) - network_colours.append(colour) - network_symbols.append(symbol) + osmc_symbols.append(osmc_symbol) properties[all_networks] = network_names properties[all_shield_texts] = shield_texts - properties[all_network_colours] = network_colours - properties[all_network_symbols] = network_symbols + properties[all_osmc_symbols] = osmc_symbols return (shape, properties, fid) @@ -8023,20 +8015,18 @@ def _choose_most_important_network(properties, prefix, importance_fn): all_networks = 'all_' + prefix + 'networks' all_shield_texts = 'all_' + prefix + 'shield_texts' - all_network_colours = 'all_' + prefix + 'network_colours' - all_network_symbols = 'all_' + prefix + 'network_symbols' + all_osmc_symbols = 'all_' + prefix + 'osmc_symbols' networks = properties.pop(all_networks, None) shield_texts = properties.pop(all_shield_texts, None) - colours = properties.pop(all_network_colours, None) - symbols = properties.pop(all_network_symbols, None) + osmc_symbols = properties.pop(all_osmc_symbols, None) country_code = properties.get('country_code') - if networks and shield_texts and colours and symbols: + if networks and shield_texts and osmc_symbols: def network_key(t): return importance_fn(*t) - tuples = sorted(set(zip(networks, shield_texts, colours, symbols)), key=network_key) + tuples = sorted(set(zip(networks, shield_texts, osmc_symbols)), key=network_key) # i think most route designers would try pretty hard to make sure that # a segment of road isn't on two routes of different networks but with @@ -8046,50 +8036,38 @@ def network_key(t): # with the same ref (and network != none). seen_ref = set() new_tuples = [] - for network, ref, colour, symbol in tuples: + for network, ref, osmc_symbol in tuples: if network: if ref: seen_ref.add(ref) - new_tuples.append((network, ref, colour, symbol)) + new_tuples.append((network, ref, osmc_symbol)) elif ref is not None and ref not in seen_ref: # network is None, fall back to the country code - new_tuples.append((country_code, ref, colour, symbol)) + new_tuples.append((country_code, ref, osmc_symbol)) tuples = new_tuples if tuples: # expose first network as network/shield_text - network, ref, colour, symbol = tuples[0] + network, ref, osmc_symbol = tuples[0] properties[prefix + 'network'] = network properties[prefix + 'shield_text'] = ref - properties[prefix + 'network_colour'] = colour - properties[prefix + 'network_symbol'] = symbol + properties[prefix + 'osmc_symbol'] = osmc_symbol # replace properties with sorted versions of themselves properties[all_networks] = [n[0] for n in tuples] properties[all_shield_texts] = [n[1] for n in tuples] - properties[all_network_colours] = [n[2] for n in tuples] - properties[all_network_symbols] = [n[3] for n in tuples] + properties[all_osmc_symbols] = [n[2] for n in tuples] - properties[all_networks + '_str'] = '' - properties[all_shield_texts + '_str'] = '' - properties[all_network_colours + '_str'] = '' - properties[all_network_symbols + '_str'] = '' + properties[all_osmc_symbols + '_str'] = '' - if properties[all_network_colours] is not None: - for x in properties[all_network_colours]: + if properties[all_osmc_symbols] is not None: + for x in properties[all_osmc_symbols]: if x is not None: - properties[all_network_colours + '_str'] += ("," if properties[all_network_colours + '_str'] != '' else '') + x + properties[all_osmc_symbols + '_str'] += ("," if properties[all_osmc_symbols + '_str'] != '' else '') + x else: - properties[all_network_colours + '_str'] += ("," if properties[all_network_colours + '_str'] != '' else '') - - if properties[all_network_symbols] is not None: - for x in properties[all_network_symbols]: - if x is not None: - properties[all_network_symbols + '_str'] += ("," if properties[all_network_symbols + '_str'] != '' else '') + x - else: - properties[all_network_symbols + '_str'] += ("," if properties[all_network_symbols + '_str'] != '' else '') + properties[all_osmc_symbols + '_str'] += ("," if properties[all_osmc_symbols + '_str'] != '' else '') return properties @@ -8365,10 +8343,10 @@ def _fixup_country_specific_networks(shape, props, fid, zoom): # mz_networks is a list of repeated [type, network, ref, ...], it isn't # nested! itr = iter(mz_networks) - for (type, network, ref, color, symbol) in zip(itr, itr, itr, itr, itr): + for (type, network, ref, osmc_symbol) in zip(itr, itr, itr, itr): if type == 'road': network, ref = logic.fix(network, ref) - new_networks.extend([type, network, ref, color, symbol]) + new_networks.extend([type, network, ref, osmc_symbol]) props['mz_networks'] = new_networks diff --git a/yaml/roads.yaml b/yaml/roads.yaml index 7c2388001..1701960b2 100644 --- a/yaml/roads.yaml +++ b/yaml/roads.yaml @@ -177,31 +177,31 @@ global: - when: sov_a3: CAN level: ['Federal', 'Interstate', 'State'] - then: ['road', 'CA:??:primary', { col: name }, { col: colour }, { col: symbol }] + then: ['road', 'CA:??:primary', { col: name }, { col: "osmc:symbol" }] - when: sov_a3: 'MEX' level: 'Interstate' - then: ['road', 'MX', { col: name }, { col: colour }, { col: symbol }] + then: ['road', 'MX', { col: name }, { col: "osmc:symbol" }] - when: sov_a3: 'MEX' level: 'Federal' - then: ['road', 'MX:MX', { col: name }, { col: colour }, { col: symbol }] + then: ['road', 'MX:MX', { col: name }, { col: "osmc:symbol" }] - when: sov_a3: 'USA' level: 'Interstate' - then: ['road', 'US:I', { col: name }, { col: colour }, { col: symbol }] + then: ['road', 'US:I', { col: name }, { col: "osmc:symbol" }] - when: sov_a3: 'USA' level: 'Federal' - then: ['road', 'US:US', { col: name }, { col: colour }, { col: symbol }] + then: ['road', 'US:US', { col: name }, { col: "osmc:symbol" }] - when: continent: 'Oceania' level: 'Federal' - then: ['road', 'NZ:SH', { col: label}, { col: colour }, { col: symbol }] + then: ['road', 'NZ:SH', { col: label}, { col: "osmc:symbol" }] - when: continent: ['Europe', 'Asia'] level: 'E' - then: ['road', 'e-road', { col: name }, { col: colour }, { col: symbol }] + then: ['road', 'e-road', { col: name }, { col: "osmc:symbol" }] columns: [ sov_a3, continent, label, level ] # tolls toll: From 8a8e4c82576789bf7bcfd623dfc10870a6bf8479 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sat, 9 Jul 2022 17:37:25 +0000 Subject: [PATCH 21/27] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- queries/contours.jinja2 | 2 +- vectordatasource/transform.py | 100 +++++++++++++++++----------------- yaml/contours.yaml | 1 - 3 files changed, 51 insertions(+), 52 deletions(-) diff --git a/queries/contours.jinja2 b/queries/contours.jinja2 index a595c47f0..14484a725 100644 --- a/queries/contours.jinja2 +++ b/queries/contours.jinja2 @@ -19,7 +19,7 @@ FROM ( ele, way - FROM + FROM contours diff --git a/vectordatasource/transform.py b/vectordatasource/transform.py index ee2d7faa0..b15585905 100644 --- a/vectordatasource/transform.py +++ b/vectordatasource/transform.py @@ -710,9 +710,9 @@ def _sorted_attributes(features, attrs, attribute): sort_key = attrs.get('sort_key') reverse = attrs.get('reverse') - assert sort_key is not None, "Configuration " + \ + assert sort_key is not None, 'Configuration ' + \ "parameter 'sort_key' is missing, please " + \ - "check your configuration." + 'check your configuration.' # first, we find the _minimum_ ordering over the # group of key values. this is because we only do @@ -776,8 +776,8 @@ def _sorted_attributes(features, attrs, attribute): # 4: contains a polygon / two-dimensional object def _geom_dimensions(g): dim = _GEOMETRY_DIMENSIONS.get(g.geom_type) - assert dim is not None, "Unknown geometry type " + \ - "%s in transform._geom_dimensions." % \ + assert dim is not None, 'Unknown geometry type ' + \ + '%s in transform._geom_dimensions.' % \ repr(g.geom_type) # recurse for geometry collections to find the true @@ -1865,7 +1865,7 @@ def _make_joined_name(props): >>> _make_joined_name(x) >>> x {'name:right': 'Right', 'name': 'Already Exists', 'name:left': 'Left'} - """ # noqa + """ # don't overwrite an existing name if 'name' in props: @@ -1876,7 +1876,7 @@ def _make_joined_name(props): if lname is not None: if rname is not None: - props['name'] = "%s - %s" % (lname, rname) + props['name'] = '%s - %s' % (lname, rname) else: props['name'] = lname elif rname is not None: @@ -2564,7 +2564,7 @@ def remove_zero_area(shape, properties, fid, zoom): # remove the property if it's present. we _only_ want # to replace it if it matches the positive, float # criteria. - area = properties.pop("area", None) + area = properties.pop('area', None) # try to parse a string if the area has been sent as a # string. it should come through as a float, though, @@ -3533,7 +3533,7 @@ def _intersects_bounds(a, b): # A bucket used to sort shapes into the next level of the quad tree. -Bucket = namedtuple("Bucket", "bounds box shapes") +Bucket = namedtuple('Bucket', 'bounds box shapes') def _mkbucket(*bounds): @@ -3602,8 +3602,8 @@ def _merge_shapes_recursively(shapes, shapes_per_merge, merger, depth=0, break else: raise AssertionError( - "Expected shape %r to intersect at least one quadrant, but " - "intersects none." % (shape.wkt)) + 'Expected shape %r to intersect at least one quadrant, but ' + 'intersects none.' % (shape.wkt)) # recurse if necessary to get below the number of shapes per merge that # we want. @@ -3885,7 +3885,7 @@ def _angle_at(linestring, pt): nx = pt pt = linestring.coords[-2] else: - assert False, "Expected point to be first or last" + assert False, 'Expected point to be first or last' if nx == pt: return None @@ -4039,7 +4039,7 @@ def _loop_merge_junctions(geom, angle_tolerance): break assert len(geom.geoms) < mls_size, \ - "Number of geometries should stay the same or reduce after merge." + 'Number of geometries should stay the same or reduce after merge.' # otherwise, keep looping mls_size = len(geom.geoms) @@ -4404,7 +4404,7 @@ def normalize_tourism_kind(shape, properties, fid, zoom): main kind. See https://github.com/mapzen/vector-datasource/issues/440 for more details. - """ # noqa + """ zoo = properties.pop('zoo', None) if zoo is not None: @@ -4586,7 +4586,7 @@ def match(self, other): return True def __repr__(self): - return "*" + return '*' class _NoneMatcher(object): @@ -4594,7 +4594,7 @@ def match(self, other): return other is None def __repr__(self): - return "-" + return '-' class _SomeMatcher(object): @@ -4602,7 +4602,7 @@ def match(self, other): return other is not None def __repr__(self): - return "+" + return '+' class _TrueMatcher(object): @@ -4610,7 +4610,7 @@ def match(self, other): return other is True def __repr__(self): - return "true" + return 'true' class _ExactMatcher(object): @@ -4697,7 +4697,7 @@ def __repr__(self): def _parse_kt(key_type): - kt = key_type.split("::") + kt = key_type.split('::') type_key = kt[1] if len(kt) > 1 else None fn = _KEY_TYPE_LOOKUP.get(type_key, str) @@ -4994,9 +4994,9 @@ def drop_small_inners(ctx): source_layers = ctx.params.get('source_layers') assert source_layers, \ - "You must provide source_layers (layer names) to drop_small_inners" + 'You must provide source_layers (layer names) to drop_small_inners' assert pixel_area, \ - "You must provide a pixel_area parameter to drop_small_inners" + 'You must provide a pixel_area parameter to drop_small_inners' if zoom < start_zoom: return None @@ -5168,31 +5168,31 @@ def simplify_and_clip(ctx): _lookup_operator_rules = { - 'United States National Park Service': ( - 'National Park Service', - 'US National Park Service', - 'U.S. National Park Service', - 'US National Park service'), - 'United States Forest Service': ( - 'US Forest Service', - 'U.S. Forest Service', - 'USDA Forest Service', - 'United States Department of Agriculture', - 'US National Forest Service', - 'United State Forest Service', - 'U.S. National Forest Service'), - 'National Parks & Wildife Service NSW': ( - 'Department of National Parks NSW', - 'Dept of NSW National Parks', - 'Dept of National Parks NSW', - 'Department of National Parks NSW', - 'NSW National Parks', - 'NSW National Parks & Wildlife Service', - 'NSW National Parks and Wildlife Service', - 'NSW Parks and Wildlife Service', - 'NSW Parks and Wildlife Service (NPWS)', - 'National Parks and Wildlife NSW', - 'National Parks and Wildlife Service NSW')} + 'United States National Park Service': ( + 'National Park Service', + 'US National Park Service', + 'U.S. National Park Service', + 'US National Park service'), + 'United States Forest Service': ( + 'US Forest Service', + 'U.S. Forest Service', + 'USDA Forest Service', + 'United States Department of Agriculture', + 'US National Forest Service', + 'United State Forest Service', + 'U.S. National Forest Service'), + 'National Parks & Wildife Service NSW': ( + 'Department of National Parks NSW', + 'Dept of NSW National Parks', + 'Dept of National Parks NSW', + 'Department of National Parks NSW', + 'NSW National Parks', + 'NSW National Parks & Wildlife Service', + 'NSW National Parks and Wildlife Service', + 'NSW Parks and Wildlife Service', + 'NSW Parks and Wildlife Service (NPWS)', + 'National Parks and Wildlife NSW', + 'National Parks and Wildlife Service NSW')} normalized_operator_lookup = {} for normalized_operator, variants in _lookup_operator_rules.items(): @@ -8178,13 +8178,13 @@ def __init__(self, colours): self.namelookup = dict() for name, colour in colours.items(): assert len(colour) == 3, \ - "Colours must lists of be of length 3 (%r: %r)" % \ + 'Colours must lists of be of length 3 (%r: %r)' % \ (name, colour) for val in colour: assert isinstance(val, int), \ - "Colour values must be integers (%r: %r)" % (name, colour) + 'Colour values must be integers (%r: %r)' % (name, colour) assert val >= 0 and val <= 255, \ - "Colour values must be between 0 and 255 (%r: %r)" % \ + 'Colour values must be between 0 and 255 (%r: %r)' % \ (name, colour) self.namelookup[tuple(colour)] = name self.tree = kdtree.create(colours.values()) @@ -8765,8 +8765,8 @@ def add_vehicle_restrictions(shape, props, fid, zoom): def _one_dp(val, unit): deci = int(floor(10 * val)) if deci % 10 == 0: - return "%d%s" % (deci / 10, unit) - return "%.1f%s" % (0.1 * deci, unit) + return '%d%s' % (deci / 10, unit) + return '%.1f%s' % (0.1 * deci, unit) def _metres(val): # parse metres or feet and inches, return cm diff --git a/yaml/contours.yaml b/yaml/contours.yaml index 753f955dc..ab49a814a 100644 --- a/yaml/contours.yaml +++ b/yaml/contours.yaml @@ -13,4 +13,3 @@ filters: output: <<: *output_properties kind: contour - From 666a1b86df02bf55e5415b3867c498341c0af0ee Mon Sep 17 00:00:00 2001 From: Tomas Vajda Date: Wed, 28 Jun 2023 17:19:10 +0200 Subject: [PATCH 22/27] Add fiona --- requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements.txt b/requirements.txt index bad4044a9..c3e0f21f9 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,6 +3,7 @@ argparse==1.4.0 ASTFormatter==0.6.4 boto==2.49.0 edtf==2.6.0 +fiona==1.8.22 future==0.16.0 gunicorn==19.9.0 hanzidentifier==1.0.2 From 8cc10cda04e6c380bac4c097f8c86017fbe2ca21 Mon Sep 17 00:00:00 2001 From: Tomas Vajda Date: Mon, 3 Jun 2024 17:02:56 +0200 Subject: [PATCH 23/27] Add croquet --- yaml/pois.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/yaml/pois.yaml b/yaml/pois.yaml index b9b50cc62..50634438e 100644 --- a/yaml/pois.yaml +++ b/yaml/pois.yaml @@ -275,6 +275,7 @@ global: - climbing - cricket - cricket_nets + - croquet - cycling - equestrian - exercise From b77fc2366fd97265ceae3be047e5524dd1f0336b Mon Sep 17 00:00:00 2001 From: Tomas Vajda Date: Wed, 12 Jun 2024 16:50:57 +0200 Subject: [PATCH 24/27] Revert simplification and fix missing boundary property for water layer --- queries.yaml | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/queries.yaml b/queries.yaml index 2fb1a9a89..542a77597 100644 --- a/queries.yaml +++ b/queries.yaml @@ -157,7 +157,7 @@ layers: water: geometry_types: [Point, MultiPoint, Polygon, MultiPolygon, LineString, MultiLineString] simplify_before_intersect: true - simplify_start: 0 + simplify_start: 8 transform: - vectordatasource.transform.tags_create_dict - vectordatasource.transform.tags_name_i18n @@ -167,13 +167,13 @@ layers: - vectordatasource.transform.add_id_to_properties - vectordatasource.transform.detect_osm_relation - vectordatasource.transform.remove_feature_id - - vectordatasource.transform.truncate_min_zoom_to_1dp + - vectordatasource.transform.truncate_min_zoom_to_2dp sort: vectordatasource.sort.water area-inclusion-threshold: 1 earth: geometry_types: [Point, MultiPoint, Polygon, MultiPolygon, LineString, MultiLineString] simplify_before_intersect: true - simplify_start: 0 + simplify_start: 8 transform: - vectordatasource.transform.tags_create_dict - vectordatasource.transform.tags_name_i18n @@ -181,7 +181,7 @@ layers: - vectordatasource.transform.detect_osm_relation - vectordatasource.transform.add_id_to_properties - vectordatasource.transform.remove_feature_id - - vectordatasource.transform.truncate_min_zoom_to_1dp + - vectordatasource.transform.truncate_min_zoom_to_2dp sort: vectordatasource.sort.earth area-inclusion-threshold: 1 places: @@ -216,13 +216,13 @@ layers: - vectordatasource.transform.remove_feature_id - vectordatasource.transform.normalize_operator_values - vectordatasource.transform.major_airport_detector - - vectordatasource.transform.truncate_min_zoom_to_1dp + - vectordatasource.transform.truncate_min_zoom_to_2dp sort: vectordatasource.sort.landuse area-inclusion-threshold: 1 roads: geometry_types: [LineString, MultiLineString] - simplify_start: 4 - tolerance: 1.0 + simplify_start: 8 + tolerance: 2.0 transform: - vectordatasource.transform.tags_create_dict - vectordatasource.transform.tags_name_i18n @@ -241,7 +241,7 @@ layers: - vectordatasource.transform.road_trim_properties - vectordatasource.transform.remove_feature_id - vectordatasource.transform.tags_remove - - vectordatasource.transform.truncate_min_zoom_to_1dp + - vectordatasource.transform.truncate_min_zoom_to_2dp sort: vectordatasource.sort.roads area-inclusion-threshold: 1 buildings: @@ -263,7 +263,7 @@ layers: - vectordatasource.transform.normalize_tourism_kind - vectordatasource.transform.building_trim_properties - vectordatasource.transform.remove_feature_id - - vectordatasource.transform.truncate_min_zoom_to_1dp + - vectordatasource.transform.truncate_min_zoom_to_2dp sort: vectordatasource.sort.buildings area-inclusion-threshold: 1 pois: @@ -288,14 +288,14 @@ layers: - vectordatasource.transform.major_airport_detector - vectordatasource.transform.elevation_to_meters - vectordatasource.transform.normalize_operator_values - - vectordatasource.transform.truncate_min_zoom_to_1dp + - vectordatasource.transform.truncate_min_zoom_to_2dp sort: vectordatasource.sort.pois area-inclusion-threshold: 1 boundaries: geometry_types: [Polygon, MultiPolygon, LineString, MultiLineString] simplify_before_intersect: true - simplify_start: 0 - tolerance: 1.0 + simplify_start: 8 + tolerance: 2.0 transform: - vectordatasource.transform.tags_create_dict - vectordatasource.transform.tags_name_i18n @@ -303,7 +303,7 @@ layers: - vectordatasource.transform.add_id_to_properties - vectordatasource.transform.detect_osm_relation - vectordatasource.transform.remove_feature_id - - vectordatasource.transform.truncate_min_zoom_to_1dp + - vectordatasource.transform.truncate_min_zoom_to_2dp - vectordatasource.transform.remap_viewpoint_kinds - vectordatasource.transform.unpack_viewpoint_claims # note: the next line needs to come after anything else that touches the kind:XX values. @@ -314,7 +314,7 @@ layers: area-inclusion-threshold: 1 transit: geometry_types: [LineString, MultiLineString, Polygon, MultiPolygon] - simplify_start: 5 + simplify_start: 8 tolerance: 1.0 transform: - vectordatasource.transform.tags_create_dict @@ -326,7 +326,7 @@ layers: - vectordatasource.transform.route_name - vectordatasource.transform.parse_layer_as_float - vectordatasource.transform.remove_feature_id - - vectordatasource.transform.truncate_min_zoom_to_1dp + - vectordatasource.transform.truncate_min_zoom_to_2dp sort: vectordatasource.sort.transit area-inclusion-threshold: 1 admin_areas: @@ -777,7 +777,7 @@ post_process: params: source_layer: boundaries start_zoom: 0 - end_zoom: 14 + end_zoom: 11 properties: - id - "id:left" @@ -947,7 +947,6 @@ post_process: properties: - id - area - - boundary - layer - wikidata_id - osm_relation From 019f20438f14f92a0ca463828c2b246f7215ffd4 Mon Sep 17 00:00:00 2001 From: Tomas Vajda Date: Wed, 12 Jun 2024 16:52:26 +0200 Subject: [PATCH 25/27] Update gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 9985e51fa..3b0d04286 100644 --- a/.gitignore +++ b/.gitignore @@ -19,11 +19,13 @@ data/*.dbf data/*.prj data/*.shx data/*.qpj +data/*.qmd data/wof_neighbourhoods.pgdump data/*.README.html data/*.VERSION.txt data/*.json data/wikidata_snapshot.sql +data/wof_snapshot.sql # python compiled bytecode and development files *.pyc From cb36bc47e822aede87819a4658e4051bc3b7142a Mon Sep 17 00:00:00 2001 From: Tomas Vajda Date: Wed, 19 Jun 2024 19:06:40 +0200 Subject: [PATCH 26/27] Remove ogr2ogr slipsrc parameter --- data/Makefile-prepare-data.jinja2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/Makefile-prepare-data.jinja2 b/data/Makefile-prepare-data.jinja2 index 1858bd695..588cb094d 100644 --- a/data/Makefile-prepare-data.jinja2 +++ b/data/Makefile-prepare-data.jinja2 @@ -1,7 +1,7 @@ # clip input to the bounds of EPSG:3857 _before_ projecting. this ensures that # there are no unprojectable points, but that the data fills the all the way to # the corners of the world. -OGR_CLIP_OPTS=-clipsrc -180 -85.051128779806604 180 85.051128779806604 +OGR_CLIP_OPTS= all: download shapefiles From ee08f375bd45190727c17952c276d2866898f712 Mon Sep 17 00:00:00 2001 From: Tomas Vajda Date: Wed, 2 Oct 2024 16:14:17 +0200 Subject: [PATCH 27/27] Add information and memorial into poi tags --- yaml/pois.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/yaml/pois.yaml b/yaml/pois.yaml index c589b46e2..65fce1854 100644 --- a/yaml/pois.yaml +++ b/yaml/pois.yaml @@ -21,6 +21,8 @@ global: exit_to: {col: exit_to} wikidata_id: {col: wikidata} direction: {col: direction} + memorial: {col: memorial} + information: {col: information} - &transit_properties mz_transit_score: {col: mz_transit_score} mz_transit_root_relation_id: {col: mz_transit_root_relation_id}