An add-in is available that provides expanded functionality for the spatial placement of CAD data sets that are in modified projections. (Note section below called "What is a modified projection?")
The add-in is called Transform CAD Layer, and is available here:
https://arcg.is/1vnymX (2.6, 2.7, 2.8, and 2.9)
https://arcg.is/1bb9Lq (3.0 and higher)
It is used to transform a CAD layer by entering a scale factor, rotation, local coordinates and corresponding grid coordinates.
Using the Transform CAD tool
After you’ve installed the add-in, follow the steps below to use the tool to transform the CAD dataset.
Note: The values that you type are remembered the next time you use the dialog.
Click the Reset button to set all the transformation parameters back to starting values.
What is a modified projection?
You may not recognize the term “modified projection” and may be more familiar with one of its other names: local datum plane, ground coordinate system or simply “surface” or “ground”.
When receiving a CAD file from a surveyor or engineer, it is common to find that it does not spatially align with the rest of your data. It may be offset a few thousand feet to the north east, or it may be miles away to the south west and may seem to be in an arbitrary local coordinate system. However, if the surveyor is using a modified projection then this information is usually provided as parameters for how the projection is modified, making it possible to use these transformation parameters to place the CAD drawing in its projected grid location without the need for manually picking out geo-referencing links.
Here’s an example of a simple modification in the notes on a subdivision plat from Houston, Texas:
All the criteria are present for converting between ground coordinates and grid coordinates. There is the reference to the projection that is being modified and information that the coordinates are “Surface” coordinates. The combined scale factor is provided, and there is no rotation mentioned, and no origin specified.
Since this note does not explicitly provide the origin, the 0,0 origin of the State Plane is assumed. For this description above, the corresponding CAD file location in its original ground coordinates would be located to the north east of the projected grid coordinate location. Since the add-in uses the convention of multiplying by the scale factor, for this example the scale to use would be its inverse, 1/1.00013 = 0.99987, and entered as follows:
Here is another example, showing the drawing settings used for some AutoCAD data.
For this drawing, the equivalent entries to convert to the grid location using the Transform CAD Layer add-in are as follows:
Why are modified projections used?
Modified projections like these are used for large scale low distortion projections. Distances measured on the ground match the distances in the digital coordinate space of the mapping software environment without having to apply a scale factor and rotation.
The reason they are successful is that they cover an area of a comparatively much smaller surface of the earth compared to the projection that they are derived from, and so using a flat plane for modeling a ground-based coordinate system is useful and practical. The combined scale factor is based on two components, the distortion caused by the projection and the scale caused by the elevation, as more fully described in the help topic Ground to grid correction.
Code
The CAD transformation functionality uses a similarity transformation. The code for this add-in is available on GitHub from the community samples repository, Transform CAD Layer code.
Here’s a code snippet of the similarity transformation used to generate the vectors written to the world file:
var pFrom1 = new Coordinate2D(dOriginX, dOriginY);
var pTo1 = new Coordinate2D(dGridX, dGridY);
var dDeltaX = dGridX - dOriginX;
var dDeltaY = dGridY - dOriginY;
var pFrom2 = new Coordinate2D(pFrom1.X + (10000 / dMetersPerUnit),
pFrom1.Y + (10000 / dMetersPerUnit));
var Rotated = GeometryEngine.Instance.Rotate(pFrom2.ToMapPoint(),
pFrom1.ToMapPoint(), dRotation * Math.PI / 180);
MapPoint RotatedAndScaled = (MapPoint)GeometryEngine.Instance.Scale(Rotated,
pFrom1.ToMapPoint(), dScaleFactor, dScaleFactor);
var RotatedScaledTranslated = new Coordinate2D(RotatedAndScaled.X + dDeltaX,
RotatedAndScaled.Y + dDeltaY);
if (WriteWorldFile(sTargetWldFile, pFrom1, pTo1, pFrom2,
RotatedScaledTranslated))
{ ...
References
Format of world files used for CAD datasets: World files for CAD datasets.
CAD coordinates systems: CAD geospatial coordinates
Ground to grid correction: Ground to grid correction
Transform features: Transform features
Thank you to the Esri Community
Thanks to those who sent their CAD datasets and transformation parameters:
@Geographic_Mythos, @StevenLowman , @Mark_Hotz, @Matt_Trebesch @LaurenConnor , HeatherWidlund
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.