Short answer

Strike and dip are planar orientation measurements, and a GIS treats them as a point layer with numeric attributes plus a rotated symbol. The two things you must get right are the convention (right-hand-rule strike versus dip direction) and the rotation reference the renderer uses (clockwise from north, like a geological azimuth, versus mathematical counter-clockwise from east). Get those two right and the symbols point downslope every time; get either wrong and an entire structural map silently lies.

This article covers how to model the data, the azimuth math behind correct rotation, a worked QGIS and GeMS setup, and the failure modes that produce wrong-way dip ticks.

What strike and dip actually encode

A planar geological feature — bedding, a fault plane, foliation, a joint set — is described by two angles relative to horizontal:

  • Strike: the compass bearing of the horizontal line formed where the plane intersects a horizontal surface. A bed striking 030 trends NNE-SSW.
  • Dip: the angle of steepest descent measured down from horizontal, 0 to 90 degrees, in the vertical plane perpendicular to strike.
  • Dip direction: the azimuth (compass bearing) toward which the plane dips. By definition it is exactly 90 degrees clockwise from the right-hand-rule strike.

The right-hand rule (RHR) removes the ambiguity that strike alone has (030 and 210 describe the same line). With the right hand laid on the plane, fingers point down-dip and the thumb gives the strike azimuth; the plane dips to the right of the strike direction. So RHR strike 030 always means dip direction 120. The alternative convention records dip direction + dip angle directly (e.g., 120/45), which many field apps and the modern geological community prefer because it is unambiguous and maps cleanly to a single rotation value.

The single most important documentation step in any structural GIS layer is a one-line note stating which of these you stored.

Modeling the data: schema and CRS

Use a point feature layer. Each measurement is a station with at least:

FieldTypeNotes
azimuthinteger/realRHR strike or dip direction (state which)
dipinteger/real0-90 dip angle
typetextbedding, foliation, joint, fault, overturned
station_idtextfield station / observation key
confidencetext/intmeasured, estimated, inferred
sourcetextfield, photo-interp, prior map

The GeMS standard (USGS Geologic Map Schema) formalizes this in an OrientationPoints feature class with Azimuth, Inclination, OrientationConfidenceDegrees, a Type controlled by a glossary, and IdentityConfidence. GeMS records dip direction in Azimuth for inclined planar features, so if you are heading toward GeMS publication, adopt dip-direction azimuth from the start to avoid a conversion pass later.

CRS matters more than it looks. Strike/dip azimuths are referenced to true north, but a projected coordinate system rotates grid north away from true north by the meridian convergence (grid declination), which can reach several degrees near the edges of a UTM zone. If you symbolize azimuths over a projected basemap, the ticks are drawn relative to grid north, not true north. For most map scales the discrepancy is negligible, but for precise structural compilation over wide areas, note the convergence or work in a CRS where it is small. Keep the layer's CRS explicit (e.g., a UTM zone such as EPSG:32633) and never let "on-the-fly" reprojection hide a missing source CRS.

Symbolizing correctly in QGIS

The standard geological symbol is a strike line with a short perpendicular tick on the down-dip side, annotated with the dip value. To draw it you need a marker whose internal geometry is unambiguous and a data-defined rotation.

Steps:

  1. Pick or build the SVG. QGIS ships geology SVGs under Settings > Options > System > SVG paths. Know the symbol's "zero azimuth" geometry — i.e., what it looks like at rotation 0. A typical strike-dip SVG draws the strike line vertical (pointing north) with the dip tick on the east side, meaning rotation 0 corresponds to dip direction = east (090) unless the symbol is built for strike north.
  2. Set the marker as an SVG Marker symbol layer.
  3. Data-defined rotation. Open the rotation property's data-defined override. If your field already holds dip direction, use it directly: "azimuth". If your field holds RHR strike and the symbol's tick is on the right of strike, the strike-line itself rotates with strike, so use "azimuth" as strike. The decisive test is the next step.
  4. Calibrate against a known measurement. Pick one station whose dip direction you are certain of (say it dips clearly to the east-southeast on the hillshade). If the tick points the wrong way, your field convention and symbol geometry disagree. Fix it with an expression rather than re-editing data, e.g. for a symbol expecting dip direction while your field stores RHR strike: ("azimuth" + 90) % 360.
  5. Label the dip. Add a label using the dip field, placed near the tick, with a rotation that keeps text upright.

QGIS measures symbol rotation clockwise, which matches geological azimuth (clockwise from north). This is convenient and is not the place most errors come from. The errors come from convention mismatch (strike vs dip direction) and from SVG zero-geometry assumptions.

The same logic in ArcGIS Pro

In ArcGIS Pro, use a marker symbol with rotation by attribute set to Geographic rotation (clockwise from north / 12 o'clock), not Arithmetic (counter-clockwise from east / 3 o'clock). Selecting Arithmetic by accident produces the classic "rotated 90 degrees and mirrored" structural map. The Arithmetic-to-Geographic relationship is geographic = 90 - arithmetic (mod 360), which is exactly why a forgotten setting throws symbols off by predictable amounts.

Worked example

A field station records bedding measured with a compass-clinometer as RHR strike 215, dip 32. You want a GeMS-style layer.

  • Dip direction = (215 + 90) % 360 = 305 (NW). Quick sanity check: strike SW-NE, dipping to the NW — plausible on a NW-facing slope.
  • Store Azimuth = 305, Inclination = 32, Type = "bedding".
  • SVG symbol expects dip-direction rotation, so data-defined rotation = "Azimuth" = 305. The dip tick should point up-slope-to-down toward 305, matching the terrain.
  • Cross-check on a hillshade derived from the DEM: the down-dip tick should point into the slope's descent direction at that location. If it points uphill, you stored strike where the symbol expected dip direction.

Common pitfalls and why they happen

  • Wrong-way dip ticks. The field convention (strike vs dip direction) does not match what the symbol's rotation expects. The fix is an expression, not re-digitizing.
  • Everything rotated and mirrored. The renderer is using arithmetic (CCW from east) rotation instead of geographic (CW from north). Happens because the default differs between tools.
  • Overturned beds drawn as normal. Overturned bedding needs its own symbol and often a separate dip-direction logic; storing it with the same symbol hides a critical structural relationship.
  • Azimuths over a rotated grid. Symbolizing true-north azimuths on a strongly convergent projected map introduces a small systematic rotation; only matters at high precision or wide extent, but worth a metadata note.
  • 180-degree ambiguity left in the data. Recording strike without RHR (or without dip direction) makes correct symbolization impossible; the layer cannot know which way the plane dips.

QA and validation

  • Spot-check three stations with independently known dip directions before trusting the whole layer.
  • Range checks: dip in 0-90; azimuth in 0-360. Flag negatives and values >360 from data entry.
  • Convention audit: confirm one documented convention across the entire table; a mixed dataset (some strike, some dip direction) is the worst case and must be normalized.
  • Cross-reference terrain: overlay on slope/aspect or a hillshade — bedding dip directions usually bear a sensible relationship to topography in dip-slope settings.
  • Round-trip the symbol: export to a layout and confirm dip labels read correctly and ticks remain on the down-dip side at print scale.

Bathyl perspective

Structural orientation data is small in volume but high in consequence: one convention error rotates an entire interpretation. Bathyl stores orientation as explicit dip-direction azimuths with a documented convention, calibrates symbology against known stations, and keeps the layer GeMS-compatible so it can move from fieldbook to publication without a silent re-encoding step.

Related reading

Sources