Move road to imposm3 based highway

pull/24/head
lukasmartinelli 2016-10-10 20:17:05 +02:00
rodzic c86f5b9a26
commit a48123657c
5 zmienionych plików z 212 dodań i 141 usunięć

Wyświetl plik

@ -0,0 +1,136 @@
CREATE OR REPLACE FUNCTION ne_highway(type VARCHAR) RETURNS VARCHAR AS $$
SELECT CASE type
WHEN 'Major Highway' THEN 'motorway'
WHEN 'Secondary Highway' THEN 'trunk'
WHEN 'Road' THEN 'primary'
ELSE type
END;
$$ LANGUAGE SQL IMMUTABLE;
CREATE TABLE IF NOT EXISTS ne_10m_global_roads AS (
SELECT geom, scalerank, ne_highway(type) AS highway
FROM ne_10m_roads
WHERE continent <> 'North America'
AND featurecla = 'Road'
AND type IN ('Major Highway', 'Secondary Highway', 'Road')
UNION ALL
SELECT geom, scalerank, ne_highway(type) AS highway
FROM ne_10m_roads_north_america
WHERE type IN ('Major Highway', 'Secondary Highway', 'Road')
);
CREATE INDEX IF NOT EXISTS ne_10m_global_roads_geom_idx ON ne_10m_global_roads USING gist(geom);
CREATE INDEX IF NOT EXISTS ne_10m_global_roads_scalerank_idx ON ne_10m_global_roads(scalerank);
CREATE OR REPLACE VIEW highway_z4 AS (
SELECT geom, highway
FROM ne_10m_global_roads
WHERE scalerank <= 5
);
CREATE OR REPLACE VIEW highway_z5 AS (
SELECT geom, highway
FROM ne_10m_global_roads
WHERE scalerank <= 6
);
CREATE OR REPLACE VIEW highway_z6 AS (
SELECT geom, highway
FROM ne_10m_global_roads
WHERE scalerank <= 7
);
CREATE OR REPLACE VIEW highway_z7 AS (
SELECT geom, highway
FROM ne_10m_global_roads
WHERE scalerank <= 7
);
CREATE TABLE IF NOT EXISTS highway_z8 AS (
SELECT ST_Simplify(geometry, 200) AS geom, highway
FROM osm_highway_linestring
WHERE highway IN ('motorway','trunk')
);
CREATE INDEX IF NOT EXISTS highway_z8_geom_idx ON highway_z8 USING gist(geom);
CREATE TABLE IF NOT EXISTS highway_z9 AS (
SELECT ST_Simplify(geometry, 120) AS geom, highway
FROM osm_highway_linestring
WHERE highway IN ('motorway','trunk', 'primary')
);
CREATE INDEX IF NOT EXISTS highway_z9_geom_idx ON highway_z9 USING gist(geom);
CREATE TABLE IF NOT EXISTS highway_z10 AS (
SELECT ST_Simplify(geometry, 50) AS geom, highway
FROM osm_highway_linestring
WHERE highway IN ('motorway','trunk', 'primary', 'secondary')
);
CREATE INDEX IF NOT EXISTS highway_z10_geom_idx ON highway_z10 USING gist(geom);
CREATE TABLE IF NOT EXISTS highway_z11 AS (
SELECT ST_Simplify(geometry, 20) AS geom, highway
FROM osm_highway_linestring
WHERE highway IN ('motorway','trunk', 'primary', 'secondary', 'tertiary')
);
CREATE INDEX IF NOT EXISTS highway_z11_geom_idx ON highway_z11 USING gist(geom);
CREATE OR REPLACE VIEW highway_z12 AS (
SELECT geometry AS geom, highway
FROM osm_highway_linestring
WHERE highway IN ('motorway','trunk','primary', 'secondary', 'tertiary', 'minor')
);
CREATE OR REPLACE VIEW highway_z13 AS (
SELECT geometry AS geom, highway
FROM osm_highway_linestring
WHERE highway IN (
'motorway',
'motorway_link',
'trunk',
'trunk_link',
'primary',
'primary_link',
'secondary',
'secondary_link',
'tertiary',
'tertiary_link',
'road',
'living_street',
'service',
'residential'
)
);
CREATE OR REPLACE VIEW highway_z14 AS (
SELECT geometry AS geom, highway
FROM osm_highway_linestring
);
CREATE OR REPLACE FUNCTION layer_highway(bbox geometry, zoom_level int)
RETURNS TABLE(geom geometry, highway text) AS $$
SELECT geom, highway FROM (
SELECT * FROM highway_z4 WHERE zoom_level BETWEEN 4 AND 5
UNION ALL
SELECT * FROM highway_z5 WHERE zoom_level = 5
UNION ALL
SELECT * FROM highway_z6 WHERE zoom_level = 6
UNION ALL
SELECT * FROM highway_z7 WHERE zoom_level = 7
UNION ALL
SELECT * FROM highway_z8 WHERE zoom_level = 8
UNION ALL
SELECT * FROM highway_z9 WHERE zoom_level = 9
UNION ALL
SELECT * FROM highway_z10 WHERE zoom_level = 10
UNION ALL
SELECT * FROM highway_z11 WHERE zoom_level = 11
UNION ALL
SELECT * FROM highway_z12 WHERE zoom_level = 12
UNION ALL
SELECT * FROM highway_z13 WHERE zoom_level = 13
UNION ALL
SELECT * FROM highway_z14 WHERE zoom_level >= 14
) AS zoom_levels
WHERE geom && bbox;
$$ LANGUAGE SQL IMMUTABLE;

Wyświetl plik

@ -0,0 +1,17 @@
layer:
id: "highway"
description: |
[OpenStreetMap highway] which is used for roads, paths and cycletracks
and other recognised routes on land.
buffer_size: 4
srs: +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over
fields:
class: String
datasource:
srid: 900913
query: (SELECT * FROM layer_highway(!bbox!, z(!scale_denominator!))) AS t
schema:
- ./highway.sql
datasources:
- type: imposm3
mapping_file: ./mapping.yaml

Wyświetl plik

@ -0,0 +1,59 @@
tables:
highway_linestring:
type: linestring
fields:
- name: osm_id
type: id
- name: geometry
type: geometry
- name: highway
key: highway
type: string
- key: oneway
name: oneway
type: direction
- key: layer
name: layer
type: integer
- name: z_order
type: wayzorder
- key: tunnel
name: is_tunnel
type: bool
- key: bridge
name: is_bridge
type: bool
- key: name
name: name
type: string
- name: name_en
key: name:en
type: string
mapping:
highway:
- motorway
- motorway_link
- trunk
- trunk_link
- primary
- primary_link
- secondary
- secondary_link
- tertiary
- tertiary_link
- unclassified
- residential
- road
- living_street
- raceway
- construction
- track
- service
- path
- cycleway
- steps
- bridleway
- footway
- corridor
- crossing
- pedestrian

Wyświetl plik

@ -1,129 +0,0 @@
CREATE OR REPLACE FUNCTION ne_road_class(type VARCHAR) RETURNS VARCHAR AS $$
SELECT CASE type
WHEN 'Major Highway' THEN 'motorway'
WHEN 'Secondary Highway' THEN 'trunk'
WHEN 'Road' THEN 'primary'
ELSE type
END;
$$ LANGUAGE SQL IMMUTABLE;
CREATE TABLE IF NOT EXISTS ne_10m_global_roads AS (
SELECT geom, scalerank, ne_road_class(type) AS class
FROM ne_10m_roads
WHERE continent <> 'North America'
AND featurecla = 'Road'
AND type IN ('Major Highway', 'Secondary Highway', 'Road')
UNION ALL
SELECT geom, scalerank, ne_road_class(type) AS class
FROM ne_10m_roads_north_america
WHERE type IN ('Major Highway', 'Secondary Highway', 'Road')
);
CREATE INDEX IF NOT EXISTS ne_10m_global_roads_geom_idx ON ne_10m_global_roads USING gist(geom);
CREATE INDEX IF NOT EXISTS ne_10m_global_roads_scalerank_idx ON ne_10m_global_roads(scalerank);
CREATE OR REPLACE VIEW road_z4 AS (
SELECT geom, class
FROM ne_10m_global_roads
WHERE scalerank <= 5
);
CREATE OR REPLACE VIEW road_z5 AS (
SELECT geom, class
FROM ne_10m_global_roads
WHERE scalerank <= 6
);
CREATE OR REPLACE VIEW road_z6 AS (
SELECT geom, class
FROM ne_10m_global_roads
WHERE scalerank <= 7
);
CREATE OR REPLACE VIEW road_z7 AS (
SELECT geom, class
FROM ne_10m_global_roads
WHERE scalerank <= 7
);
CREATE TABLE IF NOT EXISTS road_z8 AS (
SELECT ST_Simplify(way, 200) AS geom, class::text
FROM roads
WHERE class IN ('motorway','trunk')
);
CREATE INDEX IF NOT EXISTS road_z8_geom_idx ON road_z8 USING gist(geom);
CREATE TABLE IF NOT EXISTS road_z9 AS (
SELECT ST_Simplify(way, 120) AS geom, class::text
FROM roads
WHERE class IN ('motorway','trunk', 'primary')
);
CREATE INDEX IF NOT EXISTS road_z9_geom_idx ON road_z9 USING gist(geom);
CREATE TABLE IF NOT EXISTS road_z10 AS (
SELECT ST_Simplify(way, 50) AS geom, class::text
FROM roads
WHERE class IN ('motorway','trunk', 'primary', 'secondary')
);
CREATE INDEX IF NOT EXISTS road_z10_geom_idx ON road_z10 USING gist(geom);
CREATE TABLE IF NOT EXISTS road_z11 AS (
SELECT ST_Simplify(way, 20) AS geom, class::text
FROM roads
WHERE class IN ('motorway','trunk', 'primary', 'secondary', 'tertiary')
);
CREATE INDEX IF NOT EXISTS road_z11_geom_idx ON road_z11 USING gist(geom);
CREATE OR REPLACE VIEW road_z12 AS (
SELECT way AS geom, class::text
FROM roads
WHERE class IN ('motorway','trunk','primary', 'secondary', 'tertiary', 'minor')
UNION ALL
SELECT way AS geom, class::text
FROM road_areas
);
CREATE OR REPLACE VIEW road_z13 AS (
SELECT way AS geom, class::text
FROM roads
WHERE class NOT IN ('path')
UNION ALL
SELECT way AS geom, class::text
FROM road_areas
);
CREATE OR REPLACE VIEW road_z14 AS (
SELECT way AS geom, class::text
FROM roads
UNION ALL
SELECT way AS geom, class::text
FROM road_areas
);
CREATE OR REPLACE FUNCTION layer_road(bbox geometry, zoom_level int)
RETURNS TABLE(geom geometry, class text) AS $$
SELECT geom, class::text FROM (
SELECT * FROM road_z4 WHERE zoom_level BETWEEN 4 AND 5
UNION ALL
SELECT * FROM road_z5 WHERE zoom_level = 5
UNION ALL
SELECT * FROM road_z6 WHERE zoom_level = 6
UNION ALL
SELECT * FROM road_z7 WHERE zoom_level = 7
UNION ALL
SELECT * FROM road_z8 WHERE zoom_level = 8
UNION ALL
SELECT geom, class FROM road_z9 WHERE zoom_level = 9
UNION ALL
SELECT geom, class FROM road_z10 WHERE zoom_level = 10
UNION ALL
SELECT geom, class FROM road_z11 WHERE zoom_level = 11
UNION ALL
SELECT geom, class FROM road_z12 WHERE zoom_level = 12
UNION ALL
SELECT * FROM road_z13 WHERE zoom_level = 13
UNION ALL
SELECT * FROM road_z14 WHERE zoom_level >= 14
) AS zoom_levels
WHERE geom && bbox;
$$ LANGUAGE SQL IMMUTABLE;

Wyświetl plik

@ -1,12 +0,0 @@
layer:
id: "road"
description: Roads
buffer_size: 4
srs: +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over
fields:
class: String
datasource:
srid: 900913
query: (SELECT * FROM layer_road(!bbox!, z(!scale_denominator!))) AS t
schema:
- ./road.sql