4

Background: Due to distortions inherent in projected coordinate systems, surveyors will often create "Local" or "Ground" coordinate systems for projects so that grid (state plane or utm CS) distances and ground distances will match more closely. For example, when building a bridge the error in a state plane coordinate system exceeds the necessary tolerance for lengths of steel in the bridge.

To create one of these local systems, Surveyors will typically start with a well defined coordinate system and apply a scale factor which will make the grid and actual on-the-ground measurements match at that location. They might also want a specific control point on site to have an arbitrary coordinate like 10000, 10000 and will add a false easting and northing to accomplish that.

Problem: I would like to create a .prj file which will allow me to reproject any spatial data I have to the local coordinate system, and I would like my process to be repeatable. My surveyor has provided me with the state plane coordinate system they started with, as well as their false easting and northing and scale factor. I also have a point with coordinates in both systems so that I can use a 'Project' tool and test that I have defined my cs correctly.

Additional details: I'd like to be able to hand a document containing instructions to a less experienced GIS technician and have them follow the instructions and successfully create this prj file in the future. I am willing to create this document myself, but would also like to follow industry best practice if that exists.

2
  • 2
    I think this is equivalent to taking the original WKT for the source state plane CRS, then working out what the new measurement units and offset are and changing the unit and false easting/northing in the WKT to match your new origin and reference point... However you are still stuck with errors if you convert from one to the other unless you have a non-linear relationship between the state plane coords and the surveyors grid system.
    – Spacedman
    Commented Jul 22, 2021 at 19:34
  • @Spacedman I think you are correct; and I'd accept an answer that used WKT because it is easy to convert that to a prj file. I'm unsure of why I would necessarily have errors though. The relationship is linear; there is a translation and a linear scaling happening so it seems to me that I should be able to figure this out. Having an accepted method for this also seems like something this industry could use.
    – Craig T
    Commented Jul 22, 2021 at 22:08

2 Answers 2

3

You can do that with a Affine Derived from Projected CRS WKT string. It is like defining an affine 2D conversion method to a well known projected system.

For example:

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
        ]
    ]
]

We have a BASEPROJCRS node (it can be copied from any projected well known CRS WKT definition), and a DERIVINGCONVERSION node with an "Affine parametric transformation" conversion method (https://epsg.org/coord-operation-method_9624/Affine-parametric-transformation.html).

A0 and B0 parameters are translations. A1, A2, B1 and B2 parameters are scaled rotations.

If A1 = B2 != 1 and A2 = B1 = 0, then A1 (and B2) is the uniform scale factor.

The WKT expresses the transformation required to go from the projected to the "Local" system, and can be assigned to a dataset defined in the "Local" system to be able to operate it with GDAL.

QGIS can read the WKT definition and project it on the fly, but I'm not sure if you can export the data with a reprojection from QGIS.

OGR tools can reproject from and to this WKT definition.

1
  • 1
    In addition - software packages such as FME, Autodesk Civil 3D and Bentley Microstation all support the TMAF projection (Transverse Mercator with Affine Postprocess) and can therefore reproject data to/from such 'local' grids. Least squares best fit on the affine parameters is recommended.
    – JimT
    Commented Jul 26, 2021 at 8:50
0

If I understand correctly your question, you want to "translate" a scaled geometry (es. a polygon or polyline) referenced to one point (polar coordinate), to a CS system already existing ? (es. state plane).

So you have to "scale" your geometry not project.. The .prj file only contain the definition of the coordinate system what you want implement is a "transformation"

2
  • No. I want to be able to take data in an arbitrary coordinate system, and convert said data to a custom local coordinate system. Having a prj file makes this easy, so I'd like to be able to make that prj file. Yes the prj file contains the definition of the coordinate system; this is what I don't have and would like a reliable method to create. Once I have that file, the act of transformation is simple in any GIS software.
    – Craig T
    Commented Jul 22, 2021 at 18:40
  • .prj file is a plain text file this is an example: PROJCS["Transverse_Mercator",GEOGCS["International 1909 (Hayford)",DATUM["D_unknown",SPHEROID["intl",6378388,297]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]].......... If you want create your you can do it with any program, what you want are the parameters ?
    – gino
    Commented Jul 22, 2021 at 19:51

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.