Render Polar Imagery

What would it take to render Polar Stereographic projection imagery draped on the ground at the poles? Any chance this is supported by a cesium API (with accurate rendering relative to the ground) or would it require a custom webgl/shader implementation (and is that even possible in cesium without forking?)

Our use case involves displaying ground and overlay imagery at the poles, and the distortions involved in projecting equirectilinear projections (Geographic/WebMercator) to a sphere would distort the imagery to an unacceptable level, especially near the poles. This might not be noticeable when the imagery is just blue water or white snow, but actual imagery at the poles is distorted.

Here is an illustration of wind speed tiles being rendered to cesium:

You’ll notice that the tiles are getting compressed horizontally as they near the pole. This means that imagery near the pole is distorted.

And if you zoom in, you can really see the distortion:

These are supposed to be arrows.

(Not to mention that the page is furiously downloading 50 million tiles as view covers the eye of the pole.)

There is literally no way to avoid these issues if an equirectangular projection is used (Geographic/WebMercator). The only option is to use a different projection with a different tiling scheme (or single image).

We’re looking at EPSG:3995 for the north pole and EPSG:3031 for the south. We plan on making WMS requests for imagery in those projections. Here is a sample image request.

Solutions?

It’s fine if the answer is “it’s not possible”, but I’m mostly wondering about what it would take to make it possible.

Here are my findings so far:

In general, it seems like in Cesium, all the imagery wants to be relative to an equirectangular CRS where “up” is north and “right” is east. So would this feature require custom webgl code? Performance issues were cited, but (speaking naively) couldn’t it be implemented in a way similar threejs decals? And I know Google Earth implemented special imagery cases for their polar caps, so it’s possible. I’m just wondering what the next step is.

Thanks

Not easily possible with the current API.

I believe the best path forward here would be to implement a polar projections as a special case. While all-inclusive custom projections would be a big lift, polar projections have been a fairly common use case so it could make sense to add it as an option in addition to Geographic or Web Mercator.

We perform Web Mercator reprojections on the GPU via WebGL, so the ideal solution would work the same way for the sake of speed.

1 Like