wm/README.md

2.5 KiB
Raw Blame History

WangMüller algorithm in PostGIS

This is a work-in-progress implementation following "Line generalization based on analysis of shape characteristics" by Wang and Müller, 1998.

Structure

There will be 2 deliverables from this folder:

  • wm.sql, the implementation.
  • paper mj-msc-full.pdf, a MSc thesis, explaining it.

It contains a few supporting files, notably:

  • tests.sql synthetic unit tests.
  • test-rivers.sql tests with real rivers.
  • Makefile glues everything together.
  • layer2img.py converts a PostGIS layer to an embeddable image.
  • aggregate-rivers.sql combines multiple river objects (linestrings or multilinestrings) to a single one.
  • init.sql initializes PostGIS database for running the tests.
  • rivers-*.sql are national dataset snapshots of rivers (Makefile contains code to update them).
  • ... and a few more files necessary to build the paper.

Running

make help lists the select commands for humans. As of writing:

# make help
mj-msc-full.pdf    Thesis for publishing
test               Unit tests (fast)
test-rivers        Rivers tests (slow)
clean              Clean the current working directory
clean-tables       Remove tables created during unit or rivers tests
help               Print this help message
wc                 Character and page count
refresh-rivers     Refresh rivers-*.sql from Open Street Maps

To execute the algorithm, run:

  • make test for tests with synthetic data.
  • make test-rivers for tests with real rivers. You may adjust the rivers and data source (e.g. use a different country instead of Lithuania) by changing the Makefile and the test files. Left as an exercise for the reader.

Building the paper (pdf)

# make -j$(nproc) mj-msc-full.pdf

mj-msc.tex results in mj-msc-full.pdf, which will be at some point published. It needs quite a few dependencies, including a functioning Docker environment, postgresql client, geopandas, pygments, osm2pgsql, poppler, and a "quite extensive" LaTeX installation. This was tested on Debian 11.

Contributing

Please reach out to me before contributing. As of writing, this is not ready to accept broader contributions, TODO:

  • Elimination operator.
  • Exaggeration operator.
  • Combination operator.
  • CI (unlikely to happen).
  • Known bug in wm_self_crossing: the program crashes with a river in Lithuania.

License

GPL 2.0 or later, same as PostGIS.