You are browsing a read-only backup copy of Wikitech. The primary site can be found at wikitech.wikimedia.org

Maps/OSM

From Wikitech-static
< Maps
Revision as of 16:29, 16 September 2021 by imported>MSantos
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

OpenStreetMaps Extract Transform Load (ETL) procedure

The WMF maps stack use OSM to render static and dynamic maps. Imposm3 is the tool behind the ETL procedure that loads data into a PostgreSQL DB schema that conforms with the maps applications' needs.

Database requirements

  • Postgres 11
  • PostGIS 3.1+ (this version allows the use of the function ST_GeomAsMVT to generate vector tiles with Tegola)

Imposm3 mapping and DB schema

The database schema is defined in a configuration file that is available in the operations/puppet repository and can be accessed in its latest version here.

Import OSM data

In order to import OSM data, we have a production-ready script that needs to be executed with root access and the latest planet dump from OSM, with a caveat, always choose a specific revision to execute the script instead of the one tagged with latest, here is an example of the command to be executed:

 sudo -s
 screen -DR # always execute with screen because the script takes several hours to finish
 imposm-initial-import \
   -d 210906 \
   -x webproxy.eqiad.wmnet:8080


The script will take care of the whole procedure, but if you want to know how the process works and execute it locally, please refer to the guide present in maps-config

Rendering Maps

Layers Functions

As part of the Maps 2.0 work, it was introduced the concept of SQL functions to query the layers of the map. These SQL functions can be accessed here.

Updating Layers Functions

When changing a SQL function behavior that introduces significant changes or needs to be easily rolled-back, we decided to add version suffix in the function name and updating the applications usage of the functions accordingly. This means that, the next changes in public.layer_admin will be applied in public.layer_admin_v2.