diff --git a/src/import-external/Dockerfile b/src/import-external/Dockerfile index ff50a25..733b2c0 100644 --- a/src/import-external/Dockerfile +++ b/src/import-external/Dockerfile @@ -1,12 +1,15 @@ -FROM mdillon/postgis:9.4 +FROM osm2vectortiles/postgis + ENV IMPORT_DATA_DIR=/data/import \ - NATURAL_EARTH_DB=/data/import/natural_earth_vector.sqlite + NATURAL_EARTH_DB=/data/import/natural_earth_vector.sqlite \ + LAKELINES_GEOJSON=/data/import/lake_centerline.geojson RUN apt-get update && apt-get install -y --no-install-recommends \ wget \ unzip \ gdal-bin \ sqlite3 \ + ca-certificates \ && rm -rf /var/lib/apt/lists/* RUN mkdir -p $IMPORT_DATA_DIR \ @@ -24,6 +27,8 @@ RUN wget --quiet http://naciscdn.org/naturalearth/packages/natural_earth_vector. && rm natural_earth_vector.sqlite.zip \ && ./usr/src/app/clean-natural-earth.sh +RUN wget --quiet -L -P "$IMPORT_DATA_DIR" https://github.com/lukasmartinelli/osm-lakelines/releases/download/v0.9/lake_centerline.geojson + COPY . /usr/src/app WORKDIR /usr/src/app diff --git a/src/import-external/import-labels.sh b/src/import-external/import-labels.sh index ebe75ea..d61db1c 100755 --- a/src/import-external/import-labels.sh +++ b/src/import-external/import-labels.sh @@ -33,4 +33,9 @@ function import_labels() { import_geojson "$COUNTRIES_GEOJSON" "custom_countries" } +function import_lakelines() { + import_geojson "$LAKELINES_GEOJSON" "custom_lakeline" +} + import_labels +import_lakelines diff --git a/src/import-osm/water_point_table.sql b/src/import-osm/water_point_table.sql index 339c651..e91f46e 100644 --- a/src/import-osm/water_point_table.sql +++ b/src/import-osm/water_point_table.sql @@ -1,12 +1,26 @@ +CREATE OR REPLACE FUNCTION imposm_id_to_osm_id (imposm_id BIGINT, is_polygon BOOLEAN) RETURNS BIGINT AS $$ +BEGIN + RETURN CASE + WHEN (imposm_id >= 0 ) THEN imposm_id + WHEN (NOT is_polygon) AND (imposm_id >= -1e17 ) AND (imposm_id < 0 ) THEN abs(imposm_id) + WHEN ( is_polygon) AND (imposm_id >= -1e17 ) AND (imposm_id < 0 ) THEN abs(imposm_id) + WHEN (NOT is_polygon) AND (imposm_id < -1e17 ) THEN imposm_id +1e17 + WHEN ( is_polygon) AND (imposm_id < -1e17 ) THEN imposm_id +1e17 + ELSE 0 + END; +END; +$$ LANGUAGE plpgsql IMMUTABLE; + DROP TABLE IF EXISTS osm_water_point CASCADE; CREATE TABLE osm_water_point AS SELECT id, - topoint(geometry) AS geometry, + COALESCE(ll.wkb_geometry, topoint(wp.geometry)) AS geometry, timestamp, name, name_fr, name_en, name_de, name_es, name_ru, name_zh, area -FROM osm_water_polygon; +FROM osm_water_polygon AS wp +LEFT JOIN custom_lakeline ll ON imposm_id_to_osm_id(wp.id, true) = ll.osm_id; CREATE INDEX ON osm_water_point USING gist (geometry); CREATE INDEX ON osm_water_point