However this coordinate system does not have to be a grid, it may also be linear, either straight, segmented (multiple straight line sections) or curved (or a number of others, Affine, Cartesian, Ellipsoidal, Spherical, Cylindrical, Polar, Vertical and Linear).
In this way it is possible to define a Hole's CRS as a linear coordinate system defining the centreline of the Hole in 3D space, with 0 at Ground Level (or 0m AOD if you wish to work in Level rather than Depth) and depths are measured as points along this linear coordinate system, so a point no longer has an Easting and Northing component a point may be a single distance along the Hole's coordinate system.
GML's coordinateReferenceSystems.xsd defines a CoordinateReferenceSystem as:
A coordinate reference system consists of an ordered sequence of coordinate system axes that are related to the earth through a datum. A coordinate reference system is defined by one datum and by one coordinate system. Most coordinate reference system do not move relative to the earth, except for engineering coordinate reference systems defined on moving platforms such as cars, ships, aircraft, and spacecraft. For further information, see OGC Abstract Specification Topic 2.
GML's coordinateReferenceSystems.xsd defines a gml:EngineeringCRS as:
A contextually local coordinate reference system; which can be divided into two broad categories:
- earth-fixed systems applied to engineering activities on or near the surface of the earth;
- CRSs on moving platforms such as road vehicles, vessels, aircraft, or spacecraft.
For further information, see OGC Abstract Specification Topic 2.
This pretty well fits the requirements of DIGGSML which is based around defining "engineering activities on or near the surface of the earth"!
GML's coordinateSystems.xsd defines a gml:LinearCS as:
A one-dimensional coordinate system that consists of the points that lie on the single axis described. The associated ordinate is the distance from the specified origin to the point along the axis. Example: usage of the line feature representing a road to describe points on or along that road. A LinearCS shall have one usesAxis association.
Once the Axis is defined all that remains is the Datum, again DIGGSML defines a replacement for the gml:EngineeringDatum, allowing you to specifiy the origin point for this datum in addition to the GML requirement for a name.
After that the CRS is complete, it can be referenced in the file to define a point as a distance along that line.
Here's an example defining the CRS.
0<Hole> 1 <hasCRS> 2 <gml:EngineeringCRS gml:id="crs_bh127"> 3 <gml:srsName>BH127 CRS</gml:srsName> 4 <gml:usesCS> 5 <gml:LinearCS gml:id="lcs_bh127"> 6 <gml:csName>BH127 CS</gml:csName> 7 <gml:usesAxis> 8 <CoordinateSystemAxis gml:id="axis_BH127" gml:uom="m"> 9 <gml:name>Depth Down Borehole 127</gml:name> 10 <gml:axisAbbrev>D</gml:axisAbbrev> 1 <gml:axisDirection>Down</gml:axisDirection> 2 <axisDirection> 3 <gml:LineString srsName="urn:ogc:def:crs:epsg:6.9:27700" srsDimension="3" gml:id="cl_bh127"> 4 <gml:posList>407415 268653 23.45 407415 268653 24.55</gml:posList> 5 </gml:LineString> 6 </axisDirection> 7 </CoordinateSystemAxis> 8 </gml:usesAxis> 9 </gml:LinearCS> 20 </gml:usesCS> 1 <gml:usesEngineeringDatum> 2 <EngineeringDatum gml:id="datum_bh127"> 3 <gml:datumName>BH127 Ground Level</gml:datumName> 4 <origin> 5 <gml:Point srsName="urn:ogc:def:crs:epsg:6.9:27700" srsDimension="3"> 6 <gml:pos>407415 268653 23.45</gml:pos> 7 </gml:Point> 8 </origin> 9 </EngineeringDatum> 30 </gml:usesEngineeringDatum> 1 </gml:EngineeringCRS> 2 </hasCRS> 3 4 <id codeSpace="keynetix.com">BH127</id> 5 <name codeSpace="keynetix.com">Borehole 127</name> 6 <startDateTime>2007-01-01T12:00:00</startDateTime> 7 <!-- Hole properties follow here... --> 8</Hole>
In this example we can see a Hole object defined (starting on Line 1) with it's associated geometry, including it's centreline string (starting on Line 5) and it's EngineeringCRS (starting on Line 13).
0<Hole> 1 <geometry> 2 <lines> 3 <gml:lineStringMember> 4 <gml:LineString srsName="urn:ogc:def:crs:epsg:6.9:27700" srsDimension="3" gml:id="cl_bh127"> 5 <gml:posList>407415 268653 23.45 407415 268653 22.35</gml:posList> 6 </gml:LineString> 7 </gml:lineStringMember> 8 </lines> 9 </geometry> 10 <!-- Hole properties including CRS definition follow here... --> 1</Hole>
8 <CoordinateSystemAxis gml:id="axis_BH127" gml:uom="m"> 9 <gml:name>Depth Down Borehole 127</gml:name> 10 <gml:axisAbbrev>D</gml:axisAbbrev> 1 <gml:axisDirection>Down</gml:axisDirection> 2 <axisDirection xlink:href="cl_bh127" /> 3 </CoordinateSystemAxis>
This next more specific example stores heights as a depth from the ground level of the hole, it would be simple to specify a different datum and transfer all heights as elevations (either against AOD or any other national datum, or even a site datum) rather than depths. In piling ground level has variable meaning, various ground levels are defined at SI, at survey, at construction, specifying the CRS to use AOD or a national elevation datum (or site HI) means all positions are done in terms of Elevation (or Level) rather than depth.
01<layers> 2 <Layer> 3 <depthTop><gml:pos srsName="crs_bh127">0</gml:pos></depthTop> 4 <depthBase><gml:pos srsName="crs_bh127">0.75</gml:pos></depthBase> 5 <system>MajorConstituent</system> 6 <classification>FILL</classification> 7 <description>Topsoil</description> 8 </Layer> 9 10 <Layer> 1 <depthTop><gml:pos srsName="crs_bh127">0.75</gml:pos></depthTop> 2 <depthBase><gml:pos srsName="crs_bh127">1.1</gml:pos></depthBase> 3 <system>MajorConstituent</system> 4 <classification>FILL</classification> 5 <description>Sandy grey brown soil with many fragments of glass and plastic. MADE GROUND</description> 6 </Layer> 7</layers>

CRS referencing is a complicated area of the framework and can be quite daunting to a novice, hopefully this small example has shown that using a CRS based referencing system is not as hard as it initially looks, and also given a small insight into some of the many benefits of referencing vertical depths/elevations in this way.