# prettymaps A minimal Python library to draw customized maps from [OpenStreetMap](https://www.openstreetmap.org/#map=12/11.0733/106.3078) created using the [osmnx](https://github.com/gboeing/osmnx), [matplotlib](https://matplotlib.org/), [shapely](https://shapely.readthedocs.io/en/stable/index.html) and [vsketch](https://github.com/abey79/vsketch) libraries. This work is [licensed](LICENSE) under a GNU Affero General Public License v3.0 (you can make commercial use, distribute and modify this project, but must **disclose** the source code with the license and copyright notice) ## Note about crediting and NFTs: - Please keep the printed message on the figures crediting my repository and OpenStreetMap ([mandatory by their license](https://www.openstreetmap.org/copyright)). - I am personally **against** NFTs for their [environmental impact](https://earth.org/nfts-environmental-impact/), the fact that they're a [giant money-laundering pyramid scheme](https://twitter.com/smdiehl/status/1445795667826208770) and the structural incentives they create for [theft](https://twitter.com/NFTtheft) 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 cannot legally enforce it. **Respect the creator**. - The [AeternaCivitas](https://twitter.com/AeternaCivitas) and [geoartnft](twitter.com/geoartnft) projects have used this work to sell NFTs and refused to credit it. See how they reacted after being exposed: [AeternaCivitas](etc/NFT_theft_AeternaCivitas.jpg), [geoartnft](etc/NFT_theft_geoart.jpg). - **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**. Buy Me a Coffee at ko-fi.com ## As seen on [Hacker News](https://web.archive.org/web/20210825160918/https://news.ycombinator.com/news): ![](prints/hackernews-prettymaps.png) ## Read the [docs](https://prettymaps.readthedocs.io/en/latest/prettymaps.html#module-prettymaps) ## [prettymaps subreddit](https://www.reddit.com/r/prettymaps_/) ## [Google Colaboratory Demo](https://colab.research.google.com/github/marceloprates/prettymaps/blob/master/notebooks/examples.ipynb) ## Installation Install with ``` $ pip install prettymaps ``` ## Usage example (For more examples, see [this Jupyter Notebook](https://nbviewer.jupyter.org/github/marceloprates/prettymaps/blob/main/notebooks/examples.ipynb)): ```python # 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}, } ) ``` ![](prints/macao.png) ## Gallery: ### Barcelona: ![](prints/barcelona.png) ### Heerhugowaard: ![](prints/heerhugowaard.png) ### Barra da Tijuca: ![](prints/tijuca.png) ### Porto Alegre: ![](prints/bomfim-farroupilha-cidadebaixa.png)