[HN Gopher] Reimagining projections for the interactive maps era ___________________________________________________________________ Reimagining projections for the interactive maps era Author : mourner Score : 232 points Date : 2021-12-13 15:47 UTC (7 hours ago) (HTM) web link (www.mapbox.com) (TXT) w3m dump (www.mapbox.com) | ordx wrote: | Really hope that this will be added to OSS fork of Mapbox [1] | | [1] https://github.com/maplibre/maplibre-gl-js | CGamesPlay wrote: | I don't see anything about what I would have expected to be the | obvious choice, so I'll ask. Why not perspective projection for | all zoom levels? This involves rendering a sphere at the lowest | zoom levels, but I can't imagine why it would cause problems at | high zoom levels (and the sphere is the "correct" rendering in | any case). | kzrdude wrote: | I think this would be by far the most intuitive, and less | jarring, so it's a very good point. Show a globe on the world | scale and fade over (unnoticeably) to an angle preserving | projection when viewing city level. | [deleted] | mourner wrote: | While we have that feature coming too, in short, there are many | cases where we want to see the whole world at once. Expanded on | this in a comment earlier: | https://news.ycombinator.com/item?id=29541230 | jacobolus wrote: | A perspective projection (or an orthographic projection) is | just one specific choice of projection, and for any particular | use case it falls somewhere between suboptimal and entirely | unsuitable. | | Its one advantage is that it demonstrates that the map is a | picture of a spherical earth, but it shows only one hemisphere | or less, and is heavily distorted away from the center | rspoerri wrote: | Maybe check out Mia's Worldmapgenerator: | | https://www.worldmapgenerator.com/ | | The first version of this project is from 2013, this version is | afaik from 2017 and covers this topic the best way i've seen. | chpatrick wrote: | This is cool but if we're not bound to static paper maps isn't | the ultimate adaptive projection an interactive 3D perspective | rendering of the globe? I suppose the downside is that you can't | see both hemispheres at the same time. | | Then we can use our built-in spatial reasoning to compare how big | some areas are by changing the perspective (as in real life), and | shapes are only distorted by perspective which is very familiar. | nielsbot wrote: | I feel like this is what the latest Apple Maps update does? | Even the "2D" maps are actually 3D when you zoom out. | mourner wrote: | Yes, exactly! Globe view doesn't work when you want to show the | whole world at once, which is useful for climate | visualizations, political maps etc. | | Also, many organizations, especially governments and news | media, often have their own requirements and conventions when | publishing maps -- some practical, some purely stylistic. For | example, NY Times uses Albers USA for election maps (it has | that iconic curved look of state boundaries), and National | Geographic uses Winkel Tripel for their world maps. | zokier wrote: | Ortographic projection is not really ultimate form for maps. | Interactive (re)projection would definitely be nice but that | applies to all projections equally, not just ortographic | projection. But as the article notes, interactive reprojection | is generally prohibitively expensive computationally. | mourner wrote: | Globe view (orthographic projection) is coming to GL JS | too![1] It had to be implemented differently (rendering to | textures and then mapping them on a 3D mesh), but it should | be quite fast. | | https://github.com/mapbox/mapbox-gl-js/issues/10784 | somishere wrote: | Amazing. Noted the draft PR and some mentions of a fall | release .. are we talking imminent on a globe? | wakeupcall wrote: | Before Google steamrolled the competition with free maps | around 2010, streaming vectorial maps were quite a big thing | in EU. I completely forgot the names of the big players in | the area, however the maps were rendered on the client after | being preprocessed (generally for streaming/rendering | efficiency) via a flash or java applet. | | The maps were usually reprojected in variable UTM (according | to your TZ - on the one I was working with) and/or using a | Gauss projection, which is an extremely good compromise for | whole countries. Because it was dynamic, the reprojection was | a continuum while panning, usually imperceptible for the user | at country scale. You could rotate the map, as well as query | for road names in any spot instead of hunting down the (often | missing) labels. | | I feel like the online services regressed quite a bit | compared to that time, but maybe that's just me as I was | working on the field. The mercator projection was mostly a | fallback for worldwide maps, hardly used otherwise at smaller | scales. When google maps started to provide worldwide free | maps (which could be used as a 3rd-party service for free at | the time), there was no way we could compete. OSM wasn't good | enough yet, data licensing from international vendors was | extremely high, and worldwide satellite imagery required an | entire order of magnitude higher investment to compete. The | companies I knew all pivoted to fleet management and similar | services to survive. | magicalist wrote: | > _Before Google steamrolled the competition with free maps | around 2010, streaming vectorial maps were quite a big | thing in EU. I completely forgot the names of the big | players in the area, however the maps were rendered on the | client after being preprocessed (generally for streaming | /rendering efficiency) via a flash or java applet._ | | > _The maps were usually reprojected in variable UTM | (according to your TZ - on the one I was working with) and | /or using a Gauss projection, which is an extremely good | compromise for whole countries. Because it was dynamic, the | reprojection was a continuum while panning, usually | imperceptible for the user at country scale. You could | rotate the map, as well as query for road names in any spot | instead of hunting down the (often missing) labels._ | | I'd be interested if you could remember any names because I | don't remember anyone doing a good job with vector maps in | 2005 when the google maps api came out (embedded google | maps were long established by 2010). Performance would have | been pretty atrocious even in Flash, especially if they | were from any established GIS companies, where _incredibly_ | slow desktop software was already the accepted norm. | | Maybe a very generous interpretation of continuous | reprojection, but I'm not aware of any decent system like | you describe until the early 2010s (like the one the | article links to[1]) and even then there's no real products | built around them, until now :) | | [1] http://berniejenny.info/pdf/2012_Jenny_AdaptiveComposit | eMapP... | jacobolus wrote: | > _UTM and /or using a Gauss projection, which is an | extremely good compromise for whole countries_ | | The transverse Mercator projection is an "extremely good" | conformal projection for anything region located within a | narrow band around a specified meridian. This describes | some countries well (e.g. Chile, Finland, Vietnam, | Portugal), but is rather terrible for anything stretched | out East-West (e.g. Russia, Canada, Indonesia). | | Among conformal projections, for a compactly shaped country | the stereographic projection is better. For a country lying | along a parallel, a conformal conic projection is better. | For a skinny country oriented at an arbitrary angle, an | oblique Mercator projection is better. For small enough | countries, any conformal projection works fine with low | distortion. | wakeupcall wrote: | As I wrote, but to make it a little bit more explicit, | the centerpoint moved as you panned. The vectorial stream | was performed directly in WGS84. | | This allows to have of a country like Germany in view | with very little distortion. As the zoom progressed | outwards, it would morph to mercator. Nobody really | noticed (sadly), and the choice of falling back to | mercator was also due to it's popularity making it sort | of "expected" more than anything else. | | The key point is that the reprojection was dynamic, and | done on the client, optimized for the current viewing | conditions. Stuff that today you can perform via JS | without any problem if you forego the idea that maps need | to be pre-rendered. | jacobolus wrote: | > _centerpoint moved as you panned_ | | If your display is tall and skinny and north always | points upward, transverse Mercator is a good general | choice among conformal projections. If your display is | square or squat, then a stereographic or conformal conic | projection is less distorted for any particular view. | bowmessage wrote: | I wonder if one could use something like an antipode map to | show two sides at once: https://engaging-data.com/antipodes- | map/ | turdnagel wrote: | Does anyone else find those map zoom-ins incredibly disorienting? | Kudos on solving this complex technical challenge, but I'm not | sure the end result is as "smooth" as described. | mourner wrote: | The videos show some extreme cases of this transition, but in | practice it feels pretty natural when interacting with the map. | Also, we'll definitely continue tweaking it to feel better. | It's nearly impossible to make it fully smooth though -- | projections are hard. | mourner wrote: | I'm the author of the article -- happy to see this upvoted, feel | free to ask any questions about web maps! | scratcheee wrote: | I'm curious how it would work out if you updated the projection | center to match the view center in zoomed out maps? | | I can see a value in having a "stable" map that doesn't twist | around as you move, but I think that would offer a good | alternative for people trying to look at places that suffer | from the traditional projection centers, and of course | different trade offs make sense for different circumstance. | | But perhaps constantly reprojecting is too expensive? | mourner wrote: | Exactly -- this would require reprojecting on every frame, | which is too expensive, while we designed the feature to only | do this once when loading a tile. | Demiurge wrote: | Is this ever coming to leaflet? Is adaptive projections | something that can be done without WebGL? | mourner wrote: | Unlikely -- the feature is designed around vector rendering. | fenfe1 wrote: | I guess this is more a feature request than a question - but do | you have plans to support stenographic projections as well? I | ask as I work for an Arctic/Antarctic research institute so | most projections are unsuitable. | mourner wrote: | Definitely something we want to explore more, although it's | quite a challenge since most map data distribution systems | including ours are built around Mercator tiles, which can't | show anything beyond ~85 latitude degrees. | derekja wrote: | I'd love to touch base on how you are handling this now.. I'm | using a combination of geoserver, react, and openlayers for a | Canadian Arctic 3573 projection. I'm derekja various places | including Gmail. Thanks! | nixpulvis wrote: | Are there live demos that could be embedded instead of (or in | addition to) the animated gifs? | mourner wrote: | Here's a live demo from our examples: | https://docs.mapbox.com/mapbox-gl-js/example/projections/ | | We decided to go with live videos to demonstrate the concepts | in motion, and because embedding WebGL vector maps on an | already big page might slow it down quite a bit, but | definitely something to consider more in the future. | nixpulvis wrote: | Maybe just put a little click to start over it, thus | indicating it's resource intensive. Not to give users | flashbacks or anything, but as long as it isn't too big | and/or was already downloaded, people should be happy. | zestyping wrote: | All I can say is this is really fucking impressive. When I | played with the demo my jaw dropped. Amazing work! | scoopertrooper wrote: | This is really cool! | | One issue I noticed though is that if you use gestures to zoom | on a touch pad, then you'll end up in the wrong spot. | | For instance, I put my cursor on Sydney with a Lambert | projection and pinch to zoom. As I pinch in, my cursor moves | away from Sydney as the map rotates, so the centre of the map | ends up at some other place. | | Ideally, it should cache the geographic coordinates of the | cursor at the start of the pinch gesture and zoom around that | till it receives a non-pinch input. | mourner wrote: | Yes, this is on our top list of issues to fix! | | https://github.com/mapbox/mapbox-gl-js/issues/11158 | divbzero wrote: | This is really cool! ...was my first thought too after | reading. Thanks for writing and posting. | s1mon wrote: | It's great to see this improvement, and read about the | development. The one issue that stuck out is that there is not | enough (any?) "ease-in/ease-out" to the animation as it | transitions from zooming to zooming and rotating. Ideally this | would be much more continuous. The Anchorage example is jarring | as it switches from one type of zoom to the other. As an | observer, I should not be able to say "here's the moment where | it changes". | flobosg wrote: | I just wanted to say that I loved the bloopers at the end. | mourner wrote: | This was my favorite part too! I think we should start a | tradition of adding those to every devlog. | vanderZwan wrote: | Not much to add on the article itself other than "when Vladimir | Agafonkin posts something it's probably worth checking out in | detail" - too bad it doesn't come with some code to study this | time ;) | | Tangent: I have autoplay turned off in Firefox and had no idea | half of these images were supposed to be examples of zooming in | and out until halfway into the article, where one of them had a | description. | | This is not a critique on the article, just mentioning it for | anyone else who might have similar settings. I'm also somewhat | surprised that I don't even get a pop-up from Firefox asking me | if I want to allow the video elements to be played. | | (although I personally prefer my videos with controls enabling me | to pause playback, instead of automatically looping fast-moving | "gifs", which can get very disorienting while reading, but that's | a different discussion) | thinkingemote wrote: | > too bad it doesn't come with some code | | Mapbox changed the license of their code last year I think to a | proprietary one. https://github.com/mapbox/mapbox-gl- | js/blob/main/LICENSE.txt | | It requires a mapbox user license with billing enabled to _use_ | this code, let alone make modifications. But the source is | viewable on github. | | Mapbox also has one of the first tech unions established, but I | do not think they have any position on the license. Any | insiders know? | mourner wrote: | Thanks for the kind words! Good point about autoplay -- the | current behavior is what we get when disabling controls in | Vimeo embeds; worth checking if it's possible to detect whether | autoplay is off, and switch the controls on if so. | divbzero wrote: | I think Apple Maps also leveled up recently in terms of adaptive | map projections. It used to be that to get a perspective | projection of Earth that you can spin you would have to (1) start | off zoomed in, (2) switch from 2D to 3D, and then (3) zoom out -- | my guess is they disabled switching between 2D and 3D while | zoomed out to avoid trickier transitions between projections. | With the latest version of Apple Maps you can get the spinnable | Earth by simply zooming out, regardless of initial state, and the | projection will adapt automatically. | mourner wrote: | While we're working on a similar feature (globe view [1]), | there's a debate on whether it should be turned on by default. | Apple Maps adopting it by default is a good argument in favor! | | [1] https://github.com/mapbox/mapbox-gl-js/issues/10784 | modeless wrote: | Google has been using perspective projection by default on | the web for years. It's the right thing to do. The mobile | versions haven't caught up yet. | mourner wrote: | Yes, but there's a difference between a consumer app and an | SDK for developers. Changing the default this drastically | is a breaking change. ___________________________________________________________________ (page generated 2021-12-13 23:00 UTC)