2017-07-09 07:05:55 +00:00
|
|
|
# Docker-OSM
|
2015-07-31 14:18:53 +00:00
|
|
|
|
2018-02-19 08:12:16 +00:00
|
|
|
A docker compose project to setup an OSM PostGIS database with automatic updates from OSM periodically.
|
|
|
|
The only file you need is a PBF file and run the docker compose project.
|
|
|
|
|
2018-04-04 09:24:53 +00:00
|
|
|
## Docker cloud
|
|
|
|
|
|
|
|
Dockerfiles are executed on https://cloud.docker.com
|
|
|
|
```bash
|
|
|
|
docker pull etrimaille/docker-osm:imposm-latest
|
|
|
|
docker pull etrimaille/docker-osm:osmupdate-latest
|
|
|
|
```
|
|
|
|
|
|
|
|
You need to copy/paste the docker-compose project and use the images hosted on the internet.
|
|
|
|
This is useful if you want to integrate Docker-OSM in your existing docker-compose project.
|
|
|
|
|
2015-07-30 13:45:34 +00:00
|
|
|
## Usage
|
2015-07-30 09:58:59 +00:00
|
|
|
|
2016-07-18 11:33:38 +00:00
|
|
|
### PBF File
|
2015-07-30 09:58:59 +00:00
|
|
|
In this example we will set up an OSM database for South Africa that
|
2015-07-31 09:18:06 +00:00
|
|
|
will pull for updates every 2 minutes.
|
2015-07-30 09:58:59 +00:00
|
|
|
|
2016-07-18 11:33:38 +00:00
|
|
|
First get a PBF file from your area and put this file in the 'settings' folder.
|
|
|
|
You can download some PBF files on these URLS for instance :
|
|
|
|
* http://download.geofabrik.de/
|
|
|
|
* http://download.openstreetmap.fr/extracts/
|
2015-07-31 20:18:17 +00:00
|
|
|
|
|
|
|
```
|
|
|
|
cd settings
|
|
|
|
wget -c -O country.pbf http://download.openstreetmap.fr/extracts/africa/south_africa.osm.pbf
|
|
|
|
```
|
|
|
|
|
2018-02-28 09:48:15 +00:00
|
|
|
You must put only one PBF file in the settings folder. Only the last one will be read.
|
|
|
|
|
2018-02-19 08:12:16 +00:00
|
|
|
### OSM Features
|
|
|
|
|
2018-02-28 09:48:15 +00:00
|
|
|
In `settings`, you can edit the `mapping.yml` to customize the PostGIS schema.
|
2018-02-19 08:12:16 +00:00
|
|
|
You can find the documentation about the mapping configuration on the imposm website: https://imposm.org/docs/imposm3/latest/mapping.html
|
2018-02-28 09:48:15 +00:00
|
|
|
The default file in Docker-OSM is coming from https://raw.githubusercontent.com/omniscale/imposm3/master/example-mapping.yml
|
2018-02-19 08:12:16 +00:00
|
|
|
|
2018-02-19 05:54:16 +00:00
|
|
|
### Updates
|
|
|
|
|
|
|
|
You can configure the time interval in the docker-compose file. By default, it's two minutes.
|
2018-02-28 09:48:15 +00:00
|
|
|
If you set the TIME variable to 0, no diff files will be imported.
|
|
|
|
|
|
|
|
The default update stream is worldwide.
|
|
|
|
So even if you imported a local PBF, if you don't set a clipping area, you will end with data from all over the world.
|
2018-02-19 05:54:16 +00:00
|
|
|
|
2016-07-18 11:33:38 +00:00
|
|
|
### Clipping
|
|
|
|
|
2016-07-20 02:21:46 +00:00
|
|
|
You can put a shapefile in the clip folder. This shapefile will be
|
|
|
|
used for clipping every features after the import.
|
|
|
|
This file has to be named 'clip.shp'. When the database container is
|
|
|
|
running, import the shapefile in the database using the command :
|
|
|
|
'make import_clip'.
|
|
|
|
|
2018-02-19 08:12:16 +00:00
|
|
|
You can remove the clip file : `make remove_clip`.
|
2016-07-18 11:33:38 +00:00
|
|
|
|
|
|
|
### QGIS Styles
|
|
|
|
|
2018-02-19 08:12:16 +00:00
|
|
|
The database is provided with some default styles. These styles will be loaded automatically when loaded in QGIS.
|
|
|
|
It's following the default OSM mapping from ImpOSM.
|
2016-07-20 02:21:46 +00:00
|
|
|
|
2018-02-19 08:12:16 +00:00
|
|
|
```
|
|
|
|
make import_styles
|
|
|
|
make remove_styles
|
|
|
|
make backup_styles
|
|
|
|
```
|
2016-07-20 02:21:46 +00:00
|
|
|
|
2016-07-18 11:33:38 +00:00
|
|
|
### SQL Trigger
|
2015-07-31 20:18:17 +00:00
|
|
|
|
2018-02-19 08:12:16 +00:00
|
|
|
You can add PostGIS functions, triggers, materialized views in the SQL file.
|
|
|
|
|
2016-07-18 11:33:38 +00:00
|
|
|
### Build and run
|
2015-07-31 20:18:17 +00:00
|
|
|
|
2015-07-31 14:18:53 +00:00
|
|
|
Now build the docker images needed to run the application:
|
|
|
|
|
2015-07-30 13:45:34 +00:00
|
|
|
```
|
|
|
|
docker-compose build
|
|
|
|
docker-compose up
|
|
|
|
```
|
|
|
|
|
2015-07-31 14:18:53 +00:00
|
|
|
In production you should daemonize the services when bringing them up:
|
|
|
|
|
|
|
|
```
|
|
|
|
docker-compose up -d
|
|
|
|
```
|
|
|
|
|
2016-07-20 02:21:46 +00:00
|
|
|
You can check the timestamp of your database by reading the file :
|
|
|
|
'settings/timestamp.txt'
|
|
|
|
or you can use :
|
|
|
|
'make timestamp'
|
|
|
|
|
2018-03-09 09:01:05 +00:00
|
|
|
### Display
|
|
|
|
|
|
|
|
In the makefile, you can switch to another docker compose project.
|
|
|
|
The other one includes QGIS Server. When it's running, you should be able to
|
|
|
|
open, on the host(not in docker), the `index.html` file and see OSM and QGIS
|
|
|
|
Server showing PostGIS tables. The webpage is using Leaflet.
|
|
|
|
|
|
|
|
If you want to tweak the QGIS Project, you need to add a host in your in `/etc/hosts`:
|
|
|
|
```
|
|
|
|
127.0.0.1 db
|
|
|
|
```
|
|
|
|
Because in the docker-compose file, the link is made with the PostGIS database using the alias `db`.
|
|
|
|
|
2018-02-19 08:12:16 +00:00
|
|
|
## In the background
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
### Docker OSM Update
|
2015-07-30 13:45:34 +00:00
|
|
|
|
|
|
|
This docker image when run will fetch on a regular interval any new diff file
|
|
|
|
for all the changes that have happened in the world over the update interval.
|
|
|
|
|
|
|
|
You can also specify a custom url for fetching the diff if you wish to retrieve
|
|
|
|
regional diffs rather than the global one.
|
|
|
|
|
|
|
|
You can specify a polygonal area for the diff so that it will only apply features
|
|
|
|
from the diff that fall within that area. For example providing a polygon of the
|
|
|
|
borders of Malawi will result in only Malawi features being extracted from the diff.
|
|
|
|
|
|
|
|
Note that the diff retrieved and options specified here are not related to the
|
|
|
|
initial base map used - so for example if your initial base map is for Malawi and
|
|
|
|
you specify a diff area in Botswana, updated features in Botswana will be applied
|
|
|
|
to your base map which only includes features from Malawi. For this reason, take
|
|
|
|
care to ensure that your diff area coincides with the region covered by your
|
|
|
|
original base map.
|
|
|
|
|
|
|
|
Once the diff has been downloaded, it is placed into /home/import_queue where
|
|
|
|
it will be picked up by the long running imposm3 container, which will apply
|
|
|
|
the diff to the database.
|
|
|
|
|
|
|
|
You should have 3 folders : osm_pbf, import_queue, import_done
|
|
|
|
|
|
|
|
Put a state file in base-pbf like this one :
|
|
|
|
http://download.openstreetmap.fr/extracts/africa/south_africa.state.txt
|
|
|
|
|
|
|
|
``docker build -t osmupdate .``
|
|
|
|
``docker run -v $('pwd')import-queue/:/home/import-queue -v $('pwd')base-pbf/:/home/base-pbf -v $('pwd')import-done/:/home/import-done -d osmupdate``
|
|
|
|
|
|
|
|
With -e, you can add some settings :
|
2017-07-09 07:05:55 +00:00
|
|
|
- MAX_DAYS = 100, the maximum time range to assemble a cumulated changefile.
|
2015-07-30 13:45:34 +00:00
|
|
|
- DIFF = sporadic, osmupdate uses a combination of minutely, hourly and daily changefiles. This value can be minute, hour, day or sporadic.
|
|
|
|
- MAX_MERGE = 7, argument to determine the maximum number of parallely processed changefiles.
|
|
|
|
- COMPRESSION_LEVEL = 1, define level for gzip compression. values between 1 (low compression but fast) and 9 (high compression but slow)
|
|
|
|
- BASE_URL = http://planet.openstreetmap.org/replication/, change the URL to use a custom URL to fetch regional file updates.
|
|
|
|
- IMPORT_QUEUE = import_queue
|
|
|
|
- IMPORT_DONE = import_done
|
|
|
|
- OSM_PBF = osm_pbf
|
2015-07-31 14:18:53 +00:00
|
|
|
- TIME = 120, seconds between two executions of the script
|
|
|
|
|
|
|
|
If you are using docker-compose, you can use these settings within the
|
|
|
|
```docker-compose.yml``` file.
|
2015-07-30 13:45:34 +00:00
|
|
|
|
2018-02-19 08:12:16 +00:00
|
|
|
### Docker ImpOSM3
|
2015-07-30 13:45:34 +00:00
|
|
|
|
|
|
|
This image will take care of doing the initial load for the selected region
|
|
|
|
(e.g. planet, or a country such as Malawi) into your database. It will then
|
2015-07-31 14:18:53 +00:00
|
|
|
apply, at a regular interval (default is 2 minutes), any diff that arrives
|
2015-07-30 13:45:34 +00:00
|
|
|
in the /home/import_queue folder to the postgis OSM database. The diffs
|
|
|
|
are fetched by a separate container (see osm_update container).
|
|
|
|
|
|
|
|
The container will look for an OSM file (*.pbf) and its state file
|
|
|
|
(*.state.txt) in BASE_PBF.
|
2015-07-30 09:58:59 +00:00
|
|
|
|
2015-07-30 13:45:34 +00:00
|
|
|
With -e, you can add some settings :
|
|
|
|
- TIME = 120, seconds between 2 executions of the script
|
2018-03-19 11:04:37 +00:00
|
|
|
- POSTGRES_USER = docker, default user
|
|
|
|
- POSTGRES_PASS = docker, default password
|
|
|
|
- POSTGRES_HOST = db
|
|
|
|
- POSTGRES_PORT = 5432
|
2015-07-30 13:45:34 +00:00
|
|
|
- SETTINGS = settings, folder for settings (with *.json and *.sql)
|
|
|
|
- CACHE = cache, folder for caching
|
|
|
|
- BASE_PBF = base_pbf, folder the OSM file
|
|
|
|
- IMPORT_DONE = import_done, folder for diff which has been imported
|
|
|
|
- IMPORT_QUEUE = import_queue, folder for diff which hasn't been imported yet
|
|
|
|
- SRID = 4326, it can be 3857
|
|
|
|
- OPTIMIZE = false, check (Imposm)[http://imposm.org/docs/imposm3/latest/tutorial.html#optimize]
|
|
|
|
- DBSCHEMA_PRODUCTION = public, check (Imposm)[http://imposm.org/docs/imposm3/latest/tutorial.html#deploy-production-tables]
|
|
|
|
- DBSCHEMA_IMPORT = import, check (Imposm)[http://imposm.org/docs/imposm3/latest/tutorial.html#deploy-production-tables]
|
|
|
|
- DBSCHEMA_BACKUP = backup, check (Imposm)[http://imposm.org/docs/imposm3/latest/tutorial.html#deploy-production-tables]
|
2015-07-31 14:18:53 +00:00
|
|
|
|
|
|
|
You can adjust these preferences in the ```docker-compose.yml``` file provided
|
|
|
|
in this repository.
|
|
|
|
|
2015-08-01 11:07:24 +00:00
|
|
|
|
2015-07-31 14:18:53 +00:00
|
|
|
# Credits
|
|
|
|
|
|
|
|
This application was designed and implemented by:
|
|
|
|
|
|
|
|
* Etienne Trimaille (etienne@kartoza.com)
|
|
|
|
* Tim Sutton (tim@kartoza.com)
|
|
|
|
|
2015-07-31 20:22:03 +00:00
|
|
|
With some important design ideas provided by Ariel Nunez (ingenieroariel@gmail.com).
|
2015-07-31 14:18:53 +00:00
|
|
|
|
|
|
|
Parts of this project are built on the existing work of others.
|
|
|
|
|
2015-07-31 20:22:03 +00:00
|
|
|
July 2015
|