This is Wang–Müller line generalization algorithm implementation in PostGIS. Following "Line generalization based on analysis of shape characteristics" by the same authors, 1998.
This repository is forked from Motiejus archived one continuing it's development.
There are 2 main pieces:
wm.sql, the implementation.- MSc thesis
mj-msc-full.pdfwith visual examples and known issues. - A few presentations.
It contains a few supporting files, notably:
tests.sqlsynthetic unit tests.test-rivers.sqltests with real rivers.Makefileglues everything together.layer2img.pyconverts a PostGIS layer to an embeddable image.aggregate-rivers.sqlcombines multiple river objects (linestrings or multilinestrings) to a single one.init.sqlinitializes PostGIS database for running the tests.rivers-*.sqlare national dataset snapshots of rivers (Makefilecontains code to update them).- ... and a few more files necessary to build the paper.
make help lists the select commands for humans. As of writing:
# make help
clean Clean the current working directory
clean-tables Remove tables created during unit or rivers tests
help Print this help message
mj-msc-full.pdf Thesis for publishing
mj-msc-gray.pdf Gray version, to inspect monochrome output
refresh-rivers Refresh river data from national datasets
test-rivers Rivers tests (slow)
test Unit tests (fast)
To execute the algorithm, run:
make testfor tests with synthetic data.make test-riversfor tests with real rivers. You may adjust the rivers and data source (e.g. use a different country instead of Lithuania) by changing theMakefileand the test files. Left as an exercise for the reader.
N.B. the make test-rivers fails (see test-rivers.sql), because with higher
dhalfcircle values, the unionized river (salvis) is going on top of itself,
making the resulting geometry invalid during the process.
# make -j mj-msc-full.pdf
mj-msc.tex results in mj-msc-full.pdf. This step needs quite a few
or a container: see Dockerfile for dependencies or in-container to run
it all in the container.
Nacionalinė Žemės Tarnyba for the river data sets.
GPLv2 or later.
