GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GitHub - ClearTables/ClearTables: An osm2pgsql style to simplify OSM data use

This repository was archived by the owner on Feb 26, 2020. It is now read-only.
BranchesTags
Open more actions menu

Latest commit

 

History

241 Commits
241 Commits

Folders and files

NameName
Last commit message
Last commit date
scripts
scripts
 
 
sql
sql
 
 
.gitignore
.gitignore
 
 
.travis.yml
.travis.yml
 
 
LICENSE
LICENSE
 
 
Makefile
Makefile
 
 
README
README
 
 
README.md
README.md
 
 
address.lua
address.lua
 
 
admin.lua
admin.lua
 
 
aero.lua
aero.lua
 
 
barrier.lua
barrier.lua
 
 
building.lua
building.lua
 
 
cleartables.yaml
cleartables.yaml
 
 
common.lua
common.lua
 
 
createcomments.py
createcomments.py
 
 
education.lua
education.lua
 
 
generic.lua
generic.lua
 
 
healthcare.lua
healthcare.lua
 
 
landform.lua
landform.lua
 
 
landuse.lua
landuse.lua
 
 
pier.lua
pier.lua
 
 
place.lua
place.lua
 
 
protected.lua
protected.lua
 
 
recreation.lua
recreation.lua
 
 
test-address.lua
test-address.lua
 
 
test-admin.lua
test-admin.lua
 
 
test-aero.lua
test-aero.lua
 
 
test-barrier.lua
test-barrier.lua
 
 
test-building.lua
test-building.lua
 
 
test-common.lua
test-common.lua
 
 
test-education.lua
test-education.lua
 
 
test-generic.lua
test-generic.lua
 
 
test-healthcare.lua
test-healthcare.lua
 
 
test-landform.lua
test-landform.lua
 
 
test-landuse.lua
test-landuse.lua
 
 
test-pier.lua
test-pier.lua
 
 
test-place.lua
test-place.lua
 
 
test-protected.lua
test-protected.lua
 
 
test-recreation.lua
test-recreation.lua
 
 
test-transit.lua
test-transit.lua
 
 
test-transportation.lua
test-transportation.lua
 
 
test-util.lua
test-util.lua
 
 
test-water.lua
test-water.lua
 
 
test-wetland.lua
test-wetland.lua
 
 
test-wood.lua
test-wood.lua
 
 
transit.lua
transit.lua
 
 
transportation.lua
transportation.lua
 
 
util.lua
util.lua
 
 
water.lua
water.lua
 
 
wetland.lua
wetland.lua
 
 
wood.lua
wood.lua
 
 
yaml2json.py
yaml2json.py
 
 

Repository files navigation

ClearTables

An osm2pgsql multi-backend style designed to simplify consumption of OSM data for rendering, export, or analysis.

ClearTables is currently under rapid development, and schema changes will frequently require database reloads.

Requirements

  • osm2pgsql 0.90.1 or later. Early versions after 0.86.0 may still work with bugs.
  • Lua, required for both osm2pgsql and testing the transforms
  • PostgreSQL 9.1 or later
  • PostGIS 2.0 or later
  • Python with PyYAML
  • Make. Any version of Make should work, or the commands are simple enough to run by hand.

Usage

make
createdb ct
psql -d ct -c 'CREATE EXTENSION postgis; CREATE EXTENSION hstore;'
cat sql/types/*.sql | psql -1Xq -d ct
# Add other osm2pgsql flags for large imports, updates, etc
osm2pgsql -d ct --number-processes 2 --output multi --style cleartables.json extract.osm.pbf
cat sql/post/*.sql | psql -1Xq -d ct

Replace ct with the name of your database if naming it differently.

osm2pgsql will connect to PostgreSQL once per process for each table, for a total of processes * tables connections. If PostgreSQL max_connections is increased from the default, --number-processes can be increased. If --number-processes is omitted, osm2pgsql will attempt to use as many processes as hardware threads.

Principles

These are still a bit vague, and might be split into principles and practices

  • Simplify data for the consumer

  • Use PostgreSQL types other than text if appropriate

  • Use boolean for yes/no values

  • Use enum types where there's a limited list of possibilities independent of data to be included, or a well defined ordering

FAQ

Why no addresses in the building table?

Addresses and buildings have a many-to-many relationship. Multiple addresses inside one building are very common, and multiple buildings in one address can be found. If rendering, a separate table is fine, and if doing an analysis these cases need to be considered which requires joins.

Why road refs as an array?

A road may have multiple refs, and it's wrong to ignore this. To pretend that there's only one ref, use SQL like array_to_string(refs, E'\n') or array_to_string(refs, ';'). The latter will reform the ref tag as it was in the original data.

Why no support for osm2pgsql --hstore?

ClearTables uses the hstore type but doesn't support --hstore.

  1. The goal of ClearTables is to abstract away OSM tagging. Copying all the tags to the output is contrary to this.

  2. Copying all tags is technically possible, but wouldn't be done with --hstore, instead it would be done similar to the names column. The --hstore option doesn't work well when using custom column names which may collide with OSM tags.

  3. With tables for different types of features fine-grained selection of appropriate columns is possible and hstore isn't necessary.

  4. Values within a hstore are untyped which is contrary to the principle of using appropriate types.

Contributing

Bug reports, suggestions and (especially!) pull requests are very welcome on the Github issue tracker. Please check the tracker to see if your issue is already known, and be nice. For questions, please use IRC (irc.oftc.net or http://irc.osm.org, channel #osm-dev) and http://help.osm.org.

Code style

  • 2sp for YAML, 4sp for Lua
  • tags are OSM tags, cols are database columns
  • Space after function name when defining a function, e.g. function f (args)
  • Tests for all Lua functions except ones which are only tail calls

Table names

  • Use _polygon and _point suffix when there will be two tables holding the same type of object represented differently (e.g. most POIs)
  • Use _area when there isn't a corresponding _point table for the same object, but there is another table for points or lines of a similar class but different objects (e.g. wood_areas for forests and wood_line for rows of trees)

Lua guidelines

  • Always set columns to strings, even if they're only true/false. It's unwise to count on anything else making it from Lua to C to C++ to PostgreSQL. This lets PostgreSQL do the only coversion.
  • Test particular columns of a transform function instead of the entire output table, e.g. assert(transform({foo="bar"}).baz == "qux") instead of assert(deepcompare(transform({foo="bar"}), {baz="qux"})).

Getting started

Issues tagged with new column are often good ones to get started with. Issues tagged experimental are focused on researching new best practices and state of the art.

Similar projects

  • GeoFabrik Shapefiles in both their free schema and commercially produced schema
  • CartoDB OSM POIs

Additional Reading

  • osm2pgsql lua docs

About

An osm2pgsql style to simplify OSM data use

Topics

openstreetmap-dataosm2pgsql

Resources

Readme
MIT license
Activity
Custom properties

Stars

32 stars

Watchers

1 watching

Forks

8 forks
Report repository

Releases

Packages

Contributors

Languages

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.