1

I have received a Custom CRS that was developed for use in ArcGIS and am trying to adapt it to work in QGIS. In the past, I've been able to use the same CRS with both software without issue but my shapefiles are mapping in the incorrect location this time around. I seem to have managed to make the lateral location mostly correct by editing the WKT strings, except for the rotation. Any series of WKT strings I try does not read the “Azimuth” line of code. This is causing all the shapefiles to appear rotated from their correct position.

For reference, I've included the original custom CRS and my furthest attempt at the modified custom CRS below.

Original Custom CRS

PROJCS ["XX_MG_Dec2012",GEOGCS["GCS_North_American_1983_CSRS",DATUM["D_North_American_1983_CSRS",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0]
    ,UNIT ["Degree",0.0174532925199433]],PROJECTION["Local"]
    ,PARAMETER ["False_Easting",61001.012]
    ,PARAMETER ["False_Northing",31487.239]
    ,PARAMETER ["Scale_Factor",0.9999273408946479]
    ,PARAMETER ["Azimuth",1.70741]
    ,PARAMETER ["Longitude_Of_Center",-114.75839]
    ,PARAMETER ["Latitude_Of_Center",49.916094]
    ,UNIT ["Meter",1.0]]]

Modified Custom CRS

PROJCS ["NAD_1983_UTM_Zone_11N",GEOGCS["GCS_North_American_1983",DATUM["D_North_American_1983",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0]
    ,UNIT ["Degree",0.0174532925199433]],PROJECTION["Transverse_Mercator"]
    ,PARAMETER ["False_Easting",500000.0]
    ,PARAMETER ["False_Northing",0.0]
    ,PARAMETER ["Central_Meridian",-117.0]
    ,PARAMETER ["Scale_Factor",0.9996]
    ,PARAMETER ["Latitude_Of_Origin",0.0]
    ,UNIT ["Meter",1.0]]]
1
  • 2
    Clobbering a working projection with the wrong one is not the way out of this. Reprojecting is. Moving the center without accounting for intrinsic rotation will create the very problem you have here.
    – Vince
    Commented May 6 at 22:20

1 Answer 1

1

According to https://desktop.arcgis.com/en/arcmap/latest/map/projections/local.htm, Local projection is an orthographic one with a 2D similitude affine transformation (translation, rotation and uniform scale in both axis).

You can use the EPSG:9624 - Affine parametric transformation coordinates operation method to build a derived from projected CRS, since it is suported by PROJ in WKT2:2019 specification.

Regarding the parameters to use:

A0 = false easting
A1 = cos(azimuth) * scale factor
A2 = -sin(azimuth) * scale factor
B0 = false northing
B1 = sin(azimuth) * scale factor
B2 = cos(azimuth) * scale factor

The WKT2 string can be something like:

DERIVEDPROJCRS["Custom Esri Local",
    BASEPROJCRS["Custom Orthographic",
        BASEGEOGCRS["NAD83",
            DATUM["North American Datum 1983",
                ELLIPSOID["GRS 1980",6378137,298.257222101,
                    LENGTHUNIT["metre",1]]],
            PRIMEM["Greenwich",0,
                ANGLEUNIT["degree",0.0174532925199433]]],
        CONVERSION["Orthographic",
            METHOD["Orthographic",
                ID["EPSG",9840]],
            PARAMETER["Latitude of natural origin",49.916094,
                ANGLEUNIT["degree",0.0174532925199433],
                ID["EPSG",8801]],
            PARAMETER["Longitude of natural origin",-114.75839,
                ANGLEUNIT["degree",0.0174532925199433],
                ID["EPSG",8802]]]],
    DERIVINGCONVERSION["Affine",
        METHOD["Affine parametric transformation",
            ID["EPSG",9624]],
        PARAMETER["A0",61001.012,
            LENGTHUNIT["metre",1],
            ID["EPSG",8623]],
        PARAMETER["A1",0.999483388211648,
            SCALEUNIT["coefficient",1],
            ID["EPSG",8624]],
        PARAMETER["A2",-0.029793350895897,
            SCALEUNIT["coefficient",1],
            ID["EPSG",8625]],
        PARAMETER["B0",31487.239,
            LENGTHUNIT["metre",1],
            ID["EPSG",8639]],
        PARAMETER["B1",0.029793350895897,
            SCALEUNIT["coefficient",1],
            ID["EPSG",8640]],
        PARAMETER["B2",0.999483388211648,
            SCALEUNIT["coefficient",1],
            ID["EPSG",8641]]],
    CS[Cartesian,2],
        AXIS["(E)",east,
            ORDER[1],
            LENGTHUNIT["metre",1]],
        AXIS["(N)",north,
            ORDER[2],
            LENGTHUNIT["metre",1]]]

You can't use the string as a .prj file, but you can use the string in a text file to be passed to gdalwarp -s_srs parameter in a reprojection.

I don't know exactly to what extent this string would be supported as a custom CRS in QGIS, which you can assign to the layer that has the shapefile as its source.
However, if you can assign it to a layer and on-the-fly reprojection works for you, I recommend that you export it as is to a well-known CRS (defined by an EPSG code) before working with it.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.