Short answer

A geological contact is the boundary where two rock units meet, and in GIS it is best stored as an attributed line that forms the shared edge between adjacent map-unit polygons — not as the outline of each polygon drawn twice. The line carries the geologist's interpretation: what kind of boundary it is (depositional, intrusive, fault, gradational), how confident the mapper was that it exists and that it is correctly classified, how precisely it is located, and whether it is exposed or concealed beneath younger cover. Modeling contacts this way keeps geometry, meaning, and uncertainty together and lets you build topologically clean units from them.

Contacts are lines, units are polygons built from them

The single most important modeling decision is to treat contacts and faults as one line layer and to derive map-unit polygons from that linework. If you instead trace each polygon independently, the boundary between two units gets digitized twice with slightly different geometry, producing slivers, overlaps, and gaps. With a shared-edge line layer, the boundary exists exactly once and the polygons on either side are generated from it (native:polygonize in QGIS, Feature To Polygon in ArcGIS). This mirrors the USGS GeMS model, where ContactsAndFaults is a line feature class and MapUnitPolys is built against it.

Classifying contact type

Not all contacts mean the same thing geologically, and the type belongs in the data:

  • Depositional / stratigraphic — younger sediment or rock laid over older; can be conformable or an unconformity (a gap in the record).
  • Intrusive — where magma cut across pre-existing rock; the cross-cutting relationship tells you the intrusion is younger.
  • Fault — a structural break with displacement; carries its own attributes (sense of movement, dip) and is usually kept conceptually distinct even within the same line layer.
  • Gradational — units grade into one another with no sharp surface, often shown with a different line style and lower location confidence.

Recording type is what later lets you query "show me all intrusive contacts" or reason about relative ages from cross-cutting relationships, rather than seeing an undifferentiated tangle of lines.

Encoding confidence — the digital version of dashed lines

Paper geologic maps encode uncertainty in line style: solid for well-located, long-dash for approximate, dotted for concealed, queried for uncertain. GeMS turns that visual language into explicit, queryable fields:

  • existenceConfidence — is there really a contact here? (certain / questionable)
  • identityConfidence — is its classification correct, given that it exists?
  • locationConfidenceMeters — a numeric horizontal uncertainty (e.g. 25 m for a well-exposed contact, 200 m for one inferred under soil). This is far more useful for analysis than a categorical "approximate," because it can drive buffers and risk assessments.
  • isConcealed — true where the contact is projected beneath younger cover and not directly observed.

Carrying these as attributes means the symbology (solid/dashed/dotted) is generated from the data with a rule-based renderer, instead of being a hand-drawn style that no analysis can read.

Suggested attribute schema

A workable ContactsAndFaults schema, GeMS-aligned:

FieldExamplePurpose
typecontact, fault, intrusive contactgeological classification
existenceConfidencecertain / questionabledoes it exist
identityConfidencecertain / questionableis the type right
locationConfidenceMeters25positional uncertainty (m)
isConcealedtrue / falseexposed vs under cover
dataSourceDS01provenance key

Store it in a GeoPackage or PostGIS table; the symbology rule then reads, for example, "dashed where existenceConfidence = questionable, dotted where isConcealed = true."

Worked example: rule-based symbology from attributes

In QGIS, a rule-based renderer on the contacts layer:

  • "isConcealed" = TRUE → dotted line
  • "existenceConfidence" = 'questionable' AND "isConcealed" = FALSE → long dash
  • ELSE → solid line

Now the cartography is a view of the interpretation. Change a contact's confidence in the attribute table and its style updates automatically — and crucially, an analyst can also filter or buffer by that same field. In PostGIS you might widen a corridor by positional uncertainty:

SELECT id, ST_Buffer(geom, locationconfidencemeters) AS uncertainty_zone
FROM contactsandfaults
WHERE type = 'fault';

That turns a stylistic convention into a usable uncertainty band — something a flattened image map can never provide.

Topology with map units

Because units are built from contacts, the contact layer must be clean:

  • Endpoints snapped at every junction (contacts meeting contacts, contacts terminating on faults). Set a snapping tolerance in map units appropriate to scale — a few meters at 1:24,000.
  • No undershoots or overshoots at intersections, or polygonize leaves regions open or merged.
  • After building, run topology rules so polygons have no gaps or overlaps and every polygon carries a valid map-unit key.

Validate with QGIS Topology Checker ("must not have dangles", "must not have gaps", "must not overlap") or an ArcGIS geodatabase topology. Always fix the line, then rebuild polygons, so the two layers stay mutually consistent.

Common pitfalls and why they happen

  • Digitizing polygon outlines instead of shared contacts. Creates duplicate, mismatched edges → slivers and gaps, because the same boundary is captured twice.
  • Dropping confidence to "just a line." Loses the geologist's uncertainty, the most decision-relevant part of the map, and forces over-confident downstream use.
  • Symbolizing by hand instead of by attribute. The style then can't be queried, and concealed/approximate distinctions don't survive a re-export.
  • Unsnapped junctions. Silently break polygon building; the map looks fine but units are wrong.
  • Treating faults as ordinary contacts. Loses displacement and structural meaning; faults deserve their own type and attributes even within the line layer.

QA / validation checklist

  • Contacts stored as a single shared-edge line layer, not polygon outlines.
  • type, existence/identity confidence, locationConfidenceMeters, isConcealed populated.
  • All junctions snapped; no unintended dangles, no overshoots.
  • Polygons built from contacts have zero gaps/overlaps; every polygon keyed to a unit.
  • Symbology generated by rule from attributes, not hand-styled.

Bathyl perspective

A contact in a digital map is only as good as the uncertainty it carries. We model contacts as attributed shared edges so that confidence and concealment are queryable, symbology is generated from the data, and the units built on top are topologically guaranteed. That is the difference between a map you can interrogate and a picture you can only look at.

Related reading

Sources