🎯 Geo Triangulator

Radii · Leaked positions · Least squares · OpenStreetMap
–

Measurement points

👁 # Name Lat (°) Lon (°) Radius (m) σ r (m)

Drag markers to move points. Empty σ → default . Hidden points are ignored.

Result

    Self-test

    Runs known test cases for every mode with synthetic measurements and checks the results.
    Help & user guide

    Quick start

    1. Add measurement points: click on the map (toggle “Add point on map click”), paste coordinates, use “+ Add row”, import a file, or load an example.
    2. If you know the distance from a point to the target, enter it as radius (metres). For leaked positions without distances, leave the radius empty (mode 4).
    3. Optionally enter the uncertainty of a radius (σ = one standard deviation). It weights the radii against each other.
    4. The result updates automatically. In “Automatic” mode the app picks the matching method and shows which one it used.

    Pasting coordinates

    Coordinates copied e.g. from Google Maps can be pasted in three ways: into the “Paste coordinates” field (Enter or “Add”), anywhere on the page with Ctrl+V / ⌘V (outside input fields), or into a Lat/Lon cell of the table (fills both). Several lines create several points. Accepted formats:

    • Decimal degrees, latitude first: 48.101440, 11.588161 · 48.101440 11.588161 · 48,101440; 11,588161
    • With hemisphere letters: 48.1014° N, 11.5882° E · N 48.1014 E 11.5882
    • Degrees, minutes, seconds: 48°06'05.2"N 11°35'17.4"E · degrees and decimal minutes: 48°06.087'N 11°35.290'E
    • Google Maps / OpenStreetMap links containing the position (e.g. …/@48.101440,11.588161,17z or …?q=48.101440,11.588161)

    Modes

    • 1 · One radius: the target lies inside (or on) the circle. Area and circumference are shown. One circle cannot fix a position.
    • 2 · Two radii: the lens-shaped intersection area and the two intersection points (the target is at one of them if the radii are exact distances). If the circles don’t meet, the point of least weighted deviation is shown.
    • 3 · Three or more radii: least-squares estimate (Levenberg–Marquardt), plus the area common to all circles if there is one.
    • 4 · Coordinates only (equal radius / allowed distance): no radius per point needed. Typical use: hide and seek, where the hider leaks positions now and then and may move at most a certain distance from the hiding spot.
      • Allowed distance empty: the tool finds the smallest radius that, used for every point, makes all circles meet in one common point. That point (red crosshair) is the position whose largest distance to any of the points is as small as possible, and the radius is the smallest allowed distance consistent with all leaks.
      • Allowed distance entered: circles of that radius around every leak; the hiding spot must lie in the red area where all of them overlap. If the leaks are farther apart than the distance allows, a warning shows the smallest distance that would fit.
      Automatic mode uses this mode when no point has a radius (at least two points, or one point plus an allowed distance).
    • 5 · Delaunay triangle mesh: connects all points into triangles (no target estimate; select it manually). Among all ways to connect the points, Delaunay picks the one with the “fattest” triangles: no point lies inside the circle through the corners of any triangle, so long thin triangles are avoided. Each point is linked to its natural neighbours.
      • The outer edge of the mesh is the convex hull: the smallest region without dents that contains all points. “Total area” is its size, i.e. how large an area the points span.
      • Long edges and large triangles show gaps where there are no points; short edges show clusters.
      • Use it to see how points (e.g. leaked positions) are spread out and which ones are neighbours. Hover over a triangle to see its area.

    Reading the result

    • Red crosshair: estimated position (purple: alternative, equally good solution). The coordinates can be copied.
    • s₀ (a-posteriori standard deviation of unit weight) ≈ 1 means the measurements agree with their σ. s₀ > 3 indicates contradictory data.
    • Residuals are “computed − observed”, evaluated on the sphere. |v/σ| > 3 is flagged in red as a likely outlier.

    Files

    CSV with a header line, separated by , ; or tab: name,lat,lon,radius_m,sigma_radius_m,visible. Common alternatives (latitude, lng, distance…) are recognised; other columns are ignored; empty cells are allowed. With ; as separator a decimal comma is accepted.
    GeoJSON: Point features; the same names are read from properties.

    Notes & limits

    • Calculations run on a spherical earth (R = 6371 km) in a local azimuthal equidistant projection. Accuracy is excellent up to several hundred kilometres; don’t use it across the poles or the ±180° meridian.
    • Everything runs locally in your browser; inputs are stored only in this browser’s localStorage. Nothing is uploaded except map tile requests.
    • OpenStreetMap's tile servers require the web address of the requesting page (HTTP Referer). A file opened by double-click (file://) has none, so the map shows “Access blocked”. Open the tool from a web address instead, e.g. via GitHub Pages or any web server. All calculations, import/export and the self-test work without the map tiles.