9 ms·
Prettymaps: Small Python library to draw customized maps from OpenStreetMap data
- Freak_NL 5y agoThe option of not just setting a fixed colour for certain features (like a building), but supplying a palette of colours for the renderer to randomly use is interesting. It makes the output playful. I don't think I've seen that feature before in OpenStreetMap renderers.
- anigbrowl 5y agoThat contributes massively to readability.
- jimjimjimjim 5y agoHave you thought about building a site where users could order framed posters of any address they like using the output of this library? I think that would be cool
- switch007 5y agoIf they haven’t, I’m sure about 5 MVPs will be online by the end of the week thanks to this comment. It definitely looks like art!
- adamhp 5y agoNot only cool, but easy to monetize 8-)
- maddimini 5y agoThere are plenty of such services, e.g., https://www.mapiful.com https://www.mapiful.com
- ryantgtg 5y agoI looked into making a site like this a couple years ago, but yeah the market already seemed saturated.
- mtmail 5y agohttps://www.mapify.cc/ https://www.mapify.cc/ , https://mapisart.com/products/personalized-map-framed https://mapisart.com/products/personalized-map-framed and there's a couple of other such services.
- amcaskill 5y agoI would buy one. These are gorgeous.
- lloydatkinson 5y agoRunning it in the Google colab thing (whatever that is) results in: fig, ax = plt.subplots(figsize = (12, 12), constrained_layout = True) fig is not defined
- petschge 5y agoLooks like you need to load matplotlib with import matplotlib.pyplot as plt
- TekMol 5y agoInstall with pip install git+https://github.com/abey79/vsketch#egg=vsketch pip install git+https://github.com/marceloprates/prettymaps.git If prettymaps needs vsketch, why does it not put it into its setup.py?
- martinky24 5y agoFor some reason it was commented out, and the author didn't say why: https://github.com/marceloprates/prettymaps/commit/c8b1f3f135c7a4995c7ba8c5ebdca2fbae237c1a https://github.com/marceloprates/prettymaps/commit/c8b1f3f13...
- nightpool 5y agoProbably because it requires an unreleased HEAD version instead of something from PyPi?
- TekMol 5y agoIsn't setup.py a normal python script? Can't they put the same line they have in the description ... pip install git+https://github.com/abey79/vsketch#egg=vsketch ... into setup.py instead?
- marbu 5y agoYes, but it's not a good practice to specify full git url in setup.py, where I would expect to have sheer module name and version constraints if necessary. There is a convention about overriding requirements from setup.py via requirements.txt file, but here the author just decided to note it in a readme file instead to avoid the need to clone his repository manually.
- newman314 5y agoSo I don't do too much with Python but is it accepted practice now to use Pipfile or do most folks still use requirements.txt and/or setup.py?
- pasabagi 5y agoThis is great! I played around a bit with openstreetmap data a month ago, and I couldn't find anything so straightforward.
- hasmanean 5y agoI’d love to see hand drawn thematic maps (similar to amusement park maps) for specific regions. Maybe a marketplace for such maps would allow artists to document their cities/neighborhoods.
- deleted 5y ago[deleted]
- avnigo 5y agoI don't know what I was expecting, but those really are pretty maps! I was hoping for some more documentation apart from the usage examples, although those are much appreciated too.
- ahmedbaracat 5y agoCame here to just say that they are super beautiful. Amazing color palettes and styles.
- cabalamat 5y ago> I was hoping for some more documentation Agreed. This is a good library but it is let down by lack of documentation. Reading the source doesn't help, e.g. this is "explaining" the parameters in the plot function: # Whether to use a backup for the layers backup = None, # Custom postprocessing function on layers postprocessing = None, # Radius (in case of circular plot) radius = None, These sorts of comments merely repeat what's in the code and are worse than useless.
- deleted 5y ago[deleted]
- mistrial9 5y agopython matplotlib lives another day
- kzrdude 5y agoEvery day with seaborn
- bfung 5y agoTangential but curious - was there discussions to replace matplotlib with something else?
- K5EiS 5y agoI don't know about a discussion, but i know a lot of people are moving to plotly [1] or seaborn [2] as they are prettier and more intuitive. 1: https://plotly.com/python/ https://plotly.com/python/ 2: https://seaborn.pydata.org/ https://seaborn.pydata.org/
- sireat 5y agoPlotly is a fantastic library if you want interactive graphs/visualizations. It has good documentation and support. It fits my definition of easy to do simple things and possible to do hard things. You can also easily move your graphs to front-end since Plotly Python is basically binding to plotly.js . The downside is exactly that - there is javascript underneath. Seaborn is good if you want something pretty and static with matplotlib underneath but do not want to mess with defaults too much.
- metalliqaz 5y agoThose are handsome results. Cool project!
- humanistbot 5y agoIs this supposed to take 3-5 minutes each to generate a single map? Because that is what I'm seeing in the colab notebook.
- kingofpandora 5y agoAre you rendering a large area? OSM data can be big...
- zwieback 5y agoGorgeous! I've been wanting an artistic map of Portland will unleash this lib on OSM data.
- protonpopsicle 5y agoreally lovely work
- smnrchrds 5y agoSemi-related question: what do you use for map visualizations like those on Our World in Data. The maps there are well-designed, with mouseover and colourization based on values. Eg: https://ourworldindata.org/explorers/coronavirus-data-explorer?tab=map&zoomToSelection=true&facet=none&pickerSort=asc&pickerMetric=location&Metric=Confirmed+cases&Interval=7-day+rolling+average&Relative+to+Population=true&Align+outbreaks=false&country=USA~GBR~CAN~DEU~ITA~IND https://ourworldindata.org/explorers/coronavirus-data-explor...
- wiredfool 5y agoPretty sure it's d3 of one form or another.
- smnrchrds 5y agoD3 is pretty low level. I am sure the more high-level user-friendly stuff use if under the hood, but I don't know where to find them.
- maxerickson 5y agohttps://github.com/owid/owid-grapher https://github.com/owid/owid-grapher
- smnrchrds 5y agoI was hoping for a more generic version. As they say in the repo, "The Grapher is currently not well designed for immediate reuse as a standalone visualization library, it relies heavily on our database structure".
- NelsonMinar 5y agoIt's fun to see a fresh new take on how to draw maps in Python. I'm still mired in 10 year old concepts from when this stuff was much harder. This project just looks joyful.
- agencies 5y agoDoes anyone have a simple way to make rendered images from osm data? Usually it involves postgres, but I wish there was a renderer that could use the vector tiles directly...
- nielsole 5y agoOSMs source of truth is not organized around vector tiles, i believe. https://github.com/dfyz/osm-renderer https://github.com/dfyz/osm-renderer might be similar to what you are looking for
- mtmail 5y agohttps://github.com/systemed/tilemaker https://github.com/systemed/tilemaker can generate vector tiles directly from *.osm.pbf files. Then serve the vector tiles with leaflet+mapbox-gl-leaflet, mapbox gl js, openlayers 3 or similar. https://github.com/mapbox/awesome-vector-tiles https://github.com/mapbox/awesome-vector-tiles
- qwertox 5y agoThe simplest is to fetch the OSM tiles directly (and cache them!) imgurl = "https://a.tile.openstreetmap.org/{0}/{1}/{2}.png".format(zoom, xtile, ytile) the tricky part is to known which xtile, ytile to fetch, but Stack Overflow has the answer [1]. Then you can draw over them with `PIL` and also `cairo`, in order to lay SVG shapes onto the map. Cairo is somewhat hard to grasp, because it is outdated, but it draws perfectly smooth lines. [1] https://stackoverflow.com/a/28530369 https://stackoverflow.com/a/28530369
- mistrial9 5y agoif you think postgres is challenging, try mapnik directly!
- nathancahill 5y agoBeautiful. I wish there was a way to simplify OSM roads. For example, southbound/northbound highways are correctly stored as separate roads in OSM. But to draw an atlas, it's often enough to show the single highway.
- maxerickson 5y agoThere are tools to do that sort of feature generalization. https://github.com/migurski/Skeletron https://github.com/migurski/Skeletron is one that comes to mind.
- lifeisstillgood 5y agoKnowledge, and capability are like the surface of a balloon. Each day the balloon is expanded and it is only after a while you realise how far away from the surface point you are on, all the other surface points have reached. I mean i toyed with python and maps back in the day, and my intuition for how good looking you could make one of these is completely off. This stuff is amazing. I think I want there to be a professional software "continuing-education" [#] service. A course I do each 6 months that just gets me to run something for an hour (from astronomy to 3d-printing). I know i could do it myself but the 10 -20 hours spent on each install wasted though bad configs seems something I would happily pay to avoid. [#] Not a "re-education" camp. Although I know few devs I could send to one if someone provides seed funding. ;-)
- killingtime74 5y agoHacker news is the continuing education service
- swah 5y agoDev is here: https://twitter.com/marceloprates_ https://twitter.com/marceloprates_
- skocznymroczny 5y agoPorto Alegre map reminds me of GTA: San Andreas map
- twoslide 5y agoBeautiful, different from what I've seen with other OSM data. Dying to be made into a web app
- qwertox 5y agoThey are really beautiful. I wonder how hard it would be to draw them in xkcd sketch-style. https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.xkcd.html https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot....
- willsewell 5y agoThis are beautiful. I had a go at doing roughly the same thing a couple of years ago [0]. It was mostly straightforward, but the part I really struggled with were rendering the sea. The encoding of OSM coastline is quite quirky [1]. When the edge of the rendering intersects with the coastline it's very tricky to compute which side of a coastline is sea and which is land. As an example - how would you render this [2]? I wasn't sure how I could solve this, so I wrote up a more abstract formulation of the problem here [3], and asked for help. I think the proposed solution make sense, but I think I would have to implement it by rendering individual pixels and wouldn't be able to lean on a higher level graphics library. I'm looking forward to seeing how the author solved this problem. [0] https://twitter.com/willsewell_/status/1172523752699113473 https://twitter.com/willsewell_/status/1172523752699113473 [1] https://wiki.openstreetmap.org/wiki/Tag:natural%3Dcoastline#How_to_enter_the_data https://wiki.openstreetmap.org/wiki/Tag:natural%3Dcoastline#... [2] https://www.openstreetmap.org/#map=15/22.0330/88.8819 https://www.openstreetmap.org/#map=15/22.0330/88.8819 [3] https://leetcode.com/discuss/general-discussion/1104642/im-stuck-on-a-real-world-gis-problem-can-anyone-help https://leetcode.com/discuss/general-discussion/1104642/im-s...
- dabreegster 5y agoEspecially if you're trying to clip your entire map to some boundary, rendering the ocean is hard. https://github.com/a-b-street/abstreet/issues/32 https://github.com/a-b-street/abstreet/issues/32 has some examples of "flooded" maps when the heuristics get the inversion wrong. https://github.com/a-b-street/abstreet/blob/9761373c4b21548503f26872068cfd078819e2be/convert_osm/src/osm_geom.rs#L28 https://github.com/a-b-street/abstreet/blob/9761373c4b215485... is my incomplete attempt to deal with these partial multipolygons.
- kqr 5y agoPotentially dumb suggestion: what if one just declares anything that has a significant chunk of non-bridge or non-tunnel street on it land? It's not a universal solution but perhaps sufficient for the application?
- 5y ago
- pgroves 5y agoLooks really nice. The big blob of parameters in the kwargs looks pretty intimidating to get correct. Maybe consider a builder object for the config: https://en.wikipedia.org/wiki/Builder_pattern https://en.wikipedia.org/wiki/Builder_pattern. It would probably be easier to document, too (document the setter methods of the Builder rather than try to explain the nested dict). Feel free to ignore me.
- vavooom 5y agoVery impressive. Considerable competitor to some of the mapping programs available in GGPlot.
- pjot 5y agoOsmnx[0] is is one of the most interesting and academically complete packages I’ve come across! [0]: https://github.com/gboeing/osmnx https://github.com/gboeing/osmnx
- ssss999 5y ago٩٠٨
- bhelkey 5y agoI love the look of this! I don't think I have a use case for this library but it looks fun to play with.
- TheRealNGenius 5y agoLooks absolutely beautiful
- mdoms 5y agoAdd these imports to the top of the readme example to make it work. For the life of me I don't understand people who strip imports out of code examples. import matplotlib.pyplot as plt from prettymaps import plot Also use this at the end to save your map. plt.savefig('my-map.png')
- SundaySetUp 5y agoThanks so much for this. I didn't have a scooby.
- donalhunt 5y ago"Attribution required" See https://www.openstreetmap.org/copyright https://www.openstreetmap.org/copyright
- jfoucher 5y agoDoesn’t “from openstreetmap data” count as attribution ?