Coordinate Conversion from Snyder, Verified Against Its Own Invariants

The Problem

You get a point in decimal degrees and the plans want California State Plane in survey feet. Or a survey gives you State Plane and you need lat/lon to drop a pin. The usual answer is an online converter you have to trust, or a GIS install you don't have open. I wanted the projection math itself — the real thing, not a lookup table — running locally in a page, and I wanted to be able to prove it was right.

The Approach

Four-way conversion among decimal degrees, DMS (structured fields, no fragile free-text parsing), UTM (zones 10/11, auto-selected from longitude), and all six California SPCS NAD83 zones in US survey feet. The projection code is straight out of Snyder's Map Projections — A Working Manual [1]: Lambert Conformal Conic (2 standard parallels) for State Plane, Transverse Mercator for UTM, forward and inverse, on the GRS80 ellipsoid — about 120 lines of vanilla JS, no library. The series formulas are accurate to well under a millimeter within a zone; the real error budget is datum handling and input quality, not the math.

One detail that's easy to get wrong and expensive at State Plane magnitudes: the US survey foot (1200/3937 m exactly) versus the international foot differ by about 2 ppm, which is real feet when your northing is 500,000. The tool handles that distinction explicitly.

Coordinate converter showing a decimal-degrees input with DMS, UTM, and California State Plane outputs
Figure 1: One point expressed four ways, with copy buttons on every output line.

Verifying against the projection's own invariants

This is the part I promised myself I'd do properly. You can't eyeball whether a Lambert conic is right, but the projection has defining properties you can test against:

When independent test points all land on the values the projection's geometry requires, the coefficients went in right. That last one is the satisfying check — the scale factor being exactly unity on the standard parallel isn't something you code, it's something that falls out if and only if the math is correct.

What happened to Zone 7 (the LA County story)

Under NAD27, California had seven State Plane zones and Zone 7 was Los Angeles County alone. When the system moved to NAD83, Zone 7 was folded into Zone 5, leaving six. So an old LA-area drawing labeled “Zone 7” is NAD27 coordinates — different datum, different constants, roughly 90 m off its NAD83 equivalent. Converting those properly needs NADCON grid-shift files (QGIS, proj, or NGS tools do it); no closed-form approximation is safe for anything you'd stake. The tool handles NAD83; it won't pretend to shift datums it can't.

Guardrails and the OSM note
  • West longitude is negative; a California point with positive longitude is in China, and the tool says so.
  • SPCS grid distance is not ground distance — the combined scale factor matters on long lines. That's survey territory.
  • For OSM work, treat WGS84 and NAD83 as identical (the 1–2 m difference is below imagery alignment error). For control, never.

Single file, vanilla JS, localStorage persistence [2][3].

The tool: Coordinate Converter.

References

  1. [1] Snyder, J.P., Map Projections — A Working Manual, USGS Professional Paper 1395. https://pubs.usgs.gov/pp/1395/report.pdf
  2. [2] NGS — State Plane Coordinate System zone definitions and datasheets. https://geodesy.noaa.gov/
  3. [3] EPSG registry — CA SPCS NAD83 zones are EPSG 2225–2230 (meters). https://epsg.org/