kopia lustrzana https://github.com/osm2vectortiles/osm2vectortiles
Merge branch 'master' into feature/cluster-road
commit
994662efaa
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
use_single_id_space: true
|
||||
generalized_tables:
|
||||
landuse_polygon_gen0:
|
||||
source: landuse_polygon_gen1
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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 ;
|
||||
*/
|
||||
|
|
|
@ -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));
|
|
@ -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
|
||||
|
|
2812
taginfo.json
2812
taginfo.json
Plik diff jest za duży
Load Diff
|
@ -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=(',', ':'))
|
||||
|
||||
|
||||
|
||||
|
|
Ładowanie…
Reference in New Issue