# Geospatial Visualizer

_3D models in real-world coordinates_

2026 · Solo developer

A personal project to work with geospatial data. A browser viewer for 3D models stored in real-world UTM coordinates, using a floating origin so the geometry stays precise millions of metres from the origin.

**Technologies:** TypeScript, Three.js, Vite

[GitHub](https://github.com/jfcampos/geospatial-visualizer)

**Related expertise:** [Real-time 3D on the web](https://jfcampos.dev/expertise/real-time-3d-web.md)

![Geospatial Visualizer](https://jfcampos.dev/images/projects/geospatial-visualizer.jpg)

## Overview

Geospatial Visualizer is a small browser tool for viewing 3D models placed in real-world coordinates. I built it as a personal project to work with geospatial data. It loads OBJ models whose vertices are stored in UTM, so every point is an easting, a northing and an altitude in metres.

You can load several models, show or hide each one, zoom to a single model or to all of them, switch to a top-down view, and drop markers at exact UTM coordinates.

## The precision problem

UTM coordinates are large numbers: a northing can easily be around 4,000,000 metres. The GPU works with 32-bit floats, and at that size they can only tell apart positions about 25 cm from each other, so the geometry jitters and surfaces flicker as you move the camera.

The viewer uses a floating origin. Everything is drawn relative to a shared offset near the models, so the numbers that reach the GPU stay small and precise to the millimetre. The original UTM values are never modified, and converting between scene and UTM coordinates gives the same result in both directions, which is covered by unit tests.

Geospatial data usually uses Z for altitude, while Three.js uses Y as up, so the models are rotated once when they're drawn.

## Stack

TypeScript and Three.js, built with Vite and tested with Vitest.

## My involvement

- Designed and built the viewer, including the coordinate handling and its tests.

---

Web page: <https://jfcampos.dev/projects/geospatial-visualizer>
