5

I need to define a local coordinate system via OGC WKT or PROJ form.

I know they have implemented Affine transformations in Proj 5 but I am unsure of how to implement it. The base projection is from EPSG 28354 but we have file in the local coordinate systems with the below Affine transformation and Bounds

Name    SMG
Projection  Transverse Mercator, (also known as Gauss-Kruger)
Datum   GDA 94 Australia GRS 80
units   meter
Origin Longitude    Central Meridian
Origin Latitude used    central Parallel
Scale Factor    0.9996
False Easting   500000
False Northing  10000000
Affine Unit meter
Affine A    0.88866511
Affine B    -0.459520111
Affine C    3099033.308
Affine D    0.459520299
Affine E    0.888664756
Affine F    -6949726.605
Bounds  MinX    -10000
Bounds  MinY    -10000
Bounds  MaxX    500000
Bounds  MaxY    500000

I tried defining it with FITTED_CS but QGIS (our GIS software does not recognise that). Here is what I have tried:

FITTED_CS["test",
 PARAM_MT["Affine",
  PARAMETER["num_row",3],
  PARAMETER["num_col",3],
  PARAMETER["elt_0_0", 0.88866511],
  PARAMETER["elt_0_1", -0.459520111],
  PARAMETER["elt_0_2", 3099033.308],
  PARAMETER["elt_1_0", 0.459520299],
  PARAMETER["elt_1_1", 0.888664756],
  PARAMETER["elt_1_2", -6949726.605]],
 PROJCRS["MGA",
  BASEGEODCRS["GDA94",
    DATUM["Geocentric Datum of Australia 1994",
      ELLIPSOID["GRS 1980",6378137,298.257222101,LENGTHUNIT["metre",1.0]]]],
  CONVERSION["Map Grid of Australia zone 54",
    METHOD["Transverse Mercator",ID["EPSG",9807]],
    PARAMETER["Latitude of natural origin",0,ANGLEUNIT["degree",0.01745329252]],
    PARAMETER["Longitude of natural origin",141,ANGLEUNIT["degree",0.01745329252]],
    PARAMETER["Scale factor at natural origin",0.9996,SCALEUNIT["unity",1.0]],
    PARAMETER["False easting",500000,LENGTHUNIT["metre",1.0]],
    PARAMETER["False northing",10000000,LENGTHUNIT["metre",1.0]]],
  CS[cartesian,2],
    AXIS["easting (E)",east,ORDER[1]],
    AXIS["northing (N)",north,ORDER[2]],
    LENGTHUNIT["metre",1.0]]]
3

Deriving a 2D affine transformed CRS from a projected one, is now named a Derived projected CRS, its keyword is DERIVEDPROJCRS and it is described in section 14.4 of the last OGC standarization document: http://docs.opengeospatial.org/is/18-010r7/18-010r7.html

The 2D Affine parametric transformation Operation Method is registered as EPSG:9624.

The parameters have not the same name as provided in your question (maybe taken from shapely?), but I think that the following WKT could be the right one (if you can provide a control point coordinates in both systems we can check it):

DERIVEDPROJCRS["test",
    BASEPROJCRS["GDA94 / MGA zone 54",
        BASEGEOGCRS["GDA94",
            DATUM["Geocentric Datum of Australia 1994",
                ELLIPSOID["GRS 1980",6378137,298.257222101,
                    LENGTHUNIT["metre",1
                    ]
                ]
            ],
            PRIMEM["Greenwich",0,
                ANGLEUNIT["degree",0.0174532925199433
                ]
            ],
            ID["EPSG",4283
            ]
        ],
        CONVERSION["Map Grid of Australia zone 54",
            METHOD["Transverse Mercator",
                ID["EPSG",9807
                ]
            ],
            PARAMETER["Latitude of natural origin",0,
                ANGLEUNIT["degree",0.0174532925199433
                ],
                ID["EPSG",8801
                ]
            ],
            PARAMETER["Longitude of natural origin",141,
                ANGLEUNIT["degree",0.0174532925199433
                ],
                ID["EPSG",8802
                ]
            ],
            PARAMETER["Scale factor at natural origin",0.9996,
                SCALEUNIT["unity",1
                ],
                ID["EPSG",8805
                ]
            ],
            PARAMETER["False easting",500000,
                LENGTHUNIT["metre",1
                ],
                ID["EPSG",8806
                ]
            ],
            PARAMETER["False northing",10000000,
                LENGTHUNIT["metre",1
                ],
                ID["EPSG",8807
                ]
            ]
        ]
    ],
    DERIVINGCONVERSION["Affine",
        METHOD["Affine parametric transformation",
            ID["EPSG",9624
            ]
        ],
        PARAMETER["A0",3099033.308,
            LENGTHUNIT["metre",1
            ],
            ID["EPSG",8623
            ]
        ],
        PARAMETER["A1",0.88866511,
            SCALEUNIT["coefficient",1
            ],
            ID["EPSG",8624
            ]
        ],
        PARAMETER["A2",-0.459520111,
            SCALEUNIT["coefficient",1
            ],
            ID["EPSG",8625
            ]
        ],
        PARAMETER["B0",-6949726.605,
            LENGTHUNIT["metre",1
            ],
            ID["EPSG",8639
            ]
        ],
        PARAMETER["B1",0.459520299,
            SCALEUNIT["coefficient",1
            ],
            ID["EPSG",8640
            ]
        ],
        PARAMETER["B2",0.888664756,
            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
        ]
    ]
]

Saving it as a (e.g., derivedprojected.txt) text file,

projinfo -s EPSG:28354 -t @derivedprojected.txt -o PROJ

Returns:

Candidate operations found: 1
-------------------------------------
Operation No. 1:

unknown id, Inverse of Map Grid of Australia zone 54 + Map Grid of Australia zone 54 + Affine, 0 m, World

PROJ string:
+proj=affine +xoff=3099033.308 +s11=0.88866511 +s12=-0.459520111 +yoff=-6949726.605 +s21=0.459520299 +s22=0.888664756
1

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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