Geological JSON: a format to share geological information. First published version.

We have always thought of Geomodelr a way to make all your Geological knowledge compatible in a simple, smooth and reproducible way that summed with a good interpolation algorithm could get the knowledge of the geologist into the hands of those who needed it.

Geomodelr versions are files that contain all the information in the model, interpolating sections, non interpolating sections, geological maps, boreholes, strikes and dips. Right now the only geological information interpolated by Geomodelr is the interpolating cross sections, but in the future, much more of that information could be made compatible making easier to represent in 3D all your knowledge and data.

A Geomodelr version can be used in Geomodelr Query Tool. Also each map or cross section can be imported as a GeoJSON to most GIS platforms.

Geomodelr’s format consists in a set of GeoJSONs that are transformed according to some rules. It’s open source and currently it contains objects like: structural data, borehole data, maps and cross sections. It can be adapted to contain any type of geographical vector information.

An Introduction to GeoJSON and notation currently supported by Geomodelr.

GeoJSON is a standard open format designed to represent simple geographical objects together with its non-spatial attributes, based in the JavaScript Object Notation (JSON). This format does not allow code execution or binary data. In comparison JSON is much lighter than XML and that’s an advantage over every XML based format. GeoJSON can admit primitives as numeric arrays or arrays or points. 
Putting that information in XML requires either to use text or attributes that need to be converted to primitives with other parser: <line value=”[[1,2],[3,4],[4,5]]”></line>, having a lot of extra tags like: <point><value coord=”x”>1</value>…</point> or even using CDATA, which breaks all the objective of using a human readable format.
Geomodelr represents every object as a GeoJSON in 2D or 3D with a given transformation. A standard GeoJSON map would look like this:

{ “type”: “FeatureCollection”,

  “bbox”: [100000.0, 0.0, 105000.0, 5000.0],

  “features”: [ {

  “type”: “Polygon”,

    “coordinates”: [

    [ [100000.0, 0.0], [105000.0, 0.0],

      [105000.0, 5000.0],

      [100000.0, 5000.0],

    [ [1004000, 4000],

      [1004000, 1000],

      [1001000, 1000],

      [1001000, 4000]

    ],

    “properties”: {

      “prop0”: 10,

      “prop1”: {

        “how”: “wish”

      }

    }

  },{

    “type”: “LineString”,

    “coordinates”: [

      [100000.0, 5000.0],

      [102000.0, 3000.0],

      [105000.0, 0.0]

    ],

    “properties”: {

      “prop0”: 20,

      “prop1”: {

        “you”: “where”

      }

    }

  },{

    “type”: “Point”,

    “coordinates”: [ [102500.0, 2500.0] ],

    “properties”: {

      “prop0”: 3.0,

      “prop1”: {

        “wish”: “here”

      }

    }

  } ] 

}

It has the 3 types of basic geometric entities: Polygon, LineString and Point. Currently Geomodelr does not support MultiPoint, MultiLineString, MultiPolygon or GeometryCollection. The Polygon has holes, with the outside Linear Ring being the first and the inside Linear Rings being the rest.
GeoJSON can also save 3D information. In the case of Geomodelr only lines and points can be represented in 3D. Lines are a boreholes dataset while points can be a structural dataset. The only thing that changes between the 3D version and the 2D version is that the coordinates have the extra height, and the bounding box is 6 values long.

{ “type”: “FeatureCollection”,

  “bbox”: [100000.0, 100000.0, 0.0, 105000.0, 105000.0, 5000.0],

  “features”: [ {

    {

      “type”: “LineString”,

      “coordinates”: [

        [100000.0, 100000.0, 5000.0],

        [102000.0, 105000.0, 3000.0],

        [105000.0, 102000.0, 0.0]

      ],

      “properties”: {

        “prop0”: 20,

        “prop1”: {

          “you”: “where”

        }

      }

    },{

      “type”: “Point”,

      “coordinates”: [ [102500.0, 103000.0, 2500.0] ],

      “properties”: {

        “prop0”: 3.0,

        “prop1”: {

          “wish”: “here”

        }

      }

    } ] 

}

For more information about GeoJSON visit http://geojson.org/.

Geomodelr Model Version

Basic Structure

Every model version is a set of features and each one is a GeoJSON FeatureCollection with a given transformation that can be represented in 3D. Instead of FeatureCollection, the type of a Geomodelr JSON is GeologyCollection.

{

  “type”: “GeologyCollection”,

  “bbox”: [100000.0, 100000.0, 0.0, 105000.0, 105000.0, 5000.0],

  “features”: [

    …

  ],

  “properties”: {

    …

  },

 

  “crs”: {

    “type”: “name”,

    “properties”: {

      “name”: “EPSG:27700”

    }

  }

}

The CRS specifies the coordinate system and is mandatory in Geomodelr, only EPSG codes in such format are supported right now. The Bounding box is also a mandatory parameter of the geological model.

Properties

The properties key contains properties that are applied to the full model. Currently these are the properties required: the units property contains the model units and it’s a dictionary with the color of the unit. The lines property contains the lines of the model and it’s a dictionary with the type of line, which can be FAULT, FRACT or VEIN. Timestamp is also necessary, which is the moment that the version was saved. Finally, geomodelr is the version of the file, currently “0.1.6”.

“properties”: {

  “units”: {

    “unit2”: “#ff2e00”,

    “unit1”: “#b3e6fa”

  },

  “lines”: {

    “fault1”: “FAULT”

  },

  “timestamp”: “2018-03-01T14:48:47.741195Z”,

  “geomodelr”: “0.1.6”,

  “version”: “example_version”
}

FeatureCollections

The features key contains all the FeatureCollections that are saved in the model version. Besides the normal GeoJSON parameters, each FeatureCollection contains: geology_type which can be of type section, map, borehole and dip; the name of the FeatureCollection, the transform that is applied to every geometric Feature of the FeatureCollection, and the properties that are applied to the entire FeatureCollection.

“name”: “A-A’”,

“geology_type”: “section”,

“transform”: {

  …

},

“properties”: {

  …
}

Transform

Currently, Geomodelr supports 3 kinds of transform: identity, which just has the type and no other information {“type”: “identity”}. It’s used for 3D features. The other types of transforms are topography:

“transform”: {

  “type”: “topography”,

  “point”: [100000, 100000],

  “heights”: [ [2000, 2000, 2000], [2000, 5000, 2000], [2000, 2000, 2000]],

  “sample”: [2500, 2500],

  “dims”: [3, 3],

  “zrange”: [2000, 5000]

}

Also, plane with vertical orientation:

“transform”: {

  “line”: [ [100000.0, 102500.0, 0.0], [105000.0, 102500.0, 0.0]],

  “zrange”: [0, 5000],

  “type”: “plane”,

  “orientation”: “vertical”,

  “normal”: [0.0, 1.0, 0]
}

Finally, plane with horizontal orientation:

“transform”: {

  “zrange”: [2000, 2000],

  “type”: “plane”,

  “orientation”: “horizontal”,

  “height”: 2000
}

Properties

Properties of a FeatureCollection is important for interpolation purposes and for the editor. The base section is the one that determines the initial section that aligns the rest of the cross sections. The interpolation property signals if the cross section is parallel to the base section and makes part of the interpolation. Both anchors and special are properties important for the editor.

“properties”: {

  “base”: false,

  “anchors”: [ [0.0, 2000.0],

               [2500.0, 5000.0],

               [5000.0, 2000.0],

               [5000.0, 0.0],

               [0.0, 0.0],

               [0.0, 2000.0] ],

  “special”: {“1”: {…}},

  “interpolation”: false
}

Features

For plane and map FeatureCollections, each Polygon feature has property unit, which is to be interpolated: {“unit”:”rock”}, each LineString feature has property line which is to be meshed: {“name”:”f1″}.

Conclusion

This is the current format Geomodelr uses, but it’s a pretty general way to encode 3D geographical information, (which most of the time is geology), and could be used to standardize the sharing of geological knowledge between different systems in a human readable, simple, and accessible form that builds upon currently formats that are standard in the industry.
There are currently several attempts to build a format where geological information can be shared between systems for mining or other purposes. We want to share our current approach and hope it helps with the discussion.

Close Menu