[HN Gopher] Prettymaps: Small Python library to draw customized ... ___________________________________________________________________ Prettymaps: Small Python library to draw customized maps from OpenStreetMap data Author : sebg Score : 674 points Date : 2021-08-25 12:48 UTC (10 hours ago) (HTM) web link (github.com) (TXT) w3m dump (github.com) | pgroves wrote: | Looks 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. 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. | TekMol wrote: | Install 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? | myidealab wrote: | Were you able to run the 2nd cell in Google Colab? I get the | following error: FileNotFoundError: [Errno 2] | No such file or directory: '/usr/local/lib/python3.7/dist- | packages/numpy-1.19.5.dist-info/METADATA' | sails wrote: | Need to restart the runtime. | | Runtime > Restart Runtime | myidealab wrote: | Thanks for the suggestion. In addition to restarting the | runtime, I installed numpy independently: | !pip install 'numpy>=1.3.0,<2.0.0' --force-reinstall | | Now the maps work! | TekMol wrote: | No idea. As soon as I click on something in that Colab thing, | it tells me to make a Google account. | nightpool wrote: | Probably because it requires an unreleased HEAD version instead | of something from PyPi? | TekMol wrote: | Isn'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? | [deleted] | marbu wrote: | Yes, 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 wrote: | So 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? | TekMol wrote: | the author just decided to note it in a readme file | instead to avoid the need to clone his repository | manually | | Isn't it the other way round? Because the dependency is | noted in the readme, one has to clone his repo manually? | | If it was in the setup.py, one could just run setup.py | and everything would be set up. | martinky24 wrote: | For some reason it was commented out, and the author didn't say | why: | | https://github.com/marceloprates/prettymaps/commit/c8b1f3f13... | nathancahill wrote: | Beautiful. 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 wrote: | There are tools to do that sort of feature generalization. | https://github.com/migurski/Skeletron is one that comes to | mind. | bhelkey wrote: | I love the look of this! I don't think I have a use case for this | library but it looks fun to play with. | pasabagi wrote: | This is great! I played around a bit with openstreetmap data a | month ago, and I couldn't find anything so straightforward. | twoslide wrote: | Beautiful, different from what I've seen with other OSM data. | Dying to be made into a web app | willsewell wrote: | This 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 | | [1] | https://wiki.openstreetmap.org/wiki/Tag:natural%3Dcoastline#... | | [2] https://www.openstreetmap.org/#map=15/22.0330/88.8819 | | [3] https://leetcode.com/discuss/general- | discussion/1104642/im-s... | dabreegster wrote: | Especially 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 has some examples of "flooded" maps | when the heuristics get the inversion wrong. | https://github.com/a-b-street/abstreet/blob/9761373c4b215485... | is my incomplete attempt to deal with these partial | multipolygons. | simon04 wrote: | You might want to look into OSMCoastline, a separate piece of | software written specifically to make the coastline usable for | renders: https://osmcode.org/osmcoastline/ | mistrial9 wrote: | make a constant water layer as a seperate process; this is a | known pain point, land-use / land cover has some similar | challenges | lifeisstillgood wrote: | Knowledge, 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. ;-) | TheRealNGenius wrote: | Looks absolutely beautiful | skocznymroczny wrote: | Porto Alegre map reminds me of GTA: San Andreas map | hasmanean wrote: | I'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] | avnigo wrote: | I 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. | cabalamat wrote: | > 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] | ahmedbaracat wrote: | Came here to just say that they are super beautiful. Amazing | color palettes and styles. | mistrial9 wrote: | python matplotlib lives another day | kzrdude wrote: | Every day with seaborn | bfung wrote: | Tangential but curious - was there discussions to replace | matplotlib with something else? | jimjimjimjim wrote: | Have 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 | mtmail wrote: | https://www.mapify.cc/ , | https://mapisart.com/products/personalized-map-framed and | there's a couple of other such services. | adamhp wrote: | Not only cool, but easy to monetize 8-) | maddimini wrote: | There are _plenty_ of such services, e.g., | https://www.mapiful.com | ryantgtg wrote: | I looked into making a site like this a couple years ago, but | yeah the market already seemed saturated. | switch007 wrote: | If 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! | lloydatkinson wrote: | Running 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 wrote: | Looks like you need to load matplotlib with | | import matplotlib.pyplot as plt | smnrchrds wrote: | Semi-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-explor... | wiredfool wrote: | Pretty sure it's d3 of one form or another. | smnrchrds wrote: | D3 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 wrote: | https://github.com/owid/owid-grapher | qwertox wrote: | They 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.... | swah wrote: | Dev is here: https://twitter.com/marceloprates_ | zwieback wrote: | Gorgeous! I've been wanting an artistic map of Portland will | unleash this lib on OSM data. | protonpopsicle wrote: | really lovely work | vavooom wrote: | Very impressive. Considerable competitor to some of the mapping | programs available in GGPlot. | pjot wrote: | Osmnx[0] is is one of the most interesting and academically | complete packages I've come across! | | [0]: https://github.com/gboeing/osmnx | metalliqaz wrote: | Those are handsome results. Cool project! | NelsonMinar wrote: | It'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. | Freak_NL wrote: | The 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 wrote: | That contributes massively to readability. | humanistbot wrote: | Is 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 wrote: | Are you rendering a large area? OSM data can be big... | ssss999 wrote: | 908 | agencies wrote: | Does 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 wrote: | OSMs source of truth is not organized around vector tiles, i | believe. https://github.com/dfyz/osm-renderer might be similar | to what you are looking for | mistrial9 wrote: | if you think postgres is challenging, try mapnik directly! | mtmail wrote: | 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 | qwertox wrote: | The 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 ___________________________________________________________________ (page generated 2021-08-25 23:00 UTC)