wm/README.md

97 lines
2.9 KiB
Markdown
Raw Normal View History

2021-05-19 23:44:13 +03:00
WangMüller line generalization algorithm in PostGIS
----------------------------------------------------
2021-05-19 22:57:49 +03:00
2021-05-19 23:09:05 +03:00
This is WangMüller line generalization algorithm implementation in PostGIS.
Following "Line generalization based on analysis of shape characteristics" by
the same author, 1998.
Status
------
It mostly works. Read `mj-msc-full.pdf` for visual examples and possible
gotchas.
2021-05-19 22:57:49 +03:00
2021-05-19 23:36:30 +03:00
![line simplification example](https://raw.githubusercontent.com/motiejus/wm/main/salvis.png)
2021-05-19 22:57:49 +03:00
Structure
---------
2021-05-19 23:09:05 +03:00
There are be 2 deliverables:
2021-05-19 22:57:49 +03:00
2021-05-19 22:57:49 +03:00
- `wm.sql`, the implementation.
2021-05-19 22:57:49 +03:00
- paper `mj-msc-full.pdf`, a MSc thesis, explaining it.
2021-05-19 22:57:49 +03:00
2021-05-19 22:57:49 +03:00
It contains a few supporting files, notably:
2021-05-19 22:57:49 +03:00
2021-05-19 22:57:49 +03:00
- `tests.sql` synthetic unit tests.
- `test-rivers.sql` tests with real rivers.
- `Makefile` glues everything together.
2021-05-19 22:57:49 +03:00
- `layer2img.py` converts a PostGIS layer to an embeddable image.
2021-05-19 22:57:49 +03:00
- `aggregate-rivers.sql` combines multiple river objects (linestrings or
multilinestrings) to a single one.
2021-05-19 22:57:49 +03:00
- `init.sql` initializes PostGIS database for running the tests.
- `rivers-*.sql` are national dataset snapshots of rivers (`Makefile`
2021-05-19 22:57:49 +03:00
contains code to update them).
2021-05-19 22:57:49 +03:00
- ... and a few more files necessary to build the paper.
2021-05-19 22:57:49 +03:00
2021-05-19 22:57:49 +03:00
Running
-------
2021-05-19 22:57:49 +03:00
2021-05-19 22:57:49 +03:00
`make help` lists the select commands for humans. As of writing:
2021-05-19 22:57:49 +03:00
```
2021-05-19 22:57:49 +03:00
# make help
2021-05-19 22:57:49 +03:00
mj-msc-full.pdf Thesis for publishing
test Unit tests (fast)
test-rivers Rivers tests (slow)
2021-05-19 23:50:08 +03:00
refresh-rivers Refresh river data from national datasets
2021-05-19 22:57:49 +03:00
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
```
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
2021-05-19 22:57:49 +03:00
the `Makefile` and the test files. Left as an exercise for the reader.
2021-05-19 22:57:49 +03:00
2021-05-19 23:09:05 +03:00
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.
2021-05-19 22:57:49 +03:00
Building the paper (pdf)
------------------------
2021-05-19 22:57:49 +03:00
```
2021-05-19 22:57:49 +03:00
# make -j$(nproc) mj-msc-full.pdf
2021-05-19 22:57:49 +03:00
```
2021-05-19 22:57:49 +03:00
`mj-msc.tex` results in `mj-msc-full.pdf`, which will be at some point
2021-05-19 23:09:05 +03:00
published to this repo. It needs quite a few dependencies, including a
functioning Docker environment, postgresql client, geopandas, pygments,
osm2pgsql, poppler, and a "quite extensive" LaTeX installation. Tested on
Debian 11.
2021-05-19 22:57:49 +03:00
2021-05-19 23:46:29 +03:00
`in-container` script may be helpful if the above sounds like too much.
2021-05-19 22:57:49 +03:00
Contributing
------------
2021-05-19 23:45:02 +03:00
This repository will soon be frozen and does not accept contributions. Please
fork it. If fork has improved the algorithm substantially, feel free to ping
me, I will link to it in this README.
2021-05-19 22:57:49 +03:00
2021-05-19 23:34:53 +03:00
Credit
------
[Nacionalinė Žemės Tarnyba](http://nzt.lt/) for the river data sets.
2021-05-19 22:57:49 +03:00
License
-------
2021-05-19 23:09:05 +03:00
GPLv2 or later.