Skip to content
Convert admin relations to render borders
Branch: master
Clone or download
pnorman Merge pull request #11 from stadiamaps/master
Properly handle invalid geometries.
Latest commit 67834d6 May 3, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
cmake Add basic cmake from osmcoastline Nov 8, 2016
src Fix indentation and add comment. May 3, 2019
.clang-format Add clang-format from osm2pgsql Jan 31, 2017
.gitignore Ignore build dir May 4, 2018
CMakeLists.txt Increase required osmium version to 2.7.0 Mar 23, 2017 Increase required osmium version to 2.7.0 Mar 23, 2017


OSMBorder extracts the admin boundary data from an OSM planet file and assembles all the pieces into linestrings for use in map renderers etc.


At least version 2.7.0 is needed.

zlib (for PBF support)
Debian/Ubuntu: zlib1g-dev

Pandoc (optional, to build documentation)
Debian/Ubuntu: pandoc
(If pandoc is found by CMake, the manpages will automatically be built.)


You'll need the prerequisites including libosmium installed.

OSMBorder uses CMake for building:

mkdir build
cd build
cmake ..

Call make doc to build the Doxygen API documentation which will be available in the doc/html directory.



  1. Filter the planet with osmborder_filter
osmborder_filter -o filtered.osm.pbf planet-latest.osm.pbf
  1. Create linestrings with osmborder
osmborder -o osmborder_lines.csv filtered.osm.pbf


OSMBorder outputs a tab-delimited file that can be loaded directly into PostgreSQL. This requires a suitable table, which can be created, loaded, optimized, and indexed with

CREATE TABLE osmborder_lines (
  osm_id bigint,
  admin_level int,
  dividing_line bool,
  disputed bool,
  maritime bool,
  way Geometry(LineString, 3857));
\copy osmborder_lines FROM osmborder_lines.csv

CREATE INDEX osmborder_lines_way_idx ON osmborder_lines USING gist (way) WITH (fillfactor=100);
CLUSTER osmborder_lines USING osmborder_lines_way_idx;
CREATE INDEX osmborder_lines_way_low_idx ON osmborder_lines USING gist (way) WITH (fillfactor=100) WHERE admin_level <= 4;

The indexes are optional, but useful if rendering maps.

Tags used

OSMBorder uses tags on the way and its parent relations. It does not consider geometry, relation roles, or non-way relation members.


The admin_level is the lowest admin_level value of the parent relations. The way tags are not considered.


The presence of disputed=yes, dispute=yes, or border_status=dispute on the ways is used to indicate part of a border is disputed. All the tags function the same, but disputed=yes is my preference. Relation tags are not considered.


maritime=yes or natural=coastline indicates a maritime border for the purposes of rendering. Relations are not considered, nor intersection with water areas.


-v, --verbose

Gives you detailed information on what osmborder is doing, including timing.

Run osmborder --help to see all options.


OSMBorder is available under the GNU GPL version 3 or later.


Paul Norman (
Based on OSMCoastline by Jochen Topf (

You can’t perform that action at this time.