Merge branch 'master' into feature/cluster-road

pull/297/head
Manuel Roth 2016-04-27 12:20:08 +02:00
commit 994662efaa
11 zmienionych plików z 915 dodań i 2048 usunięć

Wyświetl plik

@ -121,6 +121,8 @@ import-sql:
image: "osm2vectortiles/import-sql"
links:
- postgis:db
environment:
SQL_CREATE_INDIZES: 'false'
mapbox-studio:
image: "osm2vectortiles/mapbox-studio"
volumes:

Wyświetl plik

@ -11,21 +11,6 @@ center:
- 12
description: |-
Free global vector tiles from OpenStreetMap compatible with Mapbox Streets v7.
http://osm2vectortiles.org
Layer:
- id: landuse
@ -43,13 +28,13 @@ Layer:
srid: ''
table: |-
(
SELECT osm_id_polygon(MAX(osm_id)) AS osm_id, ST_CollectionExtract(ST_Collect(geometry), 3) AS geometry, landuse_class(type) AS class, type
SELECT osm_ids2mbid(MAX(osm_id), true) AS osm_id, ST_CollectionExtract(ST_Collect(geometry), 3) AS geometry, landuse_class(type) AS class, type
FROM landuse_z5toz8
WHERE z(!scale_denominator!) BETWEEN 5 AND 8
AND geometry && !bbox!
GROUP BY type
UNION ALL
SELECT osm_id_polygon(osm_id) as osm_id, geometry, landuse_class(type) as class, type
SELECT osm_ids2mbid(osm_id, true) as osm_id, geometry, landuse_class(type) as class, type
FROM (
SELECT osm_id, geometry, type
FROM landuse_z9
@ -97,7 +82,7 @@ Layer:
srid: ''
table: |-
(
SELECT osm_id_linestring(osm_id) as osm_id, geometry, type, type as class
SELECT osm_ids2mbid(osm_id, false) as osm_id, geometry, type, type as class
FROM (
SELECT *
FROM waterway_z8toz12
@ -137,7 +122,7 @@ Layer:
srid: ''
table: |-
(
SELECT osm_id, geometry
SELECT osm_ids2mbid(osm_id, true) AS osm_id, geometry
FROM (
SELECT osm_id, geometry
FROM water_z0
@ -191,7 +176,7 @@ Layer:
srid: ''
table: |-
(
SELECT osm_id_geometry(osm_id, geometry) as osm_id, geometry, type
SELECT osm_ids2mbid(osm_id, is_polygon(geometry)) as osm_id, geometry, type
FROM (
SELECT *
FROM aeroway_z9
@ -226,7 +211,7 @@ Layer:
srid: ''
table: |-
(
SELECT osm_id_geometry(osm_id, geometry) as osm_id, geometry, barrier_line_class(type) AS class
SELECT osm_ids2mbid(osm_id, is_polygon(geometry)) as osm_id, geometry, barrier_line_class(type) AS class
FROM barrier_line_z14
WHERE geometry && !bbox!
AND z(!scale_denominator!) = 14
@ -254,7 +239,7 @@ Layer:
srid: ''
table: |-
(
SELECT osm_id_polygon(osm_id) AS osm_id, geometry, building_is_underground(underground) AS underground
SELECT osm_ids2mbid(osm_id, true) AS osm_id, geometry, building_is_underground(underground) AS underground
FROM (
SELECT osm_id, geometry, underground
FROM building_z13
@ -290,7 +275,7 @@ Layer:
srid: ''
table: |-
(
SELECT osm_id_polygon(osm_id) AS osm_id, geometry, landuse_overlay_class(type) AS class, type
SELECT osm_ids2mbid(osm_id, true) AS osm_id, geometry, landuse_overlay_class(type) AS class, type
FROM (
SELECT osm_id, geometry, type FROM landuse_overlay_z5
WHERE z(!scale_denominator!) = 5
@ -343,7 +328,7 @@ Layer:
table: |-
(
SELECT osm_id, geometry, type, class, oneway, structure FROM (
SELECT osm_id_polygon(MAX(osm_id)) as osm_id, ST_CollectionExtract(ST_Collect(geometry), 2) AS geometry,
SELECT osm_ids2mbid(MAX(osm_id), is_polygon(geometry)) AS osm_id, ST_CollectionExtract(ST_Collect(geometry), 2) AS geometry,
road_type(road_class(type, NULL, NULL), type, NULL, NULL, NULL) AS type,
road_class(type, NULL, NULL) AS class, road_oneway(0) AS oneway, 'none' AS structure, NULL AS z_order
FROM (
@ -362,7 +347,7 @@ Layer:
WHERE geometry && !bbox!
GROUP BY type
UNION ALL
SELECT osm_id_geometry(osm_id, geometry) as osm_id, geometry,
SELECT osm_ids2mbid(osm_id, is_polygon(geometry)) AS osm_id, geometry,
road_type(road_class(type, service, access), type, construction, tracktype, service) AS type,
road_class(type, service, access) AS class, road_oneway(oneway) AS oneway, structure, z_order
FROM (
@ -408,7 +393,7 @@ Layer:
srid: ''
table: |-
(
SELECT osm_id, geometry, admin_level, disputed, maritime
SELECT osm_ids2mbid(osm_id, false) AS osm_id, geometry, admin_level, disputed, maritime
FROM (
SELECT osm_id, geometry, admin_level, disputed, maritime
FROM admin_z0
@ -465,7 +450,7 @@ Layer:
srid: ''
table: |-
(
SELECT osm_id_point(osm_id) AS osm_id, wkb_geometry,
SELECT osm_ids2mbid(osm_id, true) AS osm_id, wkb_geometry,
iso3166_1_alpha_2 as code,
name,
coalesce(NULLIF(name_en, ''), name) AS name_en,
@ -539,7 +524,7 @@ Layer:
srid: ''
table: |-
(
SELECT osm_id_point(osm_id) as osm_id, wkb_geometry,
SELECT osm_ids2mbid(osm_id, true) as osm_id, wkb_geometry,
name,
coalesce(NULLIF(name_en, ''), name) AS name_en,
coalesce(NULLIF(name_es, ''), name) AS name_es,
@ -603,7 +588,7 @@ Layer:
srid: ''
table: |-
(
SELECT osm_id_point(osm_id) as osm_id, wkb_geometry, abbr,
SELECT osm_ids2mbid(osm_id, true) as osm_id, wkb_geometry, abbr,
area_sqkm as area,
name,
coalesce(NULLIF(name_en, ''), name) AS name_en,
@ -653,7 +638,7 @@ Layer:
srid: ''
table: |-
(
SELECT osm_id_geometry(osm_id, geometry) as osm_id, topoint(geometry) AS geometry,
SELECT osm_ids2mbid(osm_id, true) as osm_id, topoint(geometry) AS geometry,
name,
coalesce(NULLIF(name_en, ''), name) AS name_en,
coalesce(NULLIF(name_es, ''), name) AS name_es,
@ -737,7 +722,7 @@ Layer:
srid: ''
table: |-
(
SELECT osm_id_polygon(osm_id) AS osm_id, geometry AS geometry,
SELECT osm_ids2mbid(osm_id, true) AS osm_id, geometry AS geometry,
name,
area,
coalesce(NULLIF(name_en, ''), name) AS name_en,
@ -794,7 +779,7 @@ Layer:
srid: ''
table: |-
(
SELECT osm_id_geometry(osm_id, geometry) AS osm_id, topoint(geometry) AS geometry, ref, name,
SELECT osm_ids2mbid(osm_id, true) AS osm_id, topoint(geometry) AS geometry, ref, name,
coalesce(NULLIF(name_en, ''), name) AS name_en,
coalesce(NULLIF(name_es, ''), name) AS name_es,
coalesce(NULLIF(name_fr, ''), name) AS name_fr,
@ -846,7 +831,7 @@ Layer:
(
SELECT * FROM
(
SELECT osm_id_linestring(osm_id) AS osm_id,
SELECT osm_ids2mbid(osm_id, false) AS osm_id,
CASE WHEN z(!scale_denominator!) < 11
THEN st_startpoint(geometry)
ELSE geometry
@ -925,7 +910,7 @@ Layer:
srid: ''
table: |-
(
SELECT osm_id_linestring(osm_id) AS osm_id, geometry, name,
SELECT osm_ids2mbid(osm_id, false) AS osm_id, geometry, name,
coalesce(NULLIF(name_en, ''), name) AS name_en,
coalesce(NULLIF(name_es, ''), name) AS name_es,
coalesce(NULLIF(name_fr, ''), name) AS name_fr,
@ -977,7 +962,7 @@ Layer:
srid: ''
table: |-
(
SELECT topoint(geometry) AS geometry, osm_id_geometry(osm_id, geometry) as osm_id,
SELECT topoint(geometry) AS geometry, osm_ids2mbid(osm_id, true) as osm_id,
name,
coalesce(NULLIF(name_en, ''), name) AS name_en,
coalesce(NULLIF(name_es, ''), name) AS name_es,
@ -1024,7 +1009,7 @@ Layer:
srid: ''
table: |-
(
SELECT geometry, osm_id_point(osm_id) as osm_id,
SELECT geometry, osm_ids2mbid(osm_id, true) as osm_id,
name,
coalesce(NULLIF(name_en, ''), name) AS name_en,
coalesce(NULLIF(name_es, ''), name) AS name_es,
@ -1074,7 +1059,7 @@ Layer:
srid: ''
table: |-
(
SELECT osm_id_point(osm_id) as osm_id, geometry,
SELECT osm_ids2mbid(osm_id, true) as osm_id, geometry,
meter_to_feet(elevation_m) AS elevation_ft,
elevation_m,
mountain_peak_type(type) AS maki,
@ -1121,7 +1106,7 @@ Layer:
srid: ''
table: |-
(
SELECT osm_id_geometry(osm_id, geometry) AS osm_id, topoint(geometry) AS geometry, house_num
SELECT osm_ids2mbid(osm_id, true) AS osm_id, topoint(geometry) AS geometry, house_num
FROM housenum_label_z14
WHERE geometry && !bbox!
AND z(!scale_denominator!) = 14

Wyświetl plik

@ -23,6 +23,7 @@ import json
import humanize
from boto.s3.connection import S3Connection, OrdinaryCallingFormat
from mbtoolbox.optimize import remove_subpyramids
import pika
from docopt import docopt
@ -95,6 +96,10 @@ def render_pyramid_command(source, sink, bounds, min_zoom, max_zoom):
]
def optimize_mbtiles(mbtiles_file, mask_level=8):
remove_subpyramids(mbtiles_file, mask_level, 'tms')
def export_remote(tm2source, rabbitmq_url, queue_name, result_queue_name,
render_scheme, bucket_name):
host = os.getenv('AWS_S3_HOST', 'mock-s3')
@ -145,6 +150,8 @@ def export_remote(tm2source, rabbitmq_url, queue_name, result_queue_name,
print('Rendering time: {}'.format(humanize.naturaltime(end - start)))
print('Optimize MBTiles file size')
optimize_mbtiles(mbtiles_file)
upload_mbtiles(bucket, mbtiles_file)
os.remove(mbtiles_file)

Wyświetl plik

@ -1,5 +1,6 @@
docopt==0.6.2
boto==2.38.0
watchtower==0.1.3
pika==0.10.0
humanize==0.5.1
-e git+https://github.com/lukasmartinelli/mbtoolbox.git@#egg=mbtoolbox
-e git+https://github.com/mapbox/mbutil.git@#egg=mbutil-0.2.0beta

Wyświetl plik

@ -1,3 +1,4 @@
use_single_id_space: true
generalized_tables:
landuse_polygon_gen0:
source: landuse_polygon_gen1

Wyświetl plik

@ -12,6 +12,7 @@ ENV SQL_FUNCTIONS_FILE=/usr/src/app/functions.sql \
SQL_GENERATED_FILE=/usr/src/app/gen.sql \
SQL_TRIGGERS_FILE=/usr/src/app/triggers.sql \
SQL_XYZ_EXTENT_FILE=/usr/src/app/xyz_extent.sql \
SQL_INDIZES_FILE=/usr/src/app/indizes.sql \
SQL_LAYERS_DIR=/usr/src/app/layers/
COPY . /usr/src/app

Wyświetl plik

@ -52,36 +52,34 @@ $$ LANGUAGE plpgsql;
-- OSM ID transformations
CREATE OR REPLACE FUNCTION osm_id_point(osm_id BIGINT) RETURNS BIGINT AS $$
-- specification : https://www.mapbox.com/vector-tiles/mapbox-streets-v7/
-- osm_ids : imposm3 with use_single_id_space:true
CREATE OR REPLACE FUNCTION osm_ids2mbid (osm_ids BIGINT, is_polygon bool ) RETURNS BIGINT AS $$
BEGIN
RETURN (osm_id * 10);
RETURN CASE
WHEN (osm_ids >= 0 ) THEN ( osm_ids * 10) -- +0 point
WHEN (NOT is_polygon) AND (osm_ids >= -1e17 ) AND (osm_ids < 0 ) THEN ( (abs(osm_ids) ) * 10) + 1 -- +1 way linestring
WHEN ( is_polygon) AND (osm_ids >= -1e17 ) AND (osm_ids < 0 ) THEN ( (abs(osm_ids) ) * 10) + 2 -- +2 way poly
WHEN (NOT is_polygon) AND (osm_ids < -1e17 ) THEN ( (abs(osm_ids) -1e17) * 10) + 3 -- +3 relations linestring
WHEN ( is_polygon) AND (osm_ids < -1e17 ) THEN ( (abs(osm_ids) -1e17) * 10) + 4 -- +4 relations poly
ELSE 0
END;
END;
$$ LANGUAGE plpgsql IMMUTABLE;
CREATE OR REPLACE FUNCTION osm_id_linestring(osm_id BIGINT) RETURNS BIGINT AS $$
CREATE OR REPLACE FUNCTION is_polygon( geom geometry) RETURNS bool AS $$
BEGIN
RETURN CASE
WHEN osm_id >= 0 THEN (osm_id * 10) + 1
ELSE (osm_id * 10) + 3
END;
RETURN ST_GeometryType(geom) IN ('ST_Polygon', 'ST_MultiPolygon');
END;
$$ LANGUAGE plpgsql IMMUTABLE;
CREATE OR REPLACE FUNCTION osm_id_polygon(osm_id BIGINT) RETURNS BIGINT AS $$
BEGIN
RETURN CASE
WHEN osm_id >= 0 THEN (osm_id * 10) + 2
ELSE (osm_id * 10) + 4
END;
END;
$$ LANGUAGE plpgsql IMMUTABLE;
CREATE OR REPLACE FUNCTION osm_id_geometry(osm_id BIGINT, geom geometry) RETURNS BIGINT AS $$
BEGIN RETURN CASE
WHEN ST_GeometryType(geom) IN ('ST_LineString', 'ST_MultiLineString') THEN osm_id_linestring(osm_id)
WHEN ST_GeometryType(geom) IN ('ST_Point', 'ST_MultiPoint') THEN osm_id_point(osm_id)
WHEN ST_GeometryType(geom) IN ('ST_Polygon', 'ST_MultiPolygon') THEN osm_id_polygon(osm_id)
ELSE osm_id_point(osm_id)
END;
END;
$$ LANGUAGE plpgsql IMMUTABLE;
/*
-- example call for osm_ids2mbid
select osm_id
,osm_ids2mbid ( osm_id, is_polygon( geometry ) ) as from_real_geom
,osm_ids2mbid ( osm_id, false ) as from_fake_geom_false
,osm_ids2mbid ( osm_id, true ) as from_fake_geom_true
from osm_place_geometry ;
*/

Wyświetl plik

@ -0,0 +1,2 @@
DROP INDEX IF EXISTS osm_road_geometry_class;
CREATE INDEX osm_road_geometry_class ON osm_road_geometry(road_class(type, service, access));

Wyświetl plik

@ -5,6 +5,7 @@ set -o nounset
readonly SQL_FUNCTIONS_FILE=${IMPORT_DATA_DIR:-/usr/src/app/functions.sql}
readonly SQL_LAYERS_DIR=${IMPORT_DATA_DIR:-/usr/src/app/layers/}
readonly SQL_CREATE_INDIZES=${SQL_CREATE_INDIZES:-false}
readonly DB_HOST=$DB_PORT_5432_TCP_ADDR
readonly OSM_DB=${OSM_DB:-osm}
@ -49,6 +50,13 @@ function main() {
exec_sql_file "${SQL_LAYERS_DIR}mountain_peak_label.sql"
exec_sql_file "${SQL_LAYERS_DIR}airport_label.sql"
exec_sql_file "${SQL_LAYERS_DIR}rail_station_label.sql"
if [ "$SQL_CREATE_INDIZES" = true ] ; then
echo "Create index in $OSM_DB"
exec_sql_file "${SQL_INDIZES_FILE}"
else
echo "Omitting index creation in $OSM_DB"
fi
}
main

Plik diff jest za duży Load Diff

Wyświetl plik

@ -18,18 +18,19 @@ import json
Table = namedtuple('Table', ['name', 'fields', 'mapping', 'type'])
def merge_grouped_mappings(mappings):
"""Merge multiple mappings into a single mapping for drawing"""
for mapping_group, mapping_value in mappings.items():
yield mapping_group, mapping_value['mapping']
def merge_type_mappings(mappings):
"""Extract all mappings from the different geometry types"""
for geometry_type, mapping in mappings.items():
for osm_key, osm_values in mapping.items():
yield osm_key, osm_values
def find_tables(config):
for table_name, table_value in config['tables'].items():
fields = table_value.get('fields')
if table_value.get('mappings'):
mapping = list(merge_grouped_mappings(table_value['mappings']))
if table_value.get('type_mappings'):
mapping = list(merge_type_mappings(table_value['type_mappings']))
else:
mapping = table_value.get('mapping').items()
@ -38,10 +39,11 @@ def find_tables(config):
def find_tags(mapping_config):
tags = defaultdict(list)
tags = defaultdict(set)
for table in find_tables(mapping_config):
for osm_key, osm_values in table.mapping:
tags[osm_key] += osm_values
for osm_value in osm_values:
tags[osm_key].add(osm_value)
return tags
@ -66,7 +68,7 @@ def generate_taginfo(mapping_config):
"contact_email": "me@lukasmartinelli.ch"
},
"tags": list(generate_tags_json(mapping_config))
}, indent=4, sort_keys=True)
}, indent=4, sort_keys=True, separators=(',', ':'))