QGIS – How to Fix Custom CRS Not Working as Intended

coordinate systemqgis

I'm trying to make a world map on QGIS using Robinson's Projection, but centering it on a specific latitude/longitude.
I created a custom CRS with the following proj parameters:

+proj=robin +lat_0=-15.0  +lon_0=-45.0 +x_0=0.0 +y_0=0.0

The map did centered on the right longitude parameter, but the latitude didn't change on map. No matter which value I put in latitude it doesn't change the map.

UPDATE

I'm trying to follow Gabriel's suggestion, but still didn't got the intended result.

My QGIS version is 3.16 and my Proj version is 8.1.1.
Those are the nearest versions available to install through OSGeo4W
enter image description here

enter image description here

I copy/pasted the CRS parameters into a new custom CRS

enter image description here

Added a raw world data in WGS-84
enter image description here

And then changed the project CRS to the recent created Custom Robinson

enter image description here

The projection still doesn't look like Robinson, neither have Brazil in its center.

UPDATE-2

enter image description here

I reinstalled OSGeo4W softwares and now I'm running QGIS 3.22.0 compiled against PROJ 8.1.1.
And now the world map seems just like what Gabriel suggested, but the vertical center of the map (horizontal red line) still near the Equator line at Brazil, and not the latitude -15. Its expected to be near the red arrow. And apparently the world rotated a little counterclockwise.
Another thing, I did put the parameters at Euler Angle Tool but didnt found the parameters you posted.
enter image description here

Even tried switching Yaw and Pitch but our matrix didn't match, how did you found that numbers?

Best Answer

What if we rotate the world instead of the projection?

We can, for example, start from a WGS84 geographic system as a base, and then apply a pipeline transformation that includes the conversion to geocentric Cartesian coordinates, a 3D affine transformation that rotates the datum 45 degrees around the Z axis and -15 degrees around the Y axis, convert back to geographic and finally project to the Robinson cylinder:

PROJCRS["Custom Robinson",
    BASEGEOGCRS["WGS 84",
        ENSEMBLE["World Geodetic System 1984 ensemble",
            MEMBER["World Geodetic System 1984 (Transit)"],
            MEMBER["World Geodetic System 1984 (G730)"],
            MEMBER["World Geodetic System 1984 (G873)"],
            MEMBER["World Geodetic System 1984 (G1150)"],
            MEMBER["World Geodetic System 1984 (G1674)"],
            MEMBER["World Geodetic System 1984 (G1762)"],
            ELLIPSOID["WGS 84",6378137,298.257223563,
                LENGTHUNIT["metre",1]],
            ENSEMBLEACCURACY[2.0]],
        PRIMEM["Greenwich",0,
            ANGLEUNIT["degree",0.0174532925199433]],
        ID["EPSG",4326]],
    CONVERSION["PROJ-based coordinate operation",
        METHOD["PROJ-based operation method: +proj=pipeline +step +proj=cart +datum=WGS84 +step +proj=affine 
+s11=0.683 +s12=-0.7072 +s13=-0.1831 
+s21=0.683 +s22=0.7071 +s23=-0.183 
+s31=0.2588 +s32=0 +s33=0.9659
+step +proj=cart +inv +datum=WGS84 +step +proj=robin"]],
    CS[Cartesian,2],
        AXIS["(E)",east,
            ORDER[1],
            LENGTHUNIT["metre",1]],
        AXIS["(N)",north,
            ORDER[2],
            LENGTHUNIT["metre",1]]]

Tested at QGIS 3.18.3, compiled against PROJ 8.1.0.

1

Avoid the dateline issues.

Rotation matrix parameters can be computed at https://danceswithcode.net/engineeringnotes/rotations_in_3d/demo3D/rotations_in_3d_tool.html (see the axis, the Earth would be with the South facing up).

About the pipeline operator: https://proj.org/operations/pipeline.html

About the affine transformation: https://proj.org/operations/transformations/affine.html

Don't try to apply the CRS to a layer or source dataset yet. This definition cannot be converted to the WKT1 standard and geospatial formats do not yet accept such definitions.

You can apply it to the map for visualization purposes. Enjoy it.

Related Question