wm/README.md

91 lines
2.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

WangMüller line generalization algorithm in PostGIS
----------------------------------------------------
This is WangMüller line generalization algorithm implementation in PostGIS.
Following "Line generalization based on analysis of shape characteristics" by
the same authors, 1998.
![line simplification example](https://raw.githubusercontent.com/motiejus/wm/main/salvis.png)
Status
------
The repository is no longer developed and archived. Notable forks:
- [github.com/openmaplt/wm](https://github.com/openmaplt/wm): seems like they
are seriously continuing the development of the algorithm.
If you have used this code as a basis and created an improved version, ping me,
I will link it from this README.
Structure
---------
There are 2 main pieces:
- `wm.sql`, the implementation.
- MSc thesis `mj-msc-full.pdf` with visual examples and known issues.
- A few presentations.
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
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 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.
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.
Building the paper (pdf)
------------------------
```
# 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.
Credit
------
[Nacionalinė Žemės Tarnyba](http://nzt.lt/) for the river data sets.
License
-------
GPLv2 or later.