Introduce landuse classes

pull/24/head
lukasmartinelli 2016-10-24 14:28:09 +02:00
rodzic f65fded9f4
commit bdea298990
3 zmienionych plików z 32 dodań i 12 usunięć

Wyświetl plik

@ -1,46 +1,57 @@
CREATE OR REPLACE FUNCTION landuse_class(landuse TEXT, amenity TEXT) RETURNS TEXT AS $$
SELECT CASE
WHEN amenity IN ('school', 'university', 'kindergarten', 'college', 'library') THEN 'school'
WHEN landuse IN('hospital', 'railway', 'cemetery', 'military', 'residential') THEN landuse
ELSE NULL
END;
$$ LANGUAGE SQL IMMUTABLE;
CREATE OR REPLACE VIEW landuse_z4 AS (
SELECT NULL::bigint AS osm_id, geom AS geometry, 'residential' AS landuse, scalerank
SELECT NULL::bigint AS osm_id, geom AS geometry, 'residential' AS landuse, NULL::text AS amenity, scalerank
FROM ne_50m_urban_areas
WHERE scalerank <= 2
);
CREATE OR REPLACE VIEW landuse_z5 AS (
SELECT NULL::bigint AS osm_id, geom AS geometry, 'residential' AS landuse, scalerank
SELECT NULL::bigint AS osm_id, geom AS geometry, 'residential' AS landuse, NULL::text AS amenity, scalerank
FROM ne_50m_urban_areas
);
CREATE OR REPLACE VIEW landuse_z6 AS (
SELECT NULL::bigint AS osm_id, geom AS geometry, 'residential' AS landuse, scalerank
SELECT NULL::bigint AS osm_id, geom AS geometry, 'residential' AS landuse, NULL::text AS amenity, scalerank
FROM ne_10m_urban_areas
);
CREATE OR REPLACE VIEW landuse_z10 AS (
SELECT osm_id, geometry, landuse, NULL::int as scalerank FROM osm_landuse_polygon_gen2
SELECT osm_id, geometry, landuse, amenity, NULL::int as scalerank FROM osm_landuse_polygon_gen2
WHERE ST_Area(geometry) > 1200000
);
CREATE OR REPLACE VIEW landuse_z11 AS (
SELECT osm_id, geometry, landuse, NULL::int as scalerank FROM osm_landuse_polygon_gen2
SELECT osm_id, geometry, landuse, amenity, NULL::int as scalerank FROM osm_landuse_polygon_gen2
WHERE ST_Area(geometry) > 480000
);
CREATE OR REPLACE VIEW landuse_z12 AS (
SELECT osm_id, geometry, landuse, NULL::int as scalerank FROM osm_landuse_polygon_gen1
SELECT osm_id, geometry, landuse, amenity, NULL::int as scalerank FROM osm_landuse_polygon_gen1
WHERE ST_Area(geometry) > 240000
);
CREATE OR REPLACE VIEW landuse_z13 AS (
SELECT osm_id, geometry, landuse, NULL::int as scalerank FROM osm_landuse_polygon
SELECT osm_id, geometry, landuse, amenity, NULL::int as scalerank FROM osm_landuse_polygon
WHERE ST_Area(geometry) > 60000
);
CREATE OR REPLACE VIEW landuse_z14 AS (
SELECT osm_id, geometry, landuse, NULL::int as scalerank FROM osm_landuse_polygon
SELECT osm_id, geometry, landuse, amenity, NULL::int as scalerank FROM osm_landuse_polygon
);
CREATE OR REPLACE FUNCTION layer_landuse(bbox geometry, zoom_level int)
RETURNS TABLE(osm_id bigint, geometry geometry, landuse text) AS $$
SELECT osm_id, geometry, landuse FROM (
RETURNS TABLE(osm_id bigint, geometry geometry, class text, subclass text) AS $$
SELECT osm_id, geometry,
landuse_class(landuse, amenity) AS class,
COALESCE(NULLIF(landuse, ''), NULLIF(amenity, '')) AS subclass
FROM (
SELECT * FROM landuse_z4
WHERE zoom_level = 4
UNION ALL

Wyświetl plik

@ -3,6 +3,7 @@ layer:
description: Landcover is used to describe the physical material at the surface of the earth. Land covers include grass, asphalt, trees, bare ground etc. Tagging of landcover is often only implied by other tags at present, for example a park may be assumed to be covered in grass, but in some places this may in fact be trees or sand or some other cover. The following keys imply or specifically indicate landcover properties.
buffer_size: 4
datasource:
geometry_field: geometry
query: (SELECT * FROM layer_landuse(!bbox!, z(!scale_denominator!))) AS t
schema:
- ./landuse.sql

Wyświetl plik

@ -16,14 +16,22 @@ tables:
- name: geometry
type: validated_geometry
- name: landuse
type: mapping_value
key: landuse
type: string
- name: amenity
key: amenity
type: string
- name: area
type: pseudoarea
mapping:
amenity:
- school
- university
- kindergarten
- college
- library
- hospital
landuse:
- railway
- cemetry
- cemetery
- military