Geoscience for QGIS can create local grid definitions.
Once you have your local grid CRS (Coordinate Reference System) you can assign it to your vector or raster data, overlay local data on data from standard CRS, reproject into standard CRS or even use the map canvas in your local CRS. In fact, you can do anything that you normally do with one of the thousands of CRS already defined in QGIS.
You need 2 or more sets of points with known coordinates in both your local grid and a standard grid then Geoscience can calculate the affine parameters and construct a Well Know Text (WKT) definition for your grid. This can then be added to QGIS using the Custom CRS menu.
To use the function, go to the Local Grid menu in the Geoscience plugin, then enter the name of your local grid and select the base CRS. The base CRS has to be projected, not geographic. That usually means it has eastings and northings rather than latitude and longitude. After that, enter in your coordinates in both the base and local grids.
Once you have filled in the name, base CRS and coordinate pairs, then click Calculate. The new local CRS in WKT format will appear in the box. Click the Copy button to copy it to the clipboard (paste it into a text file for safe keeping before you close!) and click Close. Go to Settings -> Custom Projections, click the green add button, then type in your local CRS name. Check that the Format is set to WKT, then paste your new definition into the box. Click Validate to make sure it’s formatted correctly, then OK.
You must check some of your known points to make sure that your new CRS is working properly before using it in production! It has been tested with local grids at hand, but they are a small sample.
You can now use your custom CRS just like any of the other CRS already defined in QGIS.
Thanks to Gabriel De Luca for posting instructions on how to create affine CRS and for affine source code. https://github.com/gabriel-de-luca/simil