Rename Röntgen to Map Machine.

This commit is contained in:
Sergey Vartanov 2021-09-08 03:55:16 +03:00
parent 38c4e00de3
commit 2bd89a6539
57 changed files with 252 additions and 236 deletions

View file

@ -1,7 +1,7 @@
Contributing Contributing
============ ============
Thank you for your interest in the Röntgen project. Since the primary goal of the project is to cover as many tags as possible, the project is crucially depend on contributions as OpenStreetMap itself. Thank you for your interest in the Map Machine project. Since the primary goal of the project is to cover as many tags as possible, the project is crucially depend on contributions as OpenStreetMap itself.
Suggest a tag to support Suggest a tag to support
------------------------ ------------------------

View file

@ -23,7 +23,7 @@ jobs:
pip install . pip install .
- name: Check code style with Black - name: Check code style with Black
run: | run: |
black -l 80 --check roentgen tests black -l 80 --check map_machine tests
- name: Lint with Flake8 - name: Lint with Flake8
run: | run: |
flake8 --max-line-length=80 --ignore=E203,W503 flake8 --max-line-length=80 --ignore=E203,W503
@ -32,16 +32,16 @@ jobs:
pytest -v pytest -v
- name: Test render - name: Test render
run: | run: |
roentgen render -b 10.000,20.000,10.001,20.001 --cache tests/data map-machine render -b 10.000,20.000,10.001,20.001 --cache tests/data
- name: Test icon generation - name: Test icon generation
run: | run: |
roentgen icons map-machine icons
- name: Test MapCSS 0.2 generation - name: Test MapCSS 0.2 generation
run: | run: |
roentgen mapcss map-machine mapcss
- name: Test element generation - name: Test element generation
run: | run: |
roentgen element --node amenity=bench,material=wood map-machine element --node amenity=bench,material=wood
- name: Test tile generation - name: Test tile generation
run: | run: |
roentgen tile --coordinates 50.000,40.000 --cache tests/data map-machine tile --coordinates 50.000,40.000 --cache tests/data

View file

@ -1,27 +1,27 @@
**Röntgen** (or **Roentgen** when ASCII is preferred) project consists of **Map Machine** project consists of
* simple Python [OpenStreetMap](http://openstreetmap.org) renderer and tile generator (see [usage](#usage-example), [renderer documentation](#map-generation), [tile generation](#tile-generation)), * simple Python [OpenStreetMap](http://openstreetmap.org) renderer and tile generator (see [usage](#usage-example), [renderer documentation](#map-generation), [tile generation](#tile-generation)),
* [set of CC-BY 4.0 icons](#icon-set) that can be used outside the project. * [Röntgen icon set](#icon-set): unique CC-BY 4.0 icons.
The idea behind the Röntgen project is to **show all the richness of the OpenStreetMap data**: to have a possibility to *display any map feature* represented by OpenStreetMap data tags by means of colors, shapes, and icons. Röntgen is created for OpenStreetMap contributors: to display all changes one made on the map even if they are small, and for users: to dig down into the map and find every detail that was mapped. The idea behind the Map Machine project is to **show all the richness of the OpenStreetMap data**: to have a possibility to *display any map feature* represented by OpenStreetMap data tags by means of colors, shapes, and icons. Map Machine is created for OpenStreetMap contributors: to display all changes one made on the map even if they are small, and for users: to dig down into the map and find every detail that was mapped.
Unlike standard OpenStreetMap layers, **Röntgen is a playground for experiments** where one can easily try to support proposed tags, tags with little or even single usage, deprecated tags. Unlike standard OpenStreetMap layers, **Map Machine is a playground for experiments** where one can easily try to support proposed tags, tags with little or even single usage, deprecated tags.
Röntgen is intended to be highly configurable, so it can generate precise but messy maps for OSM contributors as well as pretty and clean maps for OSM users, can use slow algorithms for some experimental features. Map Machine is intended to be highly configurable, so it can generate precise but messy maps for OSM contributors as well as pretty and clean maps for OSM users, can use slow algorithms for some experimental features.
Usage example Usage example
------------- -------------
```bash ```bash
roentgen render -b 2.284,48.860,2.290,48.865 map-machine render -b 2.284,48.860,2.290,48.865
``` ```
will automatically download OSM data and write output SVG map of the specified area to `out/map.svg`. See [Map generation](#map-generation). will automatically download OSM data and write output SVG map of the specified area to `out/map.svg`. See [Map generation](#map-generation).
```bash ```bash
roentgen tile -b 2.361,48.871,2.368,48.875 map-machine tile -b 2.361,48.871,2.368,48.875
``` ```
will automatically download OSM data and write output PNG tiles that cover the specified area to `out/tiles` directory. See [Tile generation](#tile-generation). will automatically download OSM data and write output PNG tiles that cover the specified area to `out/tiles` directory. See [Tile generation](#tile-generation).
@ -29,7 +29,7 @@ will automatically download OSM data and write output PNG tiles that cover the s
Map features Map features
------------ ------------
Röntgen features: Map Machine features:
* detailed icons to display subtypes like [power tower design](#power-tower-design), * detailed icons to display subtypes like [power tower design](#power-tower-design),
* can display multiple icons for one entity to cover more features, * can display multiple icons for one entity to cover more features,
@ -77,21 +77,21 @@ There are [special symbols](https://en.wikipedia.org/wiki/List_of_Japanese_map_s
Icon set Icon set
-------- --------
The central feature of the project is Röntgen icon set. It is a set of monochrome 14 × 14 px pixel-aligned icons. Unlike the Röntgen source code, which is under MIT license, all icons are under [CC BY](http://creativecommons.org/licenses/by/4.0/) license. So, with the appropriate credit icon set can be used outside the project. Some icons can be used as emoji symbols. The central feature of the project is Röntgen icon set. It is a set of monochrome 14 × 14 px pixel-aligned icons. Unlike the Map Machine source code, which is under MIT license, all icons are under [CC BY](http://creativecommons.org/licenses/by/4.0/) license. So, with the appropriate credit icon set can be used outside the project. Some icons can be used as emoji symbols.
All icons tend to support common design style, which is heavily inspired by [Maki](https://github.com/mapbox/maki), [Osmic](https://github.com/gmgeo/osmic), and [Temaki](https://github.com/ideditor/temaki). All icons tend to support common design style, which is heavily inspired by [Maki](https://github.com/mapbox/maki), [Osmic](https://github.com/gmgeo/osmic), and [Temaki](https://github.com/ideditor/temaki).
Icons are used to visualize tags for nodes and areas. Unlike other renderers, Röntgen can use more than one icon to visualize an entity and use colors to visualize [`colour`](https://wiki.openstreetmap.org/wiki/Key:colour) value or other entity properties (like [`material`](https://wiki.openstreetmap.org/wiki/Key:material) or [`genus`](https://wiki.openstreetmap.org/wiki/Key:genus)). Icons are used to visualize tags for nodes and areas. Unlike other renderers, Map Machine can use more than one icon to visualize an entity and use colors to visualize [`colour`](https://wiki.openstreetmap.org/wiki/Key:colour) value or other entity properties (like [`material`](https://wiki.openstreetmap.org/wiki/Key:material) or [`genus`](https://wiki.openstreetmap.org/wiki/Key:genus)).
![Icons](doc/grid.png) ![Icons](doc/grid.png)
Feel free to request new icons via issues for whatever you want to see on the map. No matter how frequently the tag is used in OpenStreetMap since final goal is to cover all tags. However, common used tags have priority, other things being equal. Feel free to request new icons via issues for whatever you want to see on the map. No matter how frequently the tag is used in OpenStreetMap since final goal is to cover all tags. However, common used tags have priority, other things being equal.
Generate icon grid and sets of individual icons with `roentgen icons`. It will create `out/icon_grid.svg` file, and SVG files in `out/icons_by_id` directory where files are named using shape identifiers (e.g. `power_tower_portal_2_level.svg`) and in `icons_by_name` directory where files are named using shape names (e.g. `Röntgen portal two-level transmission tower.svg`). Files from the last directory are used in OpenStreetMap wiki (e.g. [`File:Röntgen_portal_two-level_transmission_tower.svg`](https://wiki.openstreetmap.org/wiki/File:R%C3%B6ntgen_portal_two-level_transmission_tower.svg)). Generate icon grid and sets of individual icons with `map-machine icons`. It will create `out/icon_grid.svg` file, and SVG files in `out/icons_by_id` directory where files are named using shape identifiers (e.g. `power_tower_portal_2_level.svg`) and in `icons_by_name` directory where files are named using shape names (e.g. `Röntgen portal two-level transmission tower.svg`). Files from the last directory are used in OpenStreetMap wiki (e.g. [`File:Röntgen_portal_two-level_transmission_tower.svg`](https://wiki.openstreetmap.org/wiki/File:R%C3%B6ntgen_portal_two-level_transmission_tower.svg)).
### Shape combination ### ### Shape combination ###
Röntgen constructs icons from the shapes extracted from the sketch SVG file. Some icons consists of just one shape, to construct other it may be necessary to combine two or more shapes. Map Machine constructs icons from the shapes extracted from the sketch SVG file. Some icons consists of just one shape, to construct other it may be necessary to combine two or more shapes.
![Bus stop icon combination](doc/bus_stop.png) ![Bus stop icon combination](doc/bus_stop.png)
@ -128,7 +128,7 @@ Map generation
Command `render` is used to generates SVG map from OpenStreetMap data. You can run it using: Command `render` is used to generates SVG map from OpenStreetMap data. You can run it using:
```bash ```bash
roentgen render \ map-machine render \
-b <min longitude>,<min latitude>,<max longitude>,<max latitude> \ -b <min longitude>,<min latitude>,<max longitude>,<max latitude> \
-o <output file name> \ -o <output file name> \
-z <OSM zoom level> \ -z <OSM zoom level> \
@ -138,7 +138,7 @@ roentgen render \
### Example ### ### Example ###
```bash ```bash
roentgen render \ map-machine render \
--boundary-box 2.284,48.860,2.290,48.865 \ --boundary-box 2.284,48.860,2.290,48.865 \
--output out/esplanade_du_trocadéro.svg --output out/esplanade_du_trocadéro.svg
``` ```
@ -160,7 +160,7 @@ plus [map configuration options](#map-options)
Tile generation Tile generation
--------------- ---------------
Command `tile` is used to generate PNG tiles for [slippy maps](https://wiki.openstreetmap.org/wiki/Slippy_Map). To use them, run [Röntgen tile server](#tile-server). Command `tile` is used to generate PNG tiles for [slippy maps](https://wiki.openstreetmap.org/wiki/Slippy_Map). To use them, run [Map Machine tile server](#tile-server).
| Option | Description | | Option | Description |
|---|---| |---|---|
@ -169,6 +169,7 @@ Command `tile` is used to generate PNG tiles for [slippy maps](https://wiki.open
| <span style="white-space: nowrap;">`--cache`</span> `<path>` | path for temporary OSM files, default value: `cache` | | <span style="white-space: nowrap;">`--cache`</span> `<path>` | path for temporary OSM files, default value: `cache` |
| <span style="white-space: nowrap;">`-b`</span>, <span style="white-space: nowrap;">`--boundary-box`</span> `<lon1>,<lat1>,<lon2>,<lat2>` | construct the minimum amount of tiles that cover requested boundary box | | <span style="white-space: nowrap;">`-b`</span>, <span style="white-space: nowrap;">`--boundary-box`</span> `<lon1>,<lat1>,<lon2>,<lat2>` | construct the minimum amount of tiles that cover requested boundary box |
| <span style="white-space: nowrap;">`-z`</span>, <span style="white-space: nowrap;">`--zoom`</span> `<integer>` | OSM zoom levels; can be list of numbers or ranges, e.g. `16-18`, `16,17,18`, or `16,18-20`, default value: `18` | | <span style="white-space: nowrap;">`-z`</span>, <span style="white-space: nowrap;">`--zoom`</span> `<integer>` | OSM zoom levels; can be list of numbers or ranges, e.g. `16-18`, `16,17,18`, or `16,18-20`, default value: `18` |
| <span style="white-space: nowrap;">`-i`</span>, <span style="white-space: nowrap;">`--input`</span> `<path>` | input OSM XML file name (if not specified, file will be downloaded using OpenStreetMap API) |
plus [map configuration options](#map-options) plus [map configuration options](#map-options)
@ -177,13 +178,13 @@ plus [map configuration options](#map-options)
Specify tile coordinates: Specify tile coordinates:
```bash ```bash
roentgen tile --tile <OSM zoom level>/<x>/<y> map-machine tile --tile <OSM zoom level>/<x>/<y>
``` ```
or specify any geographical coordinates inside a tile: or specify any geographical coordinates inside a tile:
```bash ```bash
roentgen tile \ map-machine tile \
--coordinates <latitude>,<longitude> \ --coordinates <latitude>,<longitude> \
--zoom <OSM zoom levels> --zoom <OSM zoom levels>
``` ```
@ -193,7 +194,7 @@ Tile will be stored as SVG file `out/tiles/tile_<zoom level>_<x>_<y>.svg` and PN
Example: Example:
```bash ```bash
roentgen tile -c 55.7510637,37.6270761 -z 18 map-machine tile -c 55.7510637,37.6270761 -z 18
``` ```
will generate SVG file `out/tiles/tile_18_158471_81953.svg` and PNG file `out/tiles/tile_18_158471_81953.png`. will generate SVG file `out/tiles/tile_18_158471_81953.svg` and PNG file `out/tiles/tile_18_158471_81953.png`.
@ -203,7 +204,7 @@ will generate SVG file `out/tiles/tile_18_158471_81953.svg` and PNG file `out/ti
Specify boundary box to get the minimal set of tiles that covers the area: Specify boundary box to get the minimal set of tiles that covers the area:
```bash ```bash
roentgen tile \ map-machine tile \
--boundary-box <min longitude>,<min latitude>,<max longitude>,<max latitude> \ --boundary-box <min longitude>,<min latitude>,<max longitude>,<max latitude> \
--zoom <OSM zoom levels> --zoom <OSM zoom levels>
``` ```
@ -213,7 +214,7 @@ Boundary box will be extended to the boundaries of the minimal tile set that cov
Example: Example:
```bash ```bash
roentgen tile -b 2.361,48.871,2.368,48.875 map-machine tile -b 2.361,48.871,2.368,48.875
``` ```
will generate 36 PNG tiles at zoom level 18 from tile 18/132791/90164 all the way to 18/132796/90169 and two cached files `cache/2.360,48.869,2.370,48.877_18.svg` and `cache/2.360,48.869,2.370,48.877_18.png`. will generate 36 PNG tiles at zoom level 18 from tile 18/132791/90164 all the way to 18/132796/90169 and two cached files `cache/2.360,48.869,2.370,48.877_18.svg` and `cache/2.360,48.869,2.370,48.877_18.png`.
@ -224,7 +225,7 @@ Tile server
Command `server` is used to run tile server for slippy maps. Command `server` is used to run tile server for slippy maps.
``` ```
roentgen server map-machine server
``` ```
Stop server interrupting process with <kbd>Ctrl</kbd> + <kbd>C</kbd>. Stop server interrupting process with <kbd>Ctrl</kbd> + <kbd>C</kbd>.
@ -239,13 +240,13 @@ Stop server interrupting process with <kbd>Ctrl</kbd> + <kbd>C</kbd>.
Create a minimal amount of tiles that cover specified boundary box for zoom levels 16, 17, 18, and 19: Create a minimal amount of tiles that cover specified boundary box for zoom levels 16, 17, 18, and 19:
```bash ```bash
roentgen tile -b 2.364,48.854,2.367,48.857 -z 16-19 map-machine tile -b 2.364,48.854,2.367,48.857 -z 16-19
``` ```
Run tile server on 127.0.0.1:8080: Run tile server on 127.0.0.1:8080:
```bash ```bash
roentgen server map-machine server
``` ```
Use JavaScript code for [Leaflet](https://leafletjs.com/): Use JavaScript code for [Leaflet](https://leafletjs.com/):
@ -258,8 +259,8 @@ L.tileLayer('http://127.0.0.1:8080/tiles/{z}/{x}/{y}', {
attribution: 'Map data &copy; ' + attribution: 'Map data &copy; ' +
'<a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> ' + '<a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> ' +
'contributors, imagery &copy; ' + 'contributors, imagery &copy; ' +
'<a href="https:/github.com/enzet/Roentgen">Röntgen</a>', '<a href="https:/github.com/enzet/map-machine">Map Machine</a>',
id: 'roentgen', id: 'map_machine',
tileSize: 256, tileSize: 256,
zoomOffset: 0 zoomOffset: 0
}).addTo(map); }).addTo(map);
@ -288,9 +289,9 @@ Map configuration options used by `render` and `tile` commands:
MapCSS 0.2 generation MapCSS 0.2 generation
--------------------- ---------------------
Command `mapcss` is used to generate MapCSS scheme. `roentgen mapcss` will create `out/roentgen_mapcss` directory with simple MapCSS 0.2 scheme adding icons from Röntgen icon set to nodes and areas: `.mapcss` file and directory with icons. Command `mapcss` is used to generate MapCSS scheme. `map-machine mapcss` will create `out/map_machine_mapcss` directory with simple MapCSS 0.2 scheme adding icons from Röntgen icon set to nodes and areas: `.mapcss` file and directory with icons.
To create MapCSS with Röntgen style also for ways and relations, run `roentgen mapcss --ways`. To create MapCSS with Map Machine style also for ways and relations, run `map-machine mapcss --ways`.
| Option | Description | | Option | Description |
|---|---| |---|---|
@ -298,15 +299,15 @@ To create MapCSS with Röntgen style also for ways and relations, run `roentgen
| <span style="white-space: nowrap;">`--ways`</span> | add style for ways and relations | | <span style="white-space: nowrap;">`--ways`</span> | add style for ways and relations |
| <span style="white-space: nowrap;">`--lifecycle`</span> | add icons for lifecycle tags; be careful: this will increase the number of node and area selectors by 9 times, set by default | | <span style="white-space: nowrap;">`--lifecycle`</span> | add icons for lifecycle tags; be careful: this will increase the number of node and area selectors by 9 times, set by default |
### Use Röntgen as JOSM map paint style ### ### Use Map Machine as JOSM map paint style ###
* Run `roentgen mapcss`. * Run `map-machine mapcss`.
* Open [JOSM](https://josm.openstreetmap.de/). * Open [JOSM](https://josm.openstreetmap.de/).
* Go to <kbd>Preferences</kbd> → Third tab on the left → <kbd>Map Paint Styles</kbd>. * Go to <kbd>Preferences</kbd> → Third tab on the left → <kbd>Map Paint Styles</kbd>.
* Active styles: press <kbd>+</kbd>. * Active styles: press <kbd>+</kbd>.
* URL / File: set path to `out/roentgen_mapcss/roentgen.mapcss`. * URL / File: set path to `out/map_machine_mapcss/map_machine.mapcss`.
To enable / disable Röntgen map paint style go to <kbd>View</kbd><kbd>Map Paint Styles</kbd><kbd>Röntgen</kbd>. To enable / disable Map Machine map paint style go to <kbd>View</kbd><kbd>Map Paint Styles</kbd><kbd>Map Machine</kbd>.
#### Example #### #### Example ####
@ -315,5 +316,5 @@ To enable / disable Röntgen map paint style go to <kbd>View</kbd> → <kbd>Map
Example of using Röntgen icons on top of Mapnik style in JOSM. Map Paint Styles look like: Example of using Röntgen icons on top of Mapnik style in JOSM. Map Paint Styles look like:
* ✓ Mapnik (true) * ✓ Mapnik (true)
* ✓ Röntgen * ✓ Map Machine

View file

@ -1,8 +1,8 @@
#!/bin/sh #!/bin/sh
echo "Checking code format with Black..." echo "Checking code format with Black..."
if ! black -l 80 --check tests roentgen; then if ! black -l 80 --check tests map_machine; then
black -l 80 --diff tests roentgen black -l 80 --diff tests map_machine
echo "FAIL" echo "FAIL"
exit 1 exit 1
fi fi

View file

@ -10,8 +10,8 @@ else
fi fi
echo "Checking code format with Black..." echo "Checking code format with Black..."
if ! black -l 80 --check tests roentgen; then if ! black -l 80 --check tests map_machine; then
black -l 80 --diff tests roentgen black -l 80 --diff tests map_machine
echo "FAIL" echo "FAIL"
exit 1 exit 1
fi fi
@ -33,22 +33,22 @@ pytest -v || { echo "FAIL"; exit 1; }
# Integration tests. # Integration tests.
echo "Test render" echo "Test render"
python3 roentgen render -b 10.000,20.000,10.001,20.001 --cache tests/data \ map-machine render -b 10.000,20.000,10.001,20.001 --cache tests/data \
|| { echo "FAIL"; exit 1; } || { echo "FAIL"; exit 1; }
grep "natural: tree" out/map.svg || { echo "FAIL"; exit 1; } grep "natural: tree" out/map.svg || { echo "FAIL"; exit 1; }
echo "Test icons" echo "Test icons"
python3 roentgen icons || { echo "FAIL"; exit 1; } map-machine icons || { echo "FAIL"; exit 1; }
echo "Test MapCSS generation" echo "Test MapCSS generation"
python3 roentgen mapcss || { echo "FAIL"; exit 1; } map-machine mapcss || { echo "FAIL"; exit 1; }
echo "Test element generation" echo "Test element generation"
python3 roentgen element --node amenity=bench,material=wood \ map-machine element --node amenity=bench,material=wood \
|| { echo "FAIL"; exit 1; } || { echo "FAIL"; exit 1; }
echo "Test tile generation" echo "Test tile generation"
python3 roentgen tile --coordinates 50.000,40.000 --cache tests/data \ map-machine tile --coordinates 50.000,40.000 --cache tests/data \
|| { echo "FAIL"; exit 1; } || { echo "FAIL"; exit 1; }
exit 0 exit 0

View file

@ -1,6 +1,6 @@
\1 {Contributing} {contributing} \1 {Contributing} {contributing}
Thank you for your interest in the Röntgen project. Since the primary goal of the project is to cover as many tags as possible, the project is crucially depend on contributions as OpenStreetMap itself. Thank you for your interest in the Map Machine project. Since the primary goal of the project is to cover as many tags as possible, the project is crucially depend on contributions as OpenStreetMap itself.
\2 {Suggest a tag to support} {} \2 {Suggest a tag to support} {}
@ -17,7 +17,7 @@ Please, create an issue with \m {bug} and \m {generator} labels.
/* /*
\2 {Fix a typo in documentation} {} \2 {Fix a typo in documentation} {}
This action is not that easy as it supposed to be. We use \ref {http://github.com/enzet/Moire} {Moire} markup and converter to automatically generate documentation for GitHub, website, and \ref {http://wiki.openstreetmap.org/} {OpenStreetMap wiki}. That's why editing Markdown files is not allowed. To fix a typo, open corresponding Moire file in \m {doc} directory (e.g. \m {doc/readme.moi} for \m {README.md}), modify it, and run \m {python roentgen doc} script. This action is not that easy as it supposed to be. We use \ref {http://github.com/enzet/Moire} {Moire} markup and converter to automatically generate documentation for GitHub, website, and \ref {http://wiki.openstreetmap.org/} {OpenStreetMap wiki}. That's why editing Markdown files is not allowed. To fix a typo, open corresponding Moire file in \m {doc} directory (e.g. \m {doc/readme.moi} for \m {README.md}), modify it, and run \m {map-machine doc} script.
*/ */
\2 {Modify the code} {} \2 {Modify the code} {}

View file

@ -1,31 +1,31 @@
\title {Röntgen} \title {Map Machine}
\page_icon {out/icons_by_id/book.svg} \page_icon {out/icons_by_id/book.svg}
\b {Röntgen} (or \b {Roentgen} when ASCII is preferred) project consists of \b {Map Machine} project consists of
\list \list
{simple Python \ref {http://openstreetmap.org} {OpenStreetMap} renderer and tile generator (see \ref {#usage-example} {usage}, \ref {#map-generation} {renderer documentation}, \ref {#tile-generation} {tile generation}),} {simple Python \ref {http://openstreetmap.org} {OpenStreetMap} renderer and tile generator (see \ref {#usage-example} {usage}, \ref {#map-generation} {renderer documentation}, \ref {#tile-generation} {tile generation}),}
{\ref {#icon-set} {set of CC-BY 4.0 icons} that can be used outside the project.} {\ref {#icon-set} {Röntgen icon set}\: unique CC-BY 4.0 icons.}
The idea behind the Röntgen project is to \b {show all the richness of the OpenStreetMap data}\: to have a possibility to \i {display any map feature} represented by OpenStreetMap data tags by means of colors, shapes, and icons. Röntgen is created for OpenStreetMap contributors\: to display all changes one made on the map even if they are small, and for users\: to dig down into the map and find every detail that was mapped. The idea behind the Map Machine project is to \b {show all the richness of the OpenStreetMap data}\: to have a possibility to \i {display any map feature} represented by OpenStreetMap data tags by means of colors, shapes, and icons. Map Machine is created for OpenStreetMap contributors\: to display all changes one made on the map even if they are small, and for users\: to dig down into the map and find every detail that was mapped.
Unlike standard OpenStreetMap layers, \b {Röntgen is a playground for experiments} where one can easily try to support proposed tags, tags with little or even single usage, deprecated tags. Unlike standard OpenStreetMap layers, \b {Map Machine is a playground for experiments} where one can easily try to support proposed tags, tags with little or even single usage, deprecated tags.
Röntgen is intended to be highly configurable, so it can generate precise but messy maps for OSM contributors as well as pretty and clean maps for OSM users, can use slow algorithms for some experimental features. Map Machine is intended to be highly configurable, so it can generate precise but messy maps for OSM contributors as well as pretty and clean maps for OSM users, can use slow algorithms for some experimental features.
\2 {Usage example} {usage-example} \2 {Usage example} {usage-example}
\code {roentgen render -b 2.284,48.860,2.290,48.865} {bash} \code {map-machine render -b 2.284,48.860,2.290,48.865} {bash}
will automatically download OSM data and write output SVG map of the specified area to \m {out/map.svg}. See \ref {#map-generation} {Map generation}. will automatically download OSM data and write output SVG map of the specified area to \m {out/map.svg}. See \ref {#map-generation} {Map generation}.
\code {roentgen tile -b 2.361,48.871,2.368,48.875} {bash} \code {map-machine tile -b 2.361,48.871,2.368,48.875} {bash}
will automatically download OSM data and write output PNG tiles that cover the specified area to \m {out/tiles} directory. See \ref {#tile-generation} {Tile generation}. will automatically download OSM data and write output PNG tiles that cover the specified area to \m {out/tiles} directory. See \ref {#tile-generation} {Tile generation}.
\2 {Map features} {features} \2 {Map features} {features}
Röntgen features\: Map Machine features\:
\list \list
{detailed icons to display subtypes like \ref {#power-tower-design} {power tower design},} {detailed icons to display subtypes like \ref {#power-tower-design} {power tower design},}
{can display multiple icons for one entity to cover more features,} {can display multiple icons for one entity to cover more features,}
@ -89,11 +89,11 @@ There are \ref {https://en.wikipedia.org/wiki/List_of_Japanese_map_symbols} {spe
\2 {Icon set} {icon-set} \2 {Icon set} {icon-set}
The central feature of the project is Röntgen icon set. It is a set of monochrome 14 × 14 px pixel-aligned icons. Unlike the Röntgen source code, which is under MIT license, all icons are under \ref {http://creativecommons.org/licenses/by/4.0/} {CC BY} license. So, with the appropriate credit icon set can be used outside the project. Some icons can be used as emoji symbols. The central feature of the project is Röntgen icon set. It is a set of monochrome 14 × 14 px pixel-aligned icons. Unlike the Map Machine source code, which is under MIT license, all icons are under \ref {http://creativecommons.org/licenses/by/4.0/} {CC BY} license. So, with the appropriate credit icon set can be used outside the project. Some icons can be used as emoji symbols.
All icons tend to support common design style, which is heavily inspired by \ref {https://github.com/mapbox/maki} {Maki}, \ref {https://github.com/gmgeo/osmic} {Osmic}, and \ref {https://github.com/ideditor/temaki} {Temaki}. All icons tend to support common design style, which is heavily inspired by \ref {https://github.com/mapbox/maki} {Maki}, \ref {https://github.com/gmgeo/osmic} {Osmic}, and \ref {https://github.com/ideditor/temaki} {Temaki}.
Icons are used to visualize tags for nodes and areas. Unlike other renderers, Röntgen can use more than one icon to visualize an entity and use colors to visualize \osm {colour} value or other entity properties (like \osm {material} or \osm {genus}). Icons are used to visualize tags for nodes and areas. Unlike other renderers, Map Machine can use more than one icon to visualize an entity and use colors to visualize \osm {colour} value or other entity properties (like \osm {material} or \osm {genus}).
\image {doc/grid.png} {Icons} \image {doc/grid.png} {Icons}
@ -103,7 +103,7 @@ Generate icon grid and sets of individual icons with \m {\command {Test icon gen
\3 {Shape combination} {shape_combination} \3 {Shape combination} {shape_combination}
Röntgen constructs icons from the shapes extracted from the sketch SVG file. Some icons consists of just one shape, to construct other it may be necessary to combine two or more shapes. Map Machine constructs icons from the shapes extracted from the sketch SVG file. Some icons consists of just one shape, to construct other it may be necessary to combine two or more shapes.
\image {doc/bus_stop.png} {Bus stop icon combination} \image {doc/bus_stop.png} {Bus stop icon combination}
@ -172,7 +172,7 @@ pip install .} {bash}
Command \m {render} is used to generates SVG map from OpenStreetMap data. You can run it using\: Command \m {render} is used to generates SVG map from OpenStreetMap data. You can run it using\:
\code {roentgen render \\ \code {map-machine render \\
-b \formal {min longitude},\formal {min latitude},\formal {max longitude},\formal {max latitude} \\ -b \formal {min longitude},\formal {min latitude},\formal {max longitude},\formal {max latitude} \\
-o \formal {output file name} \\ -o \formal {output file name} \\
-z \formal {OSM zoom level} \\ -z \formal {OSM zoom level} \\
@ -180,7 +180,7 @@ Command \m {render} is used to generates SVG map from OpenStreetMap data. You c
\3 {Example} {example-2} \3 {Example} {example-2}
\code {roentgen render \\ \code {map-machine render \\
--boundary-box 2.284,48.860,2.290,48.865 \\ --boundary-box 2.284,48.860,2.290,48.865 \\
--output out/esplanade_du_trocadéro.svg} {bash} --output out/esplanade_du_trocadéro.svg} {bash}
@ -194,7 +194,7 @@ plus \ref {#map-options} {map configuration options}
\2 {Tile generation} {tile-generation} \2 {Tile generation} {tile-generation}
Command \m {tile} is used to generate PNG tiles for \ref {https://wiki.openstreetmap.org/wiki/Slippy_Map} {slippy maps}. To use them, run \ref {#tile-server} {Röntgen tile server}. Command \m {tile} is used to generate PNG tiles for \ref {https://wiki.openstreetmap.org/wiki/Slippy_Map} {slippy maps}. To use them, run \ref {#tile-server} {Map Machine tile server}.
\options {tile} \options {tile}
@ -204,11 +204,11 @@ plus \ref {#map-options} {map configuration options}
Specify tile coordinates\: Specify tile coordinates\:
\code {roentgen tile --tile \formal {OSM zoom level}/\formal {x}/\formal {y}} {bash} \code {map-machine tile --tile \formal {OSM zoom level}/\formal {x}/\formal {y}} {bash}
or specify any geographical coordinates inside a tile\: or specify any geographical coordinates inside a tile\:
\code {roentgen tile \\ \code {map-machine tile \\
--coordinates \formal {latitude},\formal {longitude} \\ --coordinates \formal {latitude},\formal {longitude} \\
--zoom \formal {OSM zoom levels}} {bash} --zoom \formal {OSM zoom levels}} {bash}
@ -216,7 +216,7 @@ Tile will be stored as SVG file \m {out/tiles/tile_<zoom level>_<x>_<y>.svg} and
Example\: Example\:
\code {roentgen tile -c 55.7510637,37.6270761 -z 18} {bash} \code {map-machine tile -c 55.7510637,37.6270761 -z 18} {bash}
will generate SVG file \m {out/tiles/tile_18_158471_81953.svg} and PNG file \m {out/tiles/tile_18_158471_81953.png}. will generate SVG file \m {out/tiles/tile_18_158471_81953.svg} and PNG file \m {out/tiles/tile_18_158471_81953.png}.
@ -224,7 +224,7 @@ will generate SVG file \m {out/tiles/tile_18_158471_81953.svg} and PNG file \m {
Specify boundary box to get the minimal set of tiles that covers the area\: Specify boundary box to get the minimal set of tiles that covers the area\:
\code {roentgen tile \\ \code {map-machine tile \\
--boundary-box \formal {min longitude},\formal {min latitude},\formal {max longitude},\formal {max latitude} \\ --boundary-box \formal {min longitude},\formal {min latitude},\formal {max longitude},\formal {max latitude} \\
--zoom \formal {OSM zoom levels}} {bash} --zoom \formal {OSM zoom levels}} {bash}
@ -232,7 +232,7 @@ Boundary box will be extended to the boundaries of the minimal tile set that cov
Example\: Example\:
\code {roentgen tile -b 2.361,48.871,2.368,48.875} {bash} \code {map-machine tile -b 2.361,48.871,2.368,48.875} {bash}
will generate 36 PNG tiles at zoom level 18 from tile 18/132791/90164 all the way to 18/132796/90169 and two cached files \m {cache/2.360,48.869,2.370,48.877_18.svg} and \m {cache/2.360,48.869,2.370,48.877_18.png}. will generate 36 PNG tiles at zoom level 18 from tile 18/132791/90164 all the way to 18/132796/90169 and two cached files \m {cache/2.360,48.869,2.370,48.877_18.svg} and \m {cache/2.360,48.869,2.370,48.877_18.png}.
@ -240,7 +240,7 @@ will generate 36 PNG tiles at zoom level 18 from tile 18/132791/90164 all the wa
Command \m {server} is used to run tile server for slippy maps. Command \m {server} is used to run tile server for slippy maps.
\code {roentgen server} \code {map-machine server}
Stop server interrupting process with \kbd {Ctrl} + \kbd {C}. Stop server interrupting process with \kbd {Ctrl} + \kbd {C}.
@ -250,11 +250,11 @@ Stop server interrupting process with \kbd {Ctrl} + \kbd {C}.
Create a minimal amount of tiles that cover specified boundary box for zoom levels 16, 17, 18, and 19\: Create a minimal amount of tiles that cover specified boundary box for zoom levels 16, 17, 18, and 19\:
\code {roentgen tile -b 2.364,48.854,2.367,48.857 -z 16-19} {bash} \code {map-machine tile -b 2.364,48.854,2.367,48.857 -z 16-19} {bash}
Run tile server on 127.0.0.1\:8080\: Run tile server on 127.0.0.1\:8080\:
\code {roentgen server} {bash} \code {map-machine server} {bash}
Use JavaScript code for \ref {https://leafletjs.com/} {Leaflet}\: Use JavaScript code for \ref {https://leafletjs.com/} {Leaflet}\:
@ -265,8 +265,8 @@ L.tileLayer('http://127.0.0.1:8080/tiles/\{z\}/\{x\}/\{y\}', \{
attribution: 'Map data &copy; ' + attribution: 'Map data &copy; ' +
'<a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> ' + '<a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> ' +
'contributors, imagery &copy; ' + 'contributors, imagery &copy; ' +
'<a href="https:/github.com/enzet/Roentgen">Röntgen</a>', '<a href="https:/github.com/enzet/map-machine">Map Machine</a>',
id: 'roentgen', id: 'map_machine',
tileSize: 256, tileSize: 256,
zoomOffset: 0 zoomOffset: 0
\}).addTo(map);} {js} \}).addTo(map);} {js}
@ -283,22 +283,22 @@ Map configuration options used by \m {render} and \m {tile} commands:
\2 {MapCSS 0.2 generation} {mapcss-0-2-generation} \2 {MapCSS 0.2 generation} {mapcss-0-2-generation}
Command \m {mapcss} is used to generate MapCSS scheme. \m {\command {Test MapCSS 0.2 generation}} will create \m {out/roentgen_mapcss} directory with simple MapCSS 0.2 scheme adding icons from Röntgen icon set to nodes and areas\: \m {.mapcss} file and directory with icons. Command \m {mapcss} is used to generate MapCSS scheme. \m {\command {Test MapCSS 0.2 generation}} will create \m {out/map_machine_mapcss} directory with simple MapCSS 0.2 scheme adding icons from Röntgen icon set to nodes and areas\: \m {.mapcss} file and directory with icons.
To create MapCSS with Röntgen style also for ways and relations, run \m {roentgen mapcss --ways}. To create MapCSS with Map Machine style also for ways and relations, run \m {map-machine mapcss --ways}.
\options {mapcss} \options {mapcss}
\3 {Use Röntgen as JOSM map paint style} \3 {Use Map Machine as JOSM map paint style}
\list \list
{Run \m {\command {Test MapCSS 0.2 generation}}.} {Run \m {\command {Test MapCSS 0.2 generation}}.}
{Open \ref {https://josm.openstreetmap.de/} {JOSM}.} {Open \ref {https://josm.openstreetmap.de/} {JOSM}.}
{Go to \kbd {Preferences} → Third tab on the left → \kbd {Map Paint Styles}.} {Go to \kbd {Preferences} → Third tab on the left → \kbd {Map Paint Styles}.}
{Active styles: press \kbd {+}.} {Active styles: press \kbd {+}.}
{URL / File: set path to \m {out/roentgen_mapcss/roentgen.mapcss}.} {URL / File: set path to \m {out/map_machine_mapcss/map_machine.mapcss}.}
To enable / disable Röntgen map paint style go to \kbd {View} → \kbd {Map Paint Styles} → \kbd {Röntgen}. To enable / disable Map Machine map paint style go to \kbd {View} → \kbd {Map Paint Styles} → \kbd {Map Machine}.
\4 {Example} \4 {Example}
@ -307,4 +307,4 @@ To enable / disable Röntgen map paint style go to \kbd {View} → \kbd {Map Pai
Example of using Röntgen icons on top of Mapnik style in JOSM. Map Paint Styles look like\: Example of using Röntgen icons on top of Mapnik style in JOSM. Map Paint Styles look like\:
\list \list
{✓ Mapnik (true)} {✓ Mapnik (true)}
{✓ Röntgen} {✓ Map Machine}

View file

@ -1,13 +1,13 @@
""" """
Röntgen project: simple Python map renderer for OpenStreetMap and icon set. Map Machine project: simple Python map renderer for OpenStreetMap and icon set.
""" """
__project__ = "Röntgen" __project__ = "Map Machine"
__description__ = ( __description__ = (
"Simple Python map renderer for OpenStreetMap with custom icon set " "Simple Python map renderer for OpenStreetMap with custom icon set "
"intended to display as many tags as possible" "intended to display as many tags as possible"
) )
__url__ = "https://github.com/enzet/Roentgen" __url__ = "https://github.com/enzet/map-machine"
__doc_url__ = f"{__url__}/blob/main/README.md" __doc_url__ = f"{__url__}/blob/main/README.md"
__author__ = "Sergey Vartanov" __author__ = "Sergey Vartanov"
__email__ = "me@enzet.ru" __email__ = "me@enzet.ru"

7
map_machine/__main__.py Normal file
View file

@ -0,0 +1,7 @@
"""
Map Machine entry point.
"""
from map_machine.main import main
if __name__ == "__main__":
main()

View file

@ -5,7 +5,7 @@ from typing import Any
from colour import Color from colour import Color
from roentgen.util import MinMax from map_machine.util import MinMax
__author__ = "Sergey Vartanov" __author__ = "Sergey Vartanov"
__email__ = "me@enzet.ru" __email__ = "me@enzet.ru"

View file

@ -1,5 +1,5 @@
""" """
Construct Röntgen nodes and ways. Construct Map Machine nodes and ways.
""" """
import logging import logging
from datetime import datetime from datetime import datetime
@ -9,9 +9,9 @@ from typing import Any, Iterator, Optional, Union
import numpy as np import numpy as np
from colour import Color from colour import Color
from roentgen import ui from map_machine import ui
from roentgen.color import get_gradient_color from map_machine.color import get_gradient_color
from roentgen.figure import ( from map_machine.figure import (
Building, Building,
Crater, Crater,
DirectionSector, DirectionSector,
@ -19,20 +19,20 @@ from roentgen.figure import (
StyledFigure, StyledFigure,
Tree, Tree,
) )
from roentgen.flinger import Flinger from map_machine.flinger import Flinger
from roentgen.map_configuration import DrawingMode, MapConfiguration from map_machine.map_configuration import DrawingMode, MapConfiguration
# fmt: off # fmt: off
from roentgen.icon import ( from map_machine.icon import (
DEFAULT_SMALL_SHAPE_ID, Icon, IconSet, Shape, ShapeExtractor, DEFAULT_SMALL_SHAPE_ID, Icon, IconSet, Shape, ShapeExtractor,
ShapeSpecification ShapeSpecification
) )
from roentgen.osm_reader import OSMData, OSMNode, OSMRelation, OSMWay from map_machine.osm_reader import OSMData, OSMNode, OSMRelation, OSMWay
from roentgen.point import Point from map_machine.point import Point
from roentgen.scheme import DEFAULT_COLOR, LineStyle, RoadMatcher, Scheme from map_machine.scheme import DEFAULT_COLOR, LineStyle, RoadMatcher, Scheme
from roentgen.text import Label from map_machine.text import Label
from roentgen.ui import BuildingMode from map_machine.ui import BuildingMode
from roentgen.util import MinMax from map_machine.util import MinMax
# fmt: on # fmt: on
__author__ = "Sergey Vartanov" __author__ = "Sergey Vartanov"
@ -147,7 +147,7 @@ def try_to_glue(
class Constructor: class Constructor:
""" """
Röntgen node and way constructor. Map Machine node and way constructor.
""" """
def __init__( def __init__(
@ -199,7 +199,7 @@ class Constructor:
self.construct_nodes() self.construct_nodes()
def construct_ways(self) -> None: def construct_ways(self) -> None:
"""Construct Röntgen ways.""" """Construct Map Machine ways."""
for index, way_id in enumerate(self.osm_data.ways): for index, way_id in enumerate(self.osm_data.ways):
ui.progress_bar( ui.progress_bar(
index, index,
@ -349,7 +349,7 @@ class Constructor:
) )
def construct_relations(self) -> None: def construct_relations(self) -> None:
"""Construct Röntgen ways from OSM relations.""" """Construct Map Machine ways from OSM relations."""
for relation_id in self.osm_data.relations: for relation_id in self.osm_data.relations:
relation: OSMRelation = self.osm_data.relations[relation_id] relation: OSMRelation = self.osm_data.relations[relation_id]
tags: dict[str, str] = relation.tags tags: dict[str, str] = relation.tags

View file

@ -6,7 +6,7 @@ from typing import Iterator, Optional
import numpy as np import numpy as np
from portolan import middle from portolan import middle
from roentgen.drawing import PathCommands from map_machine.drawing import PathCommands
__author__ = "Sergey Vartanov" __author__ = "Sergey Vartanov"
__email__ = "me@enzet.ru" __email__ = "me@enzet.ru"

View file

@ -9,11 +9,11 @@ import numpy as np
import svgwrite import svgwrite
from svgwrite.path import Path as SVGPath from svgwrite.path import Path as SVGPath
from roentgen.icon import ShapeExtractor from map_machine.icon import ShapeExtractor
from roentgen.point import Point from map_machine.point import Point
from roentgen.scheme import LineStyle, Scheme from map_machine.scheme import LineStyle, Scheme
from roentgen.text import Label from map_machine.text import Label
from roentgen.workspace import workspace from map_machine.workspace import workspace
__author__ = "Sergey Vartanov" __author__ = "Sergey Vartanov"
__email__ = "me@enzet.ru" __email__ = "me@enzet.ru"

View file

@ -9,12 +9,12 @@ from svgwrite import Drawing
from svgwrite.container import Group from svgwrite.container import Group
from svgwrite.path import Path from svgwrite.path import Path
from roentgen.direction import DirectionSet, Sector from map_machine.direction import DirectionSet, Sector
from roentgen.drawing import PathCommands from map_machine.drawing import PathCommands
from roentgen.flinger import Flinger from map_machine.flinger import Flinger
from roentgen.osm_reader import OSMNode, Tagged from map_machine.osm_reader import OSMNode, Tagged
from roentgen.road import Lane from map_machine.road import Lane
from roentgen.scheme import LineStyle, RoadMatcher, Scheme from map_machine.scheme import LineStyle, RoadMatcher, Scheme
__author__ = "Sergey Vartanov" __author__ = "Sergey Vartanov"
__email__ = "me@enzet.ru" __email__ = "me@enzet.ru"

View file

@ -5,7 +5,7 @@ from typing import Optional
import numpy as np import numpy as np
from roentgen.boundary_box import BoundaryBox from map_machine.boundary_box import BoundaryBox
__author__ = "Sergey Vartanov" __author__ = "Sergey Vartanov"
__email__ = "me@enzet.ru" __email__ = "me@enzet.ru"

View file

@ -11,9 +11,9 @@ from colour import Color
from svgwrite import Drawing from svgwrite import Drawing
from svgwrite.shapes import Rect from svgwrite.shapes import Rect
from roentgen.icon import Icon, Shape, ShapeExtractor, ShapeSpecification from map_machine.icon import Icon, Shape, ShapeExtractor, ShapeSpecification
from roentgen.scheme import NodeMatcher, Scheme from map_machine.scheme import NodeMatcher, Scheme
from roentgen.workspace import workspace from map_machine.workspace import workspace
__author__ = "Sergey Vartanov" __author__ = "Sergey Vartanov"
__email__ = "me@enzet.ru" __email__ = "me@enzet.ru"

View file

@ -18,7 +18,7 @@ from svgwrite.base import BaseElement
from svgwrite.container import Group from svgwrite.container import Group
from svgwrite.path import Path as SVGPath from svgwrite.path import Path as SVGPath
from roentgen.color import is_bright from map_machine.color import is_bright
__author__ = "Sergey Vartanov" __author__ = "Sergey Vartanov"
__email__ = "me@enzet.ru" __email__ = "me@enzet.ru"

View file

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View file

Before

Width:  |  Height:  |  Size: 1.3 MiB

After

Width:  |  Height:  |  Size: 1.3 MiB

View file

@ -1,20 +1,20 @@
""" """
Röntgen entry point. Map Machine entry point.
""" """
import argparse import argparse
import logging import logging
import sys import sys
from pathlib import Path from pathlib import Path
from roentgen.ui import parse_options from map_machine.ui import parse_options
from roentgen.workspace import Workspace from map_machine.workspace import Workspace
__author__ = "Sergey Vartanov" __author__ = "Sergey Vartanov"
__email__ = "me@enzet.ru" __email__ = "me@enzet.ru"
def main() -> None: def main() -> None:
"""Röntgen command-line entry point.""" """Map Machine command-line entry point."""
logging.basicConfig(format="%(levelname)s %(message)s", level=logging.INFO) logging.basicConfig(format="%(levelname)s %(message)s", level=logging.INFO)
workspace: Workspace = Workspace(Path("out")) workspace: Workspace = Workspace(Path("out"))
@ -24,38 +24,38 @@ def main() -> None:
print("No command provided. See --help.") print("No command provided. See --help.")
elif arguments.command == "render": elif arguments.command == "render":
from roentgen import mapper from map_machine import mapper
mapper.ui(arguments) mapper.ui(arguments)
elif arguments.command == "tile": elif arguments.command == "tile":
from roentgen import tile from map_machine import tile
tile.ui(arguments) tile.ui(arguments)
elif arguments.command == "icons": elif arguments.command == "icons":
from roentgen.grid import draw_icons from map_machine.grid import draw_icons
draw_icons() draw_icons()
elif arguments.command == "mapcss": elif arguments.command == "mapcss":
from roentgen import mapcss from map_machine import mapcss
mapcss.ui(arguments) mapcss.ui(arguments)
elif arguments.command == "element": elif arguments.command == "element":
from roentgen.element import draw_element from map_machine.element import draw_element
draw_element(arguments) draw_element(arguments)
elif arguments.command == "server": elif arguments.command == "server":
from roentgen import server from map_machine import server
server.ui(arguments) server.ui(arguments)
elif arguments.command == "taginfo": elif arguments.command == "taginfo":
from roentgen.scheme import Scheme from map_machine.scheme import Scheme
from roentgen.taginfo import write_taginfo_project_file from map_machine.taginfo import write_taginfo_project_file
write_taginfo_project_file(Scheme(workspace.DEFAULT_SCHEME_PATH)) write_taginfo_project_file(Scheme(workspace.DEFAULT_SCHEME_PATH))

View file

@ -8,12 +8,12 @@ from typing import Optional, TextIO
from colour import Color from colour import Color
from roentgen import __project__, __url__ from map_machine import __project__, __url__
from roentgen.grid import IconCollection from map_machine.grid import IconCollection
from roentgen.icon import ShapeExtractor from map_machine.icon import ShapeExtractor
from roentgen.osm_reader import STAGES_OF_DECAY from map_machine.osm_reader import STAGES_OF_DECAY
from roentgen.scheme import Matcher, Scheme from map_machine.scheme import Matcher, Scheme
from roentgen.workspace import workspace from map_machine.workspace import workspace
__author__ = "Sergey Vartanov" __author__ = "Sergey Vartanov"
__email__ = "me@enzet.ru" __email__ = "me@enzet.ru"
@ -59,7 +59,7 @@ Map paint style that adds icons from Röntgen icon set
meta {{ meta {{
title: "{__project__}"; title: "{__project__}";
description: "Röntgen map paint style for JOSM"; description: "Map Machine map paint style for JOSM";
author: "{__author__}"; author: "{__author__}";
version: "0.1"; version: "0.1";
link: "{__url__}"; link: "{__url__}";
@ -68,7 +68,7 @@ meta {{
class MapCSSWriter: class MapCSSWriter:
""" """
Writer that converts Röntgen scheme into MapCSS 0.2 format. Writer that converts Map Machine scheme into MapCSS 0.2 format.
""" """
def __init__( def __init__(
@ -98,7 +98,7 @@ class MapCSSWriter:
Add MapCSS 0.2 selector for node, way, relation, or area. Add MapCSS 0.2 selector for node, way, relation, or area.
:param target: `node`, `way`, `relation`, or `area` :param target: `node`, `way`, `relation`, or `area`
:param matcher: tag matcher of Röntgen scheme :param matcher: tag matcher of Map Machine scheme
:param prefix: tag prefix :param prefix: tag prefix
:param opacity: icon opacity :param opacity: icon opacity
:return: string representation of selector :return: string representation of selector

View file

@ -13,19 +13,19 @@ from svgwrite.container import Group
from svgwrite.path import Path as SVGPath from svgwrite.path import Path as SVGPath
from svgwrite.shapes import Rect from svgwrite.shapes import Rect
from roentgen.boundary_box import BoundaryBox from map_machine.boundary_box import BoundaryBox
from roentgen.constructor import Constructor from map_machine.constructor import Constructor
from roentgen.figure import Road, StyledFigure from map_machine.figure import Road, StyledFigure
from roentgen.flinger import Flinger from map_machine.flinger import Flinger
from roentgen.icon import ShapeExtractor from map_machine.icon import ShapeExtractor
from roentgen.map_configuration import LabelMode, MapConfiguration from map_machine.map_configuration import LabelMode, MapConfiguration
from roentgen.osm_getter import NetworkError, get_osm from map_machine.osm_getter import NetworkError, get_osm
from roentgen.osm_reader import OSMData, OSMNode, OSMReader, OverpassReader from map_machine.osm_reader import OSMData, OSMNode, OSMReader, OverpassReader
from roentgen.point import Occupied, Point from map_machine.point import Occupied, Point
from roentgen.road import Intersection, RoadPart from map_machine.road import Intersection, RoadPart
from roentgen.scheme import Scheme from map_machine.scheme import Scheme
from roentgen.ui import BuildingMode, progress_bar from map_machine.ui import BuildingMode, progress_bar
from roentgen.workspace import workspace from map_machine.workspace import workspace
__author__ = "Sergey Vartanov" __author__ = "Sergey Vartanov"
__email__ = "me@enzet.ru" __email__ = "me@enzet.ru"
@ -215,7 +215,7 @@ class Map:
def ui(options: argparse.Namespace) -> None: def ui(options: argparse.Namespace) -> None:
""" """
Röntgen entry point. Map Machine entry point.
:param options: command-line arguments :param options: command-line arguments
""" """

View file

@ -1,5 +1,5 @@
""" """
Moire markup extension for Röntgen. Moire markup extension for Map Machine.
""" """
import argparse import argparse
from abc import ABC from abc import ABC
@ -10,9 +10,9 @@ import yaml
from moire.default import Default, DefaultHTML, DefaultMarkdown, DefaultWiki from moire.default import Default, DefaultHTML, DefaultMarkdown, DefaultWiki
from moire.moire import Tag from moire.moire import Tag
from roentgen import ui from map_machine import ui
from roentgen.icon import ShapeExtractor from map_machine.icon import ShapeExtractor
from roentgen.workspace import workspace from map_machine.workspace import workspace
__author__ = "Sergey Vartanov" __author__ = "Sergey Vartanov"
__email__ = "me@enzet.ru" __email__ = "me@enzet.ru"
@ -143,9 +143,9 @@ test_configuration: TestConfiguration = TestConfiguration(
) )
class RoentgenMoire(Default, ABC): class MapMachineMoire(Default, ABC):
""" """
Moire extension stub for Röntgen. Moire extension stub for Map Machine.
""" """
def osm(self, args: Arguments) -> str: def osm(self, args: Arguments) -> str:
@ -212,7 +212,7 @@ class RoentgenMoire(Default, ABC):
return self.parse(args[0]) return self.parse(args[0])
class RoentgenHTML(RoentgenMoire, DefaultHTML): class MapMachineHTML(MapMachineMoire, DefaultHTML):
""" """
Simple HTML. Simple HTML.
""" """
@ -272,7 +272,7 @@ class RoentgenHTML(RoentgenMoire, DefaultHTML):
return f'<span class="formal">{self.parse(args[0])}</span>' return f'<span class="formal">{self.parse(args[0])}</span>'
class RoentgenOSMWiki(RoentgenMoire, DefaultWiki): class MapMachineOSMWiki(MapMachineMoire, DefaultWiki):
""" """
OpenStreetMap wiki. OpenStreetMap wiki.
@ -307,7 +307,7 @@ class RoentgenOSMWiki(RoentgenMoire, DefaultWiki):
return f"[[File:Röntgen {name}.svg|{size}px]]" return f"[[File:Röntgen {name}.svg|{size}px]]"
class RoentgenMarkdown(RoentgenMoire, DefaultMarkdown): class MapMachineMarkdown(MapMachineMoire, DefaultMarkdown):
""" """
GitHub flavored markdown. GitHub flavored markdown.
""" """
@ -335,3 +335,9 @@ class RoentgenMarkdown(RoentgenMoire, DefaultMarkdown):
def formal(self, args: Arguments) -> str: def formal(self, args: Arguments) -> str:
"""Formal variable.""" """Formal variable."""
return f"<{self.parse(args[0])}>" return f"<{self.parse(args[0])}>"
if __name__ == "__main__":
with Path("doc/readme.moi").open() as input_file:
with Path("README.md").open("w+") as output_file:
output_file.write(MapMachineMarkdown().convert(input_file.read()))

View file

@ -8,7 +8,7 @@ from pathlib import Path
import urllib3 import urllib3
from roentgen.boundary_box import BoundaryBox from map_machine.boundary_box import BoundaryBox
__author__ = "Sergey Vartanov" __author__ = "Sergey Vartanov"
__email__ = "me@enzet.ru" __email__ = "me@enzet.ru"

View file

@ -12,8 +12,8 @@ from xml.etree.ElementTree import Element
import numpy as np import numpy as np
from roentgen.boundary_box import BoundaryBox from map_machine.boundary_box import BoundaryBox
from roentgen.util import MinMax from map_machine.util import MinMax
__author__ = "Sergey Vartanov" __author__ = "Sergey Vartanov"
__email__ = "me@enzet.ru" __email__ = "me@enzet.ru"

View file

@ -7,10 +7,10 @@ import numpy as np
import svgwrite import svgwrite
from colour import Color from colour import Color
from roentgen.icon import Icon, IconSet from map_machine.icon import Icon, IconSet
from roentgen.map_configuration import LabelMode from map_machine.map_configuration import LabelMode
from roentgen.osm_reader import Tagged from map_machine.osm_reader import Tagged
from roentgen.text import Label from map_machine.text import Label
__author__ = "Sergey Vartanov" __author__ = "Sergey Vartanov"
__email__ = "me@enzet.ru" __email__ = "me@enzet.ru"

View file

@ -8,7 +8,7 @@ import numpy as np
import svgwrite import svgwrite
from svgwrite.path import Path from svgwrite.path import Path
from roentgen.vector import Line, compute_angle, norm, turn_by_angle from map_machine.vector import Line, compute_angle, norm, turn_by_angle
__author__ = "Sergey Vartanov" __author__ = "Sergey Vartanov"
__email__ = "me@enzet.ru" __email__ = "me@enzet.ru"

View file

@ -1,5 +1,5 @@
""" """
Röntgen drawing scheme. Map Machine drawing scheme.
""" """
import logging import logging
from dataclasses import dataclass from dataclasses import dataclass
@ -11,8 +11,8 @@ import numpy as np
import yaml import yaml
from colour import Color from colour import Color
from roentgen.direction import DirectionSet from map_machine.direction import DirectionSet
from roentgen.icon import ( from map_machine.icon import (
DEFAULT_COLOR, DEFAULT_COLOR,
DEFAULT_SHAPE_ID, DEFAULT_SHAPE_ID,
Icon, Icon,
@ -21,7 +21,7 @@ from roentgen.icon import (
ShapeExtractor, ShapeExtractor,
ShapeSpecification, ShapeSpecification,
) )
from roentgen.text import Label, get_address, get_text from map_machine.text import Label, get_address, get_text
__author__ = "Sergey Vartanov" __author__ = "Sergey Vartanov"
__email__ = "me@enzet.ru" __email__ = "me@enzet.ru"

View file

@ -1,5 +1,5 @@
""" """
Röntgen tile server for slippy maps. Map Machine tile server for slippy maps.
""" """
import argparse import argparse
import logging import logging
@ -9,8 +9,8 @@ from typing import Optional
import cairosvg import cairosvg
from roentgen.tile import Tile from map_machine.tile import Tile
from roentgen.workspace import workspace from map_machine.workspace import workspace
__author__ = "Sergey Vartanov" __author__ = "Sergey Vartanov"
__email__ = "me@enzet.ru" __email__ = "me@enzet.ru"

View file

@ -8,7 +8,7 @@ import logging
from datetime import datetime from datetime import datetime
from pathlib import Path from pathlib import Path
from roentgen import ( from map_machine import (
__author__, __author__,
__description__, __description__,
__doc_url__, __doc_url__,
@ -16,8 +16,8 @@ from roentgen import (
__project__, __project__,
__url__, __url__,
) )
from roentgen.scheme import Scheme from map_machine.scheme import Scheme
from roentgen.workspace import workspace from map_machine.workspace import workspace
class TaginfoProjectFile: class TaginfoProjectFile:
@ -37,7 +37,7 @@ class TaginfoProjectFile:
"description": __description__, "description": __description__,
"project_url": __url__, "project_url": __url__,
"doc_url": __doc_url__, "doc_url": __doc_url__,
"icon_url": "http://enzet.ru/roentgen/image/logo.png", "icon_url": "http://enzet.ru/map-machine/image/logo.png",
"contact_name": __author__, "contact_name": __author__,
"contact_email": __email__, "contact_email": __email__,
}, },
@ -66,7 +66,7 @@ class TaginfoProjectFile:
"value": value, "value": value,
"object_types": ["node", "area"], "object_types": ["node", "area"],
"description": "Rendered", "description": "Rendered",
"icon_url": "http://enzet.ru/roentgen/" "icon_url": "http://enzet.ru/map-machine/"
f"roentgen_icons_mapcss/{icon_id}.svg", f"roentgen_icons_mapcss/{icon_id}.svg",
} }
tags.append(tag) tags.append(tag)
@ -80,7 +80,7 @@ class TaginfoProjectFile:
def write_taginfo_project_file(scheme: Scheme) -> None: def write_taginfo_project_file(scheme: Scheme) -> None:
"""Write Taginfo JSON file.""" """Write Taginfo JSON file."""
out_file: Path = workspace.get_taginfo_file_path() out_file: Path = workspace.get_taginfo_file_path()
logging.info(f"Write Röntgen project file for Taginfo to {out_file}...") logging.info(f"Write Map Machine project file for Taginfo to {out_file}...")
taginfo_project_file: TaginfoProjectFile = TaginfoProjectFile( taginfo_project_file: TaginfoProjectFile = TaginfoProjectFile(
out_file, scheme out_file, scheme
) )

View file

@ -15,16 +15,16 @@ import numpy as np
import svgwrite import svgwrite
from PIL import Image from PIL import Image
from roentgen.boundary_box import BoundaryBox from map_machine.boundary_box import BoundaryBox
from roentgen.constructor import Constructor from map_machine.constructor import Constructor
from roentgen.flinger import Flinger from map_machine.flinger import Flinger
from roentgen.icon import ShapeExtractor from map_machine.icon import ShapeExtractor
from roentgen.map_configuration import MapConfiguration from map_machine.map_configuration import MapConfiguration
from roentgen.mapper import Map from map_machine.mapper import Map
from roentgen.osm_getter import NetworkError, get_osm from map_machine.osm_getter import NetworkError, get_osm
from roentgen.osm_reader import OSMData, OSMReader from map_machine.osm_reader import OSMData, OSMReader
from roentgen.scheme import Scheme from map_machine.scheme import Scheme
from roentgen.workspace import workspace from map_machine.workspace import workspace
__author__ = "Sergey Vartanov" __author__ = "Sergey Vartanov"
__email__ = "me@enzet.ru" __email__ = "me@enzet.ru"

View file

@ -4,9 +4,9 @@ Command-line user interface.
import argparse import argparse
import sys import sys
from roentgen import __version__ from map_machine import __version__
from roentgen.map_configuration import BuildingMode, DrawingMode, LabelMode from map_machine.map_configuration import BuildingMode, DrawingMode, LabelMode
from roentgen.osm_reader import STAGES_OF_DECAY from map_machine.osm_reader import STAGES_OF_DECAY
__author__ = "Sergey Vartanov" __author__ = "Sergey Vartanov"
__email__ = "me@enzet.ru" __email__ = "me@enzet.ru"
@ -16,15 +16,15 @@ BOXES_LENGTH: int = len(BOXES)
def parse_options(args: list[str]) -> argparse.Namespace: def parse_options(args: list[str]) -> argparse.Namespace:
"""Parse Röntgen command-line options.""" """Parse Map Machine command-line options."""
parser: argparse.ArgumentParser = argparse.ArgumentParser( parser: argparse.ArgumentParser = argparse.ArgumentParser(
description="Röntgen. OpenStreetMap renderer with custom icon set" description="Map Machine. OpenStreetMap renderer with custom icon set"
) )
parser.add_argument( parser.add_argument(
"-v", "-v",
"--version", "--version",
action="version", action="version",
version="Röntgen " + __version__, version="Map Machine " + __version__,
) )
subparser = parser.add_subparsers(dest="command") subparser = parser.add_subparsers(dest="command")

View file

@ -1,5 +1,5 @@
""" """
Röntgen utility file. Utility file.
""" """
from dataclasses import dataclass from dataclasses import dataclass
from typing import Any from typing import Any

View file

@ -39,7 +39,7 @@ class Workspace:
self._icons_by_id_path: Path = output_path / "icons_by_id" self._icons_by_id_path: Path = output_path / "icons_by_id"
self._icons_by_name_path: Path = output_path / "icons_by_name" self._icons_by_name_path: Path = output_path / "icons_by_name"
self._mapcss_path: Path = output_path / "roentgen_mapcss" self._mapcss_path: Path = output_path / "map_machine_mapcss"
self._tile_path: Path = output_path / "tiles" self._tile_path: Path = output_path / "tiles"
def get_icons_by_id_path(self) -> Path: def get_icons_by_id_path(self) -> Path:
@ -60,7 +60,7 @@ class Workspace:
def get_mapcss_file_path(self) -> Path: def get_mapcss_file_path(self) -> Path:
"""Directory for MapCSS files.""" """Directory for MapCSS files."""
return self.get_mapcss_path() / "roentgen.mapcss" return self.get_mapcss_path() / "map_machine.mapcss"
def get_mapcss_icons_path(self) -> Path: def get_mapcss_icons_path(self) -> Path:
"""Directory for icons used by MapCSS file.""" """Directory for icons used by MapCSS file."""
@ -74,7 +74,7 @@ class Workspace:
def get_taginfo_file_path(self) -> Path: def get_taginfo_file_path(self) -> Path:
"""Path to file with project information for Taginfo.""" """Path to file with project information for Taginfo."""
return self.output_path / "roentgen_taginfo.json" return self.output_path / "map_machine_taginfo.json"
workspace = Workspace(Path("out")) workspace = Workspace(Path("out"))

View file

@ -1,7 +0,0 @@
"""
Röntgen entry point.
"""
from roentgen.main import main
if __name__ == "__main__":
main()

View file

@ -1,10 +1,10 @@
""" """
Röntgen project dynamic metadata. Map Machine project dynamic metadata.
""" """
from pathlib import Path from pathlib import Path
from setuptools import setup from setuptools import setup
from roentgen import ( from map_machine import (
__author__, __author__,
__description__, __description__,
__doc_url__, __doc_url__,
@ -17,9 +17,9 @@ with Path("README.md").open() as input_file:
long_description: str = input_file.read() long_description: str = input_file.read()
setup( setup(
name="roentgen-map", name="map-machine",
version=__version__, version=__version__,
packages=["roentgen"], packages=["map_machine"],
url=__url__, url=__url__,
project_urls={ project_urls={
"Bug Tracker": f"{__url__}/issues", "Bug Tracker": f"{__url__}/issues",
@ -33,16 +33,16 @@ setup(
author=__author__, author=__author__,
author_email=__email__, author_email=__email__,
description=__description__, description=__description__,
long_description="Röntgen is a Python OpenStreetMap renderer and tile " long_description="Map Machine is a Python OpenStreetMap renderer and tile "
"generator with a custom set of CC-BY 4.0 icons aimed to display as many " "generator with a custom set of CC-BY 4.0 icons aimed to display as many "
"map features as possible.\n\n" "map features as possible.\n\n"
f"See [full documentation]({__doc_url__}).", f"See [full documentation]({__doc_url__}).",
long_description_content_type="text/markdown", long_description_content_type="text/markdown",
entry_points={ entry_points={
"console_scripts": ["roentgen=roentgen.main:main"], "console_scripts": ["map-machine=map_machine.main:main"],
}, },
package_data={ package_data={
"roentgen": [ "map_machine": [
"icons/icons.svg", "icons/icons.svg",
"icons/config.json", "icons/config.json",
"icons/LICENSE", "icons/LICENSE",

View file

@ -1,11 +1,11 @@
""" """
Tests for Röntgen project. Tests for Map Machine project.
""" """
from pathlib import Path from pathlib import Path
from roentgen.icon import ShapeExtractor from map_machine.icon import ShapeExtractor
from roentgen.scheme import Scheme from map_machine.scheme import Scheme
from roentgen.workspace import Workspace from map_machine.workspace import Workspace
__author__ = "Sergey Vartanov" __author__ = "Sergey Vartanov"
__email__ = "me@enzet.ru" __email__ = "me@enzet.ru"

View file

@ -1,7 +1,7 @@
""" """
Test boundary box. Test boundary box.
""" """
from roentgen.boundary_box import BoundaryBox from map_machine.boundary_box import BoundaryBox
__author__ = "Sergey Vartanov" __author__ = "Sergey Vartanov"
__email__ = "me@enzet.ru" __email__ = "me@enzet.ru"

View file

@ -3,8 +3,8 @@ Test color functions.
""" """
from colour import Color from colour import Color
from roentgen.color import get_gradient_color, is_bright from map_machine.color import get_gradient_color, is_bright
from roentgen.util import MinMax from map_machine.util import MinMax
__author__ = "Sergey Vartanov" __author__ = "Sergey Vartanov"
__email__ = "me@enzet.ru" __email__ = "me@enzet.ru"

View file

@ -3,7 +3,7 @@ Test direction processing.
""" """
import numpy as np import numpy as np
from roentgen.direction import DirectionSet, parse_vector from map_machine.direction import DirectionSet, parse_vector
__author__ = "Sergey Vartanov" __author__ = "Sergey Vartanov"
__email__ = "me@enzet.ru" __email__ = "me@enzet.ru"

View file

@ -3,7 +3,10 @@ Test coordinates computation.
""" """
import numpy as np import numpy as np
from roentgen.flinger import osm_zoom_level_to_pixels_per_meter, pseudo_mercator from map_machine.flinger import (
osm_zoom_level_to_pixels_per_meter,
pseudo_mercator,
)
__author__ = "Sergey Vartanov" __author__ = "Sergey Vartanov"
__email__ = "me@enzet.ru" __email__ = "me@enzet.ru"

View file

@ -3,8 +3,8 @@ Test icon generation for nodes.
""" """
import pytest import pytest
from roentgen.grid import IconCollection from map_machine.grid import IconCollection
from roentgen.icon import IconSet from map_machine.icon import IconSet
from tests import SCHEME, SHAPE_EXTRACTOR, workspace from tests import SCHEME, SHAPE_EXTRACTOR, workspace
__author__ = "Sergey Vartanov" __author__ = "Sergey Vartanov"

View file

@ -1,7 +1,7 @@
""" """
Test label generation for nodes. Test label generation for nodes.
""" """
from roentgen.text import Label from map_machine.text import Label
from tests import SCHEME from tests import SCHEME
__author__ = "Sergey Vartanov" __author__ = "Sergey Vartanov"

View file

@ -1,8 +1,8 @@
""" """
Test MapCSS generation. Test MapCSS generation.
""" """
from roentgen.mapcss import MapCSSWriter from map_machine.mapcss import MapCSSWriter
from roentgen.scheme import NodeMatcher from map_machine.scheme import NodeMatcher
from tests import SCHEME from tests import SCHEME
__author__ = "Sergey Vartanov" __author__ = "Sergey Vartanov"

View file

@ -3,7 +3,13 @@ Test OSM XML parsing.
""" """
import numpy as np import numpy as np
from roentgen.osm_reader import OSMNode, OSMReader, OSMRelation, OSMWay, OSMData from map_machine.osm_reader import (
OSMNode,
OSMReader,
OSMRelation,
OSMWay,
OSMData,
)
__author__ = "Sergey Vartanov" __author__ = "Sergey Vartanov"
__email__ = "me@enzet.ru" __email__ = "me@enzet.ru"

View file

@ -3,7 +3,7 @@ Tests for length tag parsing.
""" """
from typing import Optional from typing import Optional
from roentgen.osm_reader import Tagged from map_machine.osm_reader import Tagged
__author__ = "Sergey Vartanov" __author__ = "Sergey Vartanov"
__email__ = "me@enzet.ru" __email__ = "me@enzet.ru"

View file

@ -1,7 +1,7 @@
""" """
Test text generation. Test text generation.
""" """
from roentgen.text import format_voltage from map_machine.text import format_voltage
__author__ = "Sergey Vartanov" __author__ = "Sergey Vartanov"
__email__ = "me@enzet.ru" __email__ = "me@enzet.ru"

View file

@ -3,7 +3,7 @@ Test vector operations.
""" """
import numpy as np import numpy as np
from roentgen.vector import compute_angle, turn_by_angle from map_machine.vector import compute_angle, turn_by_angle
__author__ = "Sergey Vartanov" __author__ = "Sergey Vartanov"
__email__ = "me@enzet.ru" __email__ = "me@enzet.ru"

View file

@ -1,7 +1,7 @@
""" """
Test zoom level specification parsing. Test zoom level specification parsing.
""" """
from roentgen.tile import ScaleConfigurationException, parse_zoom_level from map_machine.tile import ScaleConfigurationException, parse_zoom_level
def test_zoom_level_1() -> None: def test_zoom_level_1() -> None: