Engineering 20 min read

Digital twins with GIS: from a 3D scene to a live model you can act on

A 3D model shows what a place looks like. A digital twin stays in sync with it — and GIS is what ties every building, asset, sensor and simulation to the right place. The layers, open formats, live feeds and what-if analysis behind a twin that people actually use, on ArcGIS and open-standard stacks.

On this page
  1. A twin is not a 3D model
  2. Why a twin needs GIS
  3. Interactive: the six layers of a GIS twin
  4. Formats and standards that matter
  5. Two stacks: ArcGIS and open standards
  6. Keeping it live: frequency, fidelity, IDs
  7. Interactive: a what-if flood on the twin
  8. Build it in levels
  9. Where GIS twins pay off
  10. Pitfalls we see
  11. A rollout that ships
  12. Takeaways

Most “digital twin” demos are a photoreal city you can fly through. They look great and answer nothing, because nothing in them changes when the real city does. A twin earns the name when it stays in step with the place it represents: the pump that tripped five seconds ago is red, the floor plan matches last month's refit, and the flood model runs against today's river level. GIS is what makes that possible. It puts every building, asset, sensor reading and simulation result in one coordinate system with one set of IDs. This post covers the layers, formats and feeds of a GIS-based twin, and the order we build them in.

A twin is not a 3D model

The Digital Twin Consortium's definition is the one we work to: a virtual representation of real-world entities and processes, synchronized at a specified frequency and fidelity. Each part of that sentence rules something out.

  • Entities and processes. A twin models things with identity (this valve, this air handler, this bridge bearing) and how they behave, not only surfaces. A mesh with no IDs is a picture.
  • Synchronized. Data flows from the real asset to the model, on a schedule or continuously. A model that was accurate on handover day and never updated is documentation.
  • At a specified frequency and fidelity. Somebody decided how often each entity updates and how precise it needs to be. A pump needs seconds, a road surface condition needs months. A campus twin rarely needs millimetre geometry, while a tunnel clearance check does.

Why a twin needs GIS

You can build a twin of a single machine without a map. You can't build one of a campus, a utility, a port or a city without one, because the questions are spatial: which buildings are downstream of this main, which assets sit in the flood extent, which sensor belongs to which zone, what a crew can see from the gate. GIS supplies four things a game engine or BIM tool doesn't supply alone.

GIS bringsWhat it means in a twinWhat breaks without it
One coordinate referenceEvery layer — BIM, LiDAR, cadastre, sensors — registered to a real CRS and a real vertical datumThe building floats 30 m above the terrain because BIM used a local origin and the mesh used ellipsoidal heights
Continuity of scalePan from a valve to its building, its pressure zone, its catchment and the region without switching toolsSeparate 'site' and 'city' models that disagree at the boundary
The asset registerFeatures with IDs, attributes, owners, condition and — for networks — topologyPretty geometry that can't be joined to work orders or sensors
Spatial analysisTraces, overlays, viewsheds, flood extents, service areas and routing on the same dataEvery what-if becomes a separate consulting project with an export
The four things GIS adds to a twin. The first one causes most failed integrations.

The coordinate problem is worth spelling out, because it's where most GIS–BIM projects stall. BIM models are usually authored in a local project coordinate system: a survey point, a project base point and a true-north rotation. Photogrammetry and LiDAR come in a projected CRS, often with ellipsoidal heights from GNSS. Your city GIS uses a national grid with orthometric heights above a geoid. The differences run to tens of metres vertically in many regions. Pick one horizontal CRS and one vertical datum for the twin on day one, record the transformation for every source, and check it with surveyed control points, not by eye.

Interactive: the six layers of a GIS twin

We build twins as a stack of layers over the same ground. Each layer answers a different question, arrives in different formats and refreshes at a different rate. Hover to pause, or click a layer.

L1 · What does the place look like today?

Reality capture

Drone and aerial photogrammetry, airborne and mobile LiDAR, 360° imagery. Processed into integrated meshes, true orthos, classified point clouds and — increasingly — Gaussian splats for thin structures and vegetation that meshes handle badly.

Formats

LAS / LAZ · COPCI3S mesh · point cloud3D Tiles + glTFKHR_gaussian_splatting

Typical tools

ArcGIS RealityDrone2MapArcGIS ProCesiumJS
An exploded view of one city block. Layers above the selected one turn transparent. The lower layers change rarely; the upper ones change by the second or on demand. Values are illustrative.

Two things are easy to miss. First, the asset layer is the spine. Reality capture and BIM make the twin look right, but the feature layer with stable IDs and topology is what live data and analysis attach to. Second, the stack isn't built bottom-up in one go. A useful first release often has a coarse 3D base, a good asset layer and a single live feed. The photoreal capture can come later.

LayerAnswersTypical formatsTypical tools
L1 · Reality captureWhat does the place look like today?LAS / LAZ · COPC · I3S mesh · point cloud · 3D Tiles + glTF · KHR_gaussian_splattingArcGIS Reality · Drone2Map · ArcGIS Pro · CesiumJS
L2 · 3D base: terrain and buildingsWhere is everything, in one coordinate system?CityGML 3.0 · CityJSON · I3S 3D object · 3D Tiles · Elevation (COG · LERC)ArcGIS Pro · CityEngine · PostGIS · CesiumJS
L3 · BIM and interiorsWhat is inside, and what is it made of?IFC 4.3 (ISO 16739-1) · Revit · DWG · I3S building scene layer · Indoor floor plansArcGIS GeoBIM · ArcGIS for Autodesk · ArcGIS Indoors · BuildingSceneLayer
L4 · Assets and networksWhat is connected to what, and who owns it?Feature services · OGC API – Features · Utility network · PostGIS tablesArcGIS Utility Network · ArcGIS Enterprise · PostGIS · pgRouting · GeoServer
L5 · Live stateWhat is happening right now?MQTT · OPC UA · OGC SensorThings API · Stream services · WebSocket · Time-series tablesArcGIS Velocity · GeoEvent Server · PostgreSQL time series · Dashboards
L6 · Analysis and simulationWhat happens if…?Scenario layers · Time-enabled results · Trace results (IDs) · Model outputs → featuresArcGIS Pro 3D analysis · ArcGIS Urban · ArcGIS Notebooks · Hydraulic / traffic models
The six layers at a glance: the same stack as the interactive figure, as a reference table.

Formats and standards that matter

Twins outlive the software they start on, so the formats matter more than the viewer. The good news is that the 3D streaming problem is largely standardised now. The two formats that matter both have OGC status and are both supported by the major engines.

Capture & author

Drone & aerial imagery

JPEG / TIFF · GNSS · RTK

LiDAR & mobile mapping

LAS / LAZ · COPC

BIM & CAD

IFC 4.3 · Revit · DWG

City models

CityGML 3.0 · CityJSON

GIS features

Geodatabase · PostGIS

Systems & sensors

SCADA · BMS · IoT · CMMS

Model & convert

Reality mapping

Meshes · orthos · point clouds · splats

Georeference

Horizontal CRS + vertical datum

Semantic mapping

IFC classes → layers, IDs kept

Tiling & LOD

Spatial index · level of detail

Stream processing

Filter · geofence · join to asset ID

Stream (open formats)

I3S scene layers

OGC community standard

3D Tiles 1.1 + glTF

OGC community standard · Khronos

OGC API – Features

or ArcGIS feature services

SensorThings API · MQTT

or ArcGIS stream services

Render & act

ArcGIS Maps SDK for JavaScript

SceneView · BuildingSceneLayer

CesiumJS

3D Tiles · terrain · CZML time

Unreal / Unity

ArcGIS Maps SDKs · Cesium for Unreal

Dashboards & field apps

Ops rooms · crews · AR

The data path of a GIS twin. The middle column is the part to keep open: if the streamed formats are standards, you can change viewers, clouds and vendors without re-processing the data.
StandardWhat it carriesWhere it fits
I3S (Indexed 3D Scene Layers)3D objects, integrated meshes, point clouds, points and building scene layers with full BIM discipline/category structureEsri's streaming format, published as an OGC community standard; native to ArcGIS scene services and the ArcGIS Maps SDKs
3D Tiles 1.1Hierarchical tilesets of glTF content with implicit tiling and structured metadata per featureOGC community standard since 2023; native to CesiumJS and widely supported, including 3D Tiles layers in ArcGIS at the time of writing
glTF 2.0 + KHR_gaussian_splattingMeshes and materials; the new Khronos extension adds Gaussian splatsThe payload inside 3D Tiles. Khronos released the splat extension in early 2026, with CesiumJS and ArcGIS among the first adopters
CityGML 3.0 · CityJSONSemantic city models: buildings, roads, vegetation, water, with LODs and time-dependent propertiesExchange and storage of city models; convert to I3S or 3D Tiles for streaming
IFC 4.3 (ISO 16739-1)Open BIM: spatial structure, elements, systems and properties, now including infrastructure (roads, rail, bridges, ports)The vendor-neutral way to bring design and as-built models into the twin; keep IFC GlobalIds
LAS / LAZ · COPCPoint clouds; COPC is a cloud-optimised LAZ that clients can read by range requestArchive and analysis copy of LiDAR; stream as I3S point cloud or 3D Tiles
OGC SensorThings APIThings, locations, datastreams and observations over REST and MQTTAn open API for the live layer; a common alternative to proprietary IoT platform APIs
Standards status and support are at the time of writing (September 2026). Check the current releases of your engines before committing to a format.

Two stacks: ArcGIS and open standards

We build twins on both. The choice usually follows what the organisation already runs, not the 3D feature list, since both render large scenes well. Many real projects mix them, which the open formats above make possible.

LayerArcGIS stackOpen-standards stack
Reality captureArcGIS Reality, Drone2Map, ArcGIS Pro with the Reality extension → I3S mesh, point cloud and splat layersPhotogrammetry output tiled to 3D Tiles; point clouds kept as COPC and tiled for streaming
3D baseArcGIS Pro, CityEngine for procedural models, elevation and scene services on ArcGIS EnterprisePostGIS 3D geometries, CityGML / CityJSON, quantized-mesh terrain for CesiumJS
BIMArcGIS GeoBIM and ArcGIS for Autodesk, building scene layers from Revit / IFCIFC converted to 3D Tiles with element properties as feature metadata
Assets & networksFeature services, ArcGIS Utility Network, ArcGIS IndoorsPostGIS + pgRouting, served by GeoServer or OGC API – Features
Live stateArcGIS Velocity or GeoEvent Server; stream layers in the web and native SDKsMQTT broker, SensorThings API, time-series tables in PostgreSQL, WebSockets to the client
AppsArcGIS Maps SDK for JavaScript (SceneView), Experience Builder, Dashboards, Maps SDKs for Unity and UnrealCesiumJS, deck.gl for dense overlays, MapLibre for 2D/2.5D companions, Cesium for Unreal
Same six layers, two sets of products. At the time of writing ArcGIS Velocity is available both as SaaS and, since 2026, on ArcGIS Enterprise.

Lean to ArcGIS when

  • You already run ArcGIS Enterprise or ArcGIS Online and your asset register lives in a geodatabase
  • You need a utility network, indoor positioning or out-of-the-box dashboards and field apps
  • BIM arrives from Autodesk Construction Cloud and should flow in with its discipline structure

Lean to open standards when

  • You want no per-seat or per-viewer licensing for a public-facing twin
  • Your data already lives in PostGIS and your team ships web apps, not GIS apps
  • You need full control of the renderer, e.g. a custom CesiumJS or game-engine experience

Whichever stack you pick, the live layer comes down to one join: feature ID to latest reading. In CesiumJS it looks like this. Buildings stream as 3D Tiles with an asset_id per feature, readings arrive over a WebSocket, and features are recoloured as tiles come into view.

twin-live-layer.tsTypeScript
1import * as Cesium from "cesium";
2
3const viewer = new Cesium.Viewer("twin");
4
5// Buildings from IFC / CityGML, tiled to 3D Tiles 1.1 with asset_id metadata
6const tiles = await Cesium.Cesium3DTileset.fromUrl(
7 "https://tiles.example.com/campus/tileset.json",
8);
9viewer.scene.primitives.add(tiles);
10
11// Latest reading per asset, pushed by the stream service
12type Reading = { asset_id: string; tempC: number; alarm: boolean };
13const live = new Map<string, Reading>();
14const ws = new WebSocket("wss://twin.example.com/stream/bms");
15ws.onmessage = (e) => {
16 const r: Reading = JSON.parse(e.data);
17 live.set(r.asset_id, r);
18};
19
20const ok = Cesium.Color.fromCssColorString("#38c2ff");
21const hot = Cesium.Color.fromCssColorString("#ff6b5e");
22
23// The join is asset_id, not geometry
24tiles.tileVisible.addEventListener((tile) => {
25 const content = tile.content;
26 for (let i = 0; i < content.featuresLength; i++) {
27 const f = content.getFeature(i);
28 const r = live.get(f.getProperty("asset_id"));
29 f.color = !r ? Cesium.Color.WHITE : r.alarm ? hot : ok;
30 }
31});
Live state on a 3D Tiles tileset. The geometry never changes; only per-feature colour does, driven by a map keyed on the same asset ID the GIS and the BMS use.
3D Tiles, 3D models and 3D geospatial dataDrone, LiDAR, BIM and photogrammetry turned into I3S or 3D Tiles, georeferenced, with attributes kept.

Keeping it live: frequency, fidelity, IDs

Synchronisation is where twins quietly die. The fix is to write down, per entity type, where its truth lives, how often it changes, and how the change reaches the model. A single “refresh the twin” job won't work, because a pump and a floor plan change at very different rates.

EntitySource of truthFrequencyHow it reaches the twin
Pumps, valves, PRVsSCADA historianSecondsOPC UA / MQTT gateway → Velocity, GeoEvent or a SensorThings service → stream layer
Room temperature, occupancyBMS, IoT sensorsSeconds to minutesMQTT → time-series table; latest value on the space feature
Vehicles, crewsAVL / mobile appsSecondsStream service or WebSocket; tracks stored for replay
Asset condition, work ordersCMMS / EAMOn change, dailyWebhook or scheduled sync keyed by asset ID
As-built geometry, fit-outsBIM / CAD, field surveyWeeks to monthsRe-convert the changed model, republish the scene layer or tileset
Reality mesh, point cloudDrone / LiDAR campaignsMonthly to yearlyRe-capture the changed area, replace tiles for that extent
Forecasts (rain, river, demand)External modelsHourlyScheduled notebook writes scenario layers the what-if tools read
A synchronisation register. Each row is a pipeline to build, monitor and own. If a row has no owner, that part of the twin will go stale.

One ID to join them all

Every row above ends in a join, so the twin needs an identity strategy before it needs a renderer. An asset has an IFC GlobalId in the design model, a GlobalID in the geodatabase, an equipment number in the CMMS and a tag name in SCADA. Pick one as the master (usually the GIS or CMMS ID), carry the others as attributes, and make every pipeline resolve to the master. Then check the joins with SQL. Twins that skip this end up matching sensors to buildings by nearest neighbour, which works in the demo and fails at the first multi-storey plant room.

If you're not on ArcGIS, the OGC SensorThings API makes the live layer queryable in a standard way. Things carry your master asset ID in their properties, and one request returns an asset's location and the latest value of each datastream:

latest-readings.shShell
1curl -G "https://sta.example.com/v1.1/Things" \
2 --data-urlencode "\$filter=properties/asset_id eq 'PMP-014'" \
3 --data-urlencode "\$expand=Locations,Datastreams(\$select=name,unitOfMeasurement;\$expand=Observations(\$top=1;\$orderby=phenomenonTime desc))"
SensorThings API v1.1: the Thing for pump PMP-014 with its location and the newest observation of every datastream.
Real-time data and IoT integrationMQTT, SCADA and BMS feeds mapped onto asset IDs, with ArcGIS Velocity or an open pipeline, alerting and replay.

Interactive: a what-if flood on the twin

Live state tells you what is happening. Simulation, run on the same model, shows what could happen next and what to do about it. Below is a small twin: a river valley, sixteen buildings, a substation (SUB-3), a clinic and a road network. Raise the water level, try a flood wall, and compare two ways of computing the extent.

SUB-3CLINICCONNECTED FILL · LEVEL 1.50 m
Area flooded
68%
Buildings hit
9 / 16
Road cells cut
8 / 16
SUB-3
flooded
Clinic
dry

SUB-3 floods. Try the flood wall — a prescriptive what-if on the same model.

A 12 × 8 cell terrain. Connected fill spreads water from the river through every neighbouring cell lower than the level; bathtub marks every cell below the level as wet. Elevations, return periods and results are illustrative.

Three points from the demo carry over to real projects:

  • Connectivity matters. At 1.5 m the bathtub model floods the clinic, but the clinic sits in a pocket behind higher ground that the river can't reach until about 1.65 m. A bathtub model is fast and pessimistic. Real twins use hydraulic or hydrodynamic models that account for flow paths, drainage capacity and timing, then bring the results back into the scene as time-enabled layers.
  • Impact is a join. “Buildings hit” and “road cells cut” are overlays of the flood extent with the asset layer. Swap in parcels, customers or critical facilities and you have an evacuation list or a crew-routing constraint.
  • Prescriptive is a comparison. Adding the wall and re-running the scenario is the step from “what will happen” to “what should we do”. The wall protects SUB-3 up to about 2.1 m. Whether that's enough is a decision for engineers, now made on a shared model.
4D mapping and scenario simulationFlood, storm-surge, construction and growth scenarios played in the scene with sliders, timelines and side-by-side comparison.

Build it in levels

Digital-twin maturity models vary in naming but agree on the progression. Each level depends on the one below. You can't predict what you can't describe, and nobody should let a model act on its own if it can't yet predict reliably.

Level 1

Descriptive

What is there?

3D base, BIM and the asset register in one CRS, with IDs.

Level 2

Informative

What is happening?

Live feeds joined to assets; alerts and dashboards by zone.

Level 3

Predictive

What will happen?

Forecasts and simulations run on current state, shown in the scene.

Level 4

Prescriptive

What should we do?

Options compared on the map: isolation plans, routes, defences.

Level 5

Autonomous

Act on its own?

Closed loop to control systems — rare, bounded, human-approved.

Levels 1–3 · where most of the value is
Five levels of twin maturity and what GIS contributes at each. Levels 4 and 5 exist, but most organisations get their return from the first three.

Level 5 is rarer than vendor slides suggest, and deliberately so. Control of physical assets stays in SCADA and OT systems with their own safety certification. The twin recommends, and a person or a bounded control loop acts. Plan for levels 1–3, and design the data so that 4 is possible later.

Where GIS twins pay off

DomainThe twin answersCore layers
Water and utilitiesWhich customers lose supply if this main breaks? Which zone is losing water tonight?Utility network, SCADA, AMI, isolation traces
Campuses and facilitiesWhich spaces are under-used? Which air handler serves this room, and is it failing?BIM, indoor maps, BMS and occupancy sensors
Cities and planningWhat does this proposal do to shadows, sight lines, capacity and flood risk?3D base, zoning, proposals, scenario layers
ConstructionIs the site where the schedule says it should be? Where do design and reality differ?BIM, 4D sequencing, drone captures over time
Ports, airports, logisticsWhere is every asset and vehicle, and what is blocking the flow?3D site model, AVL, gate and yard systems
Public safety and defenceWhat does the operator on the ground see, and what does the ops room know?Terrain, reality mesh, live tracks, a common operating picture
Start from the question, not the layer. Each row is a first release in its own right.

For the water case in depth, including isolation traces and SCADA on the network model, see ArcGIS Utility Network for water distribution. For the ops-room case, a twin is often the backdrop of a TAK-connected common operating picture. Our own Earth Explorer app shows a smaller version of the same idea: OGC sensor observations on a 3D globe, on a phone.

Pitfalls we see

Works

  • One decision per first release, with a named user and a measurable result
  • One CRS and vertical datum, checked against surveyed control points
  • A master asset ID, with every feed and model resolving to it
  • Streaming only the BIM categories and properties operations use
  • Open streamed formats (I3S, 3D Tiles), so viewers can change later
  • A synchronisation register with an owner per row

Does not

  • Buying a city-wide photoreal mesh before anyone has asked a question of it
  • Eyeballing BIM into place and discovering a 30 m height error in production
  • Matching sensors to assets by proximity
  • Publishing entire Revit models with every parameter, then wondering why mobile crashes
  • One-off exports into a game engine that nobody can refresh
  • A live feed with no monitoring, so the twin shows yesterday and nobody notices

A rollout that ships

  1. 01

    Pick the decision and the user

    “Plan valve isolations in minutes”, “cut space costs on campus”, “brief the council on flood options”. One decision sets which layers, fidelity and frequency you need.
  2. 02

    Write the synchronisation register

    Entities, source systems, frequency, fidelity, the master ID and an owner per row. This page is the real specification of the twin.
  3. 03

    Build the ground truth

    CRS and datum, 3D base, asset layer with IDs and topology. Bring in BIM for the buildings that matter to the decision. Capture reality only where it adds context.
  4. 04

    Connect one live feed end to end

    From sensor to asset ID to the scene, with monitoring for staleness. One working feed shows more about the architecture than ten on a diagram.
  5. 05

    Ship one app to one team

    A web scene for the ops room or a tablet app for crews. Put it in daily use, collect complaints, fix them.
  6. 06

    Add what-if, then widen

    Scenario layers and simulation on the proven base, then the next decision, the next team and the next feed. The twin grows by use cases, not by layers.
3D scene server developmentArcGIS scene services and self-hosted 3D Tiles, with LOD strategy, caching and security for large scenes.AR, VR and mixed reality on the twinThe same model in the field and in the briefing room: AR for buried assets, VR walkthroughs, Unity and Unreal scenes.

Takeaways

Takeaways

  • 01A twin is synchronised, not rendered. What makes it a twin is a model of entities that stays in step with reality at a frequency and fidelity someone chose.
  • 02GIS is the frame. One CRS and datum, continuity from asset to region, an asset register with IDs, and spatial analysis on the same data.
  • 03The asset layer is the spine. Reality capture and BIM make the twin look right. Features with stable IDs and topology are what live data and analysis join to.
  • 04Stream open formats. I3S and 3D Tiles (with glTF, now including Gaussian splats) let you change engines without re-processing data.
  • 05Synchronisation is a register, not a job. Each entity has its own source, frequency and owner, and one master ID joins them all.
  • 06Grow by decisions. Describe, inform, predict. Get levels 1–3 working for one team before adding the next use case.

Start a project

Have a project in mind? Let's build it.

Share your requirement and get an obligation-free consultation, a technology recommendation, and a quote within 48 business hours.

Chat on WhatsApp