A minimal Python library to draw customized maps from OpenStreetMap created using the osmnx, matplotlib, shapely and vsketch libraries.
 
 
Go to file
Marcelo Prates 4a9e2ac7df Changed license and README 2021-10-18 13:15:29 -03:00
.devcontainer Add devcontainer 2021-08-26 17:14:27 +00:00
.github ci: Add publishing workflow with GitHub Actions 2021-10-05 08:43:07 -05:00
assets/Permanent_Marker Updated 'setup cell' to avoid errors with missing .ttf and /prints folder for colab notebook 2021-08-25 22:46:27 -03:00
docs Added docs 2021-09-13 16:22:00 -03:00
etc Changed license and README 2021-10-18 13:15:29 -03:00
notebooks Added missing imports for examples notebook 2021-09-13 17:52:22 -03:00
prettymaps Changed license and README 2021-10-18 13:15:29 -03:00
prints Style updates to the last two cells of examples notebook 2021-08-29 17:01:55 -03:00
script Add devcontainer 2021-08-26 17:14:27 +00:00
.gitignore Add devcontainer 2021-08-26 17:14:27 +00:00
LICENSE Changed license and README 2021-10-18 13:15:29 -03:00
MANIFEST.in build: Add MANIFEST.in with prune strategy 2021-10-03 16:13:27 -05:00
README.md Changed license and README 2021-10-18 13:15:29 -03:00
readthedocs.yml Added readthedocs.yml 2021-09-13 16:29:19 -03:00
requirements.txt Removed IPython dependency 2021-10-01 18:09:32 -03:00
setup.py Updated release version 2021-10-06 11:18:44 -03:00

README.md

prettymaps

A minimal Python library to draw customized maps from OpenStreetMap created using the osmnx, matplotlib, shapely and vsketch libraries.

This work is licensed under a GNU Affero General Public License v3.0:

  • You can make commercial use, distribute and modificate this project, but must disclose the source code with the license and copyright notice.

Note about NFTs:

  • I am personally against NFTs for their environmental impact, the fact that they're a giant money-laundering pyramid scheme and the structural incentives they create for theft in the open source and generative art communities.
  • I do not authorize in any way this project to be used for selling NFTs, although I have no legal way of enforcing my intent. Respect the creator.
  • The AeternaCivitas and geoartnft projects have used this work to sell NFTs and refused to credit it. See how they reacted after being exposed: AeternaCivitas, geoartnft.
  • I have closed my other generative art projects on Github and won't be sharing new ones as open source to protect me from the NFT community.

Note about crediting:

  • Please keep the printed message on the figures crediting OpenStreetMap and my repository (The OSM credit is mandatory by their license).
  • CREDIT OPEN SOURCE DEVELOPERS!

Buy Me a Coffee at ko-fi.com

As seen on Hacker News:

Read the docs

prettymaps subreddit

Google Colaboratory Demo

Installation

Install with

$ pip install prettymaps

Usage example (For more examples, see this Jupyter Notebook):

# Init matplotlib figure
fig, ax = plt.subplots(figsize = (12, 12), constrained_layout = True)

backup = plot(
    # Address:
    'Praça Ferreira do Amaral, Macau',
    # Plot geometries in a circle of radius:
    radius = 1100,
    # Matplotlib axis
    ax = ax,
    # Which OpenStreetMap layers to plot and their parameters:
    layers = {
            # Perimeter (in this case, a circle)
            'perimeter': {},
            # Streets and their widths
            'streets': {
                'width': {
                    'motorway': 5,
                    'trunk': 5,
                    'primary': 4.5,
                    'secondary': 4,
                    'tertiary': 3.5,
                    'residential': 3,
                    'service': 2,
                    'unclassified': 2,
                    'pedestrian': 2,
                    'footway': 1,
                }
            },
            # Other layers:
            #   Specify a name (for example, 'building') and which OpenStreetMap tags to fetch
            'building': {'tags': {'building': True, 'landuse': 'construction'}, 'union': False},
            'water': {'tags': {'natural': ['water', 'bay']}},
            'green': {'tags': {'landuse': 'grass', 'natural': ['island', 'wood'], 'leisure': 'park'}},
            'forest': {'tags': {'landuse': 'forest'}},
            'parking': {'tags': {'amenity': 'parking', 'highway': 'pedestrian', 'man_made': 'pier'}}
        },
        # drawing_kwargs:
        #   Reference a name previously defined in the 'layers' argument and specify matplotlib parameters to draw it
        drawing_kwargs = {
            'background': {'fc': '#F2F4CB', 'ec': '#dadbc1', 'hatch': 'ooo...', 'zorder': -1},
            'perimeter': {'fc': '#F2F4CB', 'ec': '#dadbc1', 'lw': 0, 'hatch': 'ooo...',  'zorder': 0},
            'green': {'fc': '#D0F1BF', 'ec': '#2F3737', 'lw': 1, 'zorder': 1},
            'forest': {'fc': '#64B96A', 'ec': '#2F3737', 'lw': 1, 'zorder': 1},
            'water': {'fc': '#a1e3ff', 'ec': '#2F3737', 'hatch': 'ooo...', 'hatch_c': '#85c9e6', 'lw': 1, 'zorder': 2},
            'parking': {'fc': '#F2F4CB', 'ec': '#2F3737', 'lw': 1, 'zorder': 3},
            'streets': {'fc': '#2F3737', 'ec': '#475657', 'alpha': 1, 'lw': 0, 'zorder': 3},
            'building': {'palette': ['#FFC857', '#E9724C', '#C5283D'], 'ec': '#2F3737', 'lw': .5, 'zorder': 4},
        }
)

Barcelona:

Heerhugowaard:

Barra da Tijuca:

Porto Alegre: