osmborder
osmborder copied to clipboard
Convert admin relations to render borders
OSMBorder
OSMBorder extracts the admin boundary data from an OSM planet file and assembles all the pieces into linestrings for use in map renderers etc.
Prerequisites
Libosmium
https://github.com/osmcode/libosmium
http://osmcode.org/libosmium
At least version 2.7.0 is needed.
zlib (for PBF support)
http://www.zlib.net/
Debian/Ubuntu: zlib1g-dev
Pandoc (optional, to build documentation)
http://johnmacfarlane.net/pandoc/
Debian/Ubuntu: pandoc
(If pandoc is found by CMake, the manpages will automatically be built.)
Building
You'll need the prerequisites including libosmium
installed.
OSMBorder uses CMake for building:
mkdir build
cd build
cmake ..
make
Call make doc
to build the Doxygen API documentation which will be available
in the doc/html
directory.
Testing
Running
- Filter the planet with osmborder_filter
osmborder_filter -o filtered.osm.pbf planet-latest.osm.pbf
- Create linestrings with osmborder
osmborder -o osmborder_lines.csv filtered.osm.pbf
Output
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.
admin_level
The admin_level is the lowest admin_level
value of the parent relations. The way tags are not considered.
disputed
The presence of disputed=yes
, dispute=yes
, border_status=dispute
or disputed_by=*
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
maritime=yes
, natural=coastline
or boundary_type=maritime
indicates a maritime border for the purposes of rendering. Relations are not considered, nor intersection with water areas.
Options
-v, --verbose
Gives you detailed information on what osmborder is doing, including timing.
Run osmborder --help
to see all options.
License
OSMBorder is available under the GNU GPL version 3 or later.
Authors
Paul Norman ([email protected])
Based on OSMCoastline by Jochen Topf ([email protected])