We are investigating a SPICE JP2 rendering issue in Helioviewer Web.
The tested SPICE JP2 is a valid 2D raster:
NAXIS = 2
NAXIS1 = 192
NAXIS2 = 612
However, its WCS metadata is not a simple square-pixel, axis-aligned case:
CUNIT1 = deg
CUNIT2 = deg
CDELT1 = 0.0011111111111111 deg ~= 4.0 arcsec/pixel
CDELT2 = 0.000305 deg ~= 1.098 arcsec/pixel
It also contains a non-trivial PC matrix:
PC1_1 = -0.61227620057
PC1_2 = -0.217031764022
PC2_1 = 2.88030582543
PC2_2 = -0.61227620057
This raises a general question: what WCS assumptions does helioviewer.org make in 2D and 3D rendering?
Observed behavior
In Helioviewer Web:
- SPICE can appear mis-scaled or vertically stretched in 2D.
- In 3D, SPICE does not appear correctly overlaid on EUI.
- The behavior differs from JHelioviewer, where SPICE appears to be rendered more consistently.
Main questions
- Does Helioviewer Web assume
CDELT1 == CDELT2?
- Does Helioviewer Web assume that the image X axis, associated with
CDELT1, is parallel to solar_x?
- Is
CROTA2 used in 2D or 3D rendering?
- Is the
PC matrix used in 2D or 3D rendering?
- Are
CTYPE1/CTYPE2 projections, such as HPLN-TAN/HPLT-TAN, supported in Web rendering?
- Do 2D and 3D use the same WCS assumptions?
- Is general WCS support expected in helioviewer.org, or only simplified image positioning?
2D / 3D context
From code inspection, the 2D Web path appears to use the tiled rendering pipeline:
getClosestImage -> getTile -> PNG tiles positioned in CSS
The 3D Web path appears to use a separate pipeline:
resources/js/3d -> @helioviewer/sun -> getClosestImage/getJP2Header/downloadImage -> Three.js texture

We are investigating a SPICE JP2 rendering issue in Helioviewer Web.
The tested SPICE JP2 is a valid 2D raster:
However, its WCS metadata is not a simple square-pixel, axis-aligned case:
It also contains a non-trivial PC matrix:
This raises a general question: what WCS assumptions does helioviewer.org make in 2D and 3D rendering?
Observed behavior
In Helioviewer Web:
Main questions
CDELT1 == CDELT2?CDELT1, is parallel tosolar_x?CROTA2used in 2D or 3D rendering?PCmatrix used in 2D or 3D rendering?CTYPE1/CTYPE2projections, such asHPLN-TAN/HPLT-TAN, supported in Web rendering?2D / 3D context
From code inspection, the 2D Web path appears to use the tiled rendering pipeline:
The 3D Web path appears to use a separate pipeline: