VPS.xten.in
v1.6.1

Visual Positioning Systems
The Expert Report

Everything required to reason about, evaluate, and build a Visual Positioning System — from camera geometry to planet-scale production deployments. Written to take a capable reader, human or AI, from zero to expert fluency in one document.

v1.6.1 · published 2026-07-19 · vps.xten.in · self-contained — no external scripts, no trackers

Abstract for fast readers. A Visual Positioning System (VPS) computes the full six-degree-of-freedom pose (3D position + 3D orientation) of a camera by matching what the camera sees against a pre-built visual map of the world. It answers "where exactly am I and which way am I facing" to centimeter–decimeter accuracy where GPS gives meters and no usable heading. The canonical architecture has two phases: an offline mapping phase (structure-from-motion builds a 3D point cloud with visual descriptors) and an online localization phase (image retrieval → 2D–3D feature matching → PnP-inside-RANSAC → pose refinement). Modern systems use learned features (SuperPoint), learned matchers (LightGlue), and learned retrieval (NetVLAD and successors), fused on-device with visual-inertial odometry so the expensive global fix is needed only occasionally. Production examples: Google's ARCore Geospatial API (built on Street View), Niantic Lightship VPS (crowdsourced scans), Apple's ARKit location anchors. The open problems are long-term appearance change, map scale and freshness, and descriptor privacy. Sections 1–5 are the load-bearing core; 12 is the practical recipe; 14 tests whether you actually became an expert.
A person silhouetted before a wall-sized projection of a city street rendered as a glowing point cloud
A city remembered as points — a photorealistic point-cloud street, projected at gallery scale. Every VPS carries a memory like this; localization is the act of finding yourself inside it. (Wikimedia Commons, CC BY-SA 4.0)

01What a VPS is — and what it replaces

A Visual Positioning System is an infrastructure-plus-algorithm stack that determines a camera's 6-DoF pose — three degrees of position (x, y, z) and three of orientation (roll, pitch, yaw) — by comparing the current camera image against a previously constructed visual model of the environment. The academic name for the online problem is visual localization or camera relocalization; "VPS" is the productized, planet-or-venue-scale version of it.

The single most important framing: a VPS is a lookup against a map, not a sensor. GPS measures signals from satellites; a VPS recognizes place. Everything about VPS engineering — coverage, freshness, storage, privacy — follows from the fact that someone must build and maintain the map before anyone can localize inside it.

GPS tells you roughly where the phone is. A VPS looks through the camera and tells you exactly where it is and which way it points — like a friend who recognizes the street corner in your photo, rather than a satellite guessing your dot on a map.
GPS VPS you are somewhere in this blob (3–30 m) facing: unknown · floor: unknown exact spot (±10–50 cm) exact facing (±1–3°) · exact floor
The product difference in one picture: GPS returns a fuzzy dot; a VPS returns a pose — position, direction, and altitude, sharp enough to draw arrows on the pavement.
A hand holding a phone whose screen shows an AR navigation route ribbon drawn over the live camera view of the same street
And here is that sentence as a product: an AR navigation view held against the street it annotates. The route ribbon lands on the correct pavement only because position and facing are both right. (Navit Reality View — Wikimedia Commons, GFDL)

Why GPS is not enough

PropertyGNSS (GPS/Galileo/GLONASS)GNSS + RTKVisual Positioning System
Position accuracy3–5 m open sky; 10–50 m in urban canyons (multipath)1–3 cm, but needs correction infrastructure and clear skyTypically 10–50 cm outdoors, 5–20 cm indoors/venue-scale
OrientationNone (course-over-ground only while moving; compass is magnetically unreliable)None (dual-antenna setups excepted)Full 3-axis, commonly <1–3° error
Indoors / undergroundNo signalNo signalWorks — the map is the infrastructure
Vertical (which floor?)Poor (2–3× worse than horizontal)Good with fixed baseInherent — pose is fully 3D
Time to fixSeconds (warm) to minutes (cold)Seconds–minutes to convergeOne to a few camera frames (~0.1–1 s)
Failure modeDegrades noisilyFalls back to plain GNSSFails where map is missing, stale, or scene is ambiguous

The killer capability is orientation. Augmented reality, robot manipulation, and pedestrian guidance ("the entrance is behind you") all need heading. Magnetometers drift and lie near steel; GPS heading needs motion. A VPS delivers position and a gravity-consistent, drift-free orientation from a single glance at the world.

Relatives and non-relatives

  • SLAM (Simultaneous Localization and Mapping) builds a map while tracking in unknown space. A VPS localizes against a map that already exists. Production stacks use both: SLAM/VIO for smooth local tracking, VPS for absolute global anchoring (Section 8).
  • Place recognition / image retrieval answers "which place is this?" (coarse, image-level). A VPS goes further to metric pose. Retrieval is the first stage of most VPS pipelines (Section 5).
  • Fiducial markers (QR, AprilTag, ArUco) are the poor man's VPS: engineered features with known pose. Cheap, robust, ugly, and require physically instrumenting the space.
  • WiFi RTT / BLE beacons / UWB give 1–5 m (WiFi/BLE) or 10–30 cm (UWB) indoor position but no orientation and require deployed radio hardware. UWB is the strongest non-visual competitor for instrumented venues.

The radio cousin — WiFi CSI (Channel State Information)

Every modern WiFi packet crosses a room as an OFDM waveform on dozens-to-thousands of subcarriers per antenna pair. To equalize the link, the receiver estimates the complex channel response — amplitude and phase, per subcarrier. That estimate, the CSI, is a multipath fingerprint of the space: every wall, cabinet, and human body contributes reflections, and any movement reshapes the response packet by packet. Read CSI as a time series and the access point becomes a passive sensor.

router (TX) device (RX) multipath — every surface adds an echo a moving body rewrites the paths CSI across subcarriers — empty room same link — person walking
WiFi CSI in one picture: the receiver already measures the channel on every subcarrier to decode data; walls and bodies write themselves into that measurement. The disturbance is the signal.
  • Device-free sensing. Presence and intrusion detection, gesture recognition, fall detection, gait identification, even respiration monitoring — through walls, in darkness, with nothing worn or carried. The tagline is literal: the router can see you move.
  • Positioning. CSI fingerprinting reaches decimeter-to-meter accuracy indoors — far beyond coarse RSSI — and time/angle-of-flight methods (WiFi RTT / 802.11mc, MIMO phase) solve position directly. Still no orientation, and still an order coarser than a VPS fix.
  • Standardization and accessibility. IEEE 802.11bf is making sensing a first-class WiFi service, and ESP32 CSI toolkits put the capability on $5 microcontrollers — the hobbyist ecosystem around "ESP-CSI" is already large.

For a VPS architect, CSI is a complement, not a competitor. It is the natural upgrade to the coarse radio prior in Section 5's query package — sharper tile selection, reliable floor disambiguation — and it covers exactly the cases vision cannot: lights off, lens occluded, camera-prohibited spaces. The privacy note of Section 10 applies with extra force here: device-free sensing is consent-free by default, and it evades every camera-era intuition about when one is being watched.

Expert intuition #1. Judge any localization technology on four axes at once: accuracy, orientation capability, infrastructure cost (what must be deployed/maintained), and coverage model (who builds the map, how it stays fresh). VPS wins the first two, and lives or dies on the last two.

02The geometric foundation

Every VPS reduces to one equation: how a 3D world point becomes a 2D pixel. Master this and the rest of the field is bookkeeping.

One equation runs this whole field: a 3D point in the world lands on a specific pixel, and the camera's pose decides where. Find enough point↔pixel pairs and the pose is the only unknown left — solve for it. Every algorithm in this report is just a better way to find those pairs or to clean them.

The pinhole projection model

x  ≃  K [ R | t ] X pixel (homogeneous 3-vector) ≃ intrinsics × pose × world point (homogeneous 4-vector); ≃ means equal up to scale
  • X = (X, Y, Z, 1)ᵀ — a point in the world coordinate frame (the map's frame).
  • [R | t] — the extrinsics: a 3×4 matrix built from a rotation R ∈ SO(3) and translation t ∈ ℝ³ that transforms world coordinates into camera coordinates. This is the pose. This is the entire output of a VPS. The camera center in world coordinates is C = −Rᵀt — a fact interview questions love.
  • K — the intrinsics: focal lengths fx, fy and principal point (cx, cy) arranged as an upper-triangular 3×3. Real lenses add radial/tangential distortion (Brown–Conrady coefficients k₁, k₂, p₁, p₂), which must be calibrated out. Phones expose calibrated intrinsics through ARKit/ARCore, which is one reason mobile VPS is tractable.
C camera center — where you stand image plane — the sensor (K decides its geometry) X — a 3D map point x — predicted pixel observed pixel — where the feature actually is reprojection error
One ray explains the whole field: the pose places C and aims the camera, K decides where the ray pierces the sensor, and the gap between predicted and observed pixel — the reprojection error — is the number every algorithm minimizes.

Reprojection error — the universal currency

Given a candidate pose, project every matched 3D point into the image and measure the pixel distance to where the feature was actually observed:

ei = ‖ π( K [R|t] Xi ) − xiπ is perspective division (u,v,w) → (u/w, v/w). Every stage — RANSAC inliers, pose refinement, bundle adjustment — minimizes or thresholds this quantity.

Reprojection error in pixels is the field's shared objective function. Mapping minimizes it over all cameras and points jointly (bundle adjustment); localization minimizes it over one camera's pose with the map fixed.

Coordinate frames — where beginners drown

A production VPS juggles at least four frames: world/map frame (often georegistered: aligned to Earth via GPS priors or surveyed control points, so poses convert to latitude/longitude/altitude + heading), camera frame, the device's VIO/odometry frame (arbitrary origin at session start, drifts over time), and gravity-aligned ENU (East-North-Up) for anything user-facing. The VPS fix is precisely the transform that pins the drifting odometry frame to the world frame. Write the frames down; most integration bugs are frame bugs, and most of those are "inverse of the transform you meant."

The PnP problem

Perspective-n-Point: given n correspondences between 3D map points and 2D pixels, plus intrinsics K, recover [R|t]. The minimal case is P3P — three correspondences give up to four solutions, disambiguated by a fourth point (geometry traceable to Grunert, 1841). EPnP solves n ≥ 4 in O(n). Standard practice: P3P inside RANSAC to find inliers and a rough pose, then Levenberg–Marquardt refinement on all inliers' reprojection error. Phones add a shortcut: the IMU gives gravity, pinning two rotational DoF, so pose search shrinks from 6-DoF to 4, making RANSAC dramatically faster and more robust.

RANSAC — trust arithmetic

Random Sample Consensus (Fischler & Bolles, 1981 — a paper literally written about camera pose estimation): repeatedly fit a model to a minimal random sample, count how many correspondences agree within a pixel threshold, keep the best consensus set. With inlier ratio w and sample size s, the iterations needed for confidence p follow N = log(1−p)/log(1−wˢ) — which is why s matters so much: P3P's s=3 tolerates far dirtier match sets than any larger minimal problem. Modern variants (LO-RANSAC, MAGSAC++, PROSAC) refine locally, marginalize the threshold, and exploit match-quality ordering. The one-line summary an expert carries: matching proposes, RANSAC disposes.

Scatter plot with a fitted line, a dashed tolerance band, orange inlier points inside the band and grey outliers outside it
RANSAC in one picture: a hypothesis (the line), a tolerance band, orange inliers voting for it, grey outliers ignored. Replace the line with a camera pose and the dots with feature matches — this is exactly how a VPS chooses its answer. (Wikimedia Commons, CC BY-SA 4.0)
Expert intuition #2. A VPS never needs "image looks similar" to be reliable. It needs a few dozen geometrically consistent correspondences to survive RANSAC. This is why visual localization is trustworthy in a way that pure embedding similarity is not: the 3D geometry acts as a proof-of-work that similarity cannot fake.

03The two-phase architecture

Every serious VPS — Google's, Niantic's, and the one you could build with open source this weekend — has the same shape: an offline mapping pipeline that turns imagery into a localizable 3D model, and an online localization service that turns one query image into a pose in a few hundred milliseconds.

Build the map once, slowly and expensively. Answer queries forever, fast and cheaply. It is the same shape as a search engine: crawl offline, serve online — and whoever owns the index owns the business.
MAPPING — offline, heavy, per-venue or per-planet Imagery capture survey rigs · phones · crowdsourced scans Feature extraction SuperPoint / SIFT keypoints + descriptors Matching + SfM COLMAP: triangulate, bundle-adjust Georegistration align to Earth frame, fix scale (GPS/GCPs) THE MAP 3D points + descriptors + retrieval index LOCALIZATION — online, ~100–300 ms per query Query image + intrinsics, gravity, coarse GPS prior Retrieval global descriptor → top-k map images 2D–3D matching local features vs retrieved map points PnP + RANSAC P3P minimal solver, inlier consensus 6-DoF pose refined (LM) + confidence/inliers the map serves every query Hierarchical localization ("hloc") — the reference architecture of the modern VPS (Sarlin et al., 2019)
The canonical two-phase VPS. Mapping is expensive and infrequent; localization is cheap and constant. The asymmetry is the business model: whoever owns the map owns the service.

Why the hierarchy (retrieval first, matching second)? A city-scale map holds hundreds of millions of 3D points; matching a query against all of them is both intractable and self-defeating — with that many candidates, wrong-but-plausible matches swamp RANSAC (perceptual aliasing). Retrieval shrinks the search to a few dozen relevant map images, restoring both speed and precision. Coarse-to-fine is not an optimization; it is what makes city scale possible at all.

Expert intuition #3. Follow the freshness gradient. The world changes: facades get repainted, stores change signage, seasons repaint everything (Section 10). A VPS is therefore never "done" — it is a living index with an ingestion pipeline, exactly like a web search index. Evaluate any VPS vendor on their re-mapping loop before their accuracy number.

04Mapping — structure from motion

Structure from Motion (SfM) takes an unordered pile of images and recovers both the 3D structure (points) and the motion (camera poses) that produced them. The reference implementation is COLMAP (Schönberger & Frahm, 2016) — open source, battle-tested, and the substrate of most academic and many commercial pipelines.

Mapping means: photograph the place from many angles, let software spot the same physical details across photos, and triangulate each detail into a 3D dot. Every dot also remembers what it looks like — and that memory is what tomorrow's queries will match against.

The SfM loop

  1. Extract features from every image: keypoints (where) + descriptors (what it looks like). Classically SIFT; in modern pipelines a learned detector like SuperPoint (Section 6).
  2. Match pairs of images. Exhaustive for small sets; for large sets, retrieval or GPS priors propose candidate pairs. Verify each pair geometrically with epipolar RANSAC.
  3. Initialize from one well-conditioned pair (wide baseline, many inliers): recover relative pose, triangulate initial points.
  4. Incrementally register each new image via PnP against the growing point cloud, triangulate new points, and periodically run bundle adjustment.

Bundle adjustment — the gold standard

min{Rj, tj, Xi}   Σi,j ρ( ‖ π(Kj[Rj|tj]Xi) − xij ‖² ) jointly optimize all camera poses and all 3D points to minimize robustified (ρ = Huber/Cauchy) total reprojection error; solved by sparse Levenberg–Marquardt with the Schur complement trick (points marginalized out), e.g. in Ceres Solver

BA is what makes SfM maps metric-grade: errors are distributed globally instead of accumulating. The Schur complement exploits the structure (points outnumber cameras 1000:1 and don't interact directly) so million-point problems solve in minutes.

Two facts that separate experts from tourists

  • Monocular SfM is scale-blind. From images alone, a cathedral and its perfect 10:1 miniature are indistinguishable. Absolute scale must be injected: GPS priors on camera positions, surveyed ground-control points, known-size objects, stereo baselines, or IMU integration. Georegistration — a similarity transform (7-DoF: rotation, translation, scale) aligning the SfM frame to Earth — is what turns a reconstruction into a positioning map with lat/long/altitude output.
  • The map is not the point cloud you can see. The localizable map is: 3D points plus their visual descriptors plus the covisibility graph (which points are seen together from where) plus a retrieval index of the mapping images' global descriptors. The pretty dense mesh is a byproduct; localization runs on the sparse, descriptor-bearing skeleton.
A San Francisco street intersection rendered as a dense purple and orange point cloud from above
What a machine's memory of a street looks like: a San Francisco intersection as a point cloud (captured here by an Ouster LiDAR). SfM builds a sparser cousin of this from plain photographs — with a visual descriptor attached to every point. (Wikimedia Commons, CC BY 4.0)

Map sources in the wild

SourceExampleCharacter
Purpose-built survey fleetsGoogle Street View vehicles + Trekker rigsCalibrated rigs, LiDAR + GPS/INS ground truth, consistent global coverage, expensive, slow refresh
Crowdsourced scansNiantic (Pokémon GO / Ingress player scans, Scaniverse)Phone-quality, massive volume, biased to points of interest, freshness for free where players go
Developer/venue scansImmersal SDK, Snap Custom LandmarkersA person walks the venue with a phone; minutes-to-hours to map; per-venue quality control
Existing imagery corporaApple Look Around; aerial/satellite for coarse layersReuses fleet investment; aerial-to-ground cross-view matching is an active research area
A photographed skull beside its 3D reconstruction with vertex color and plain geometry
Photographs in, 3D out: an SfM reconstruction (Bundler) beside its source photo — the same pipeline, at tabletop scale. (Wikimedia Commons, CC BY-SA 4.0)
A georeferenced 3D terrain model of a rocky landscape reconstructed from drone photos
And at landscape scale: a drone-flown, georeferenced photogrammetry model — SfM plus injected scale and Earth alignment. (Wikimedia Commons, CC BY-SA 3.0)
Scale reality check. A raw SfM map costs on the order of gigabytes per km² (millions of points × 100+ bytes of descriptor each). Production systems compress aggressively: descriptor quantization (product quantization to a few bytes), point pruning to a minimal covering subset (scene compression can keep ~1–5% of points with modest accuracy loss), and tiling so a query only ever touches a neighborhood. Storage-vs-recall is a first-order design tradeoff, not an afterthought.

05Localization — from one image to a pose

Localizing is three shrinking questions. Which part of town? — retrieval. Which details match? — feature matching. Where must the camera stand so that everything lines up? — pose solving. And one honesty meter: the inlier count. Too few, and the correct answer is "no fix."
planet-scale map one map tile (~100 m) top-10 map images ~500 2D–3D matches one pose GPS / cell / WiFi prior picks the tile retrieval — global-descriptor search local matching (SuperPoint + LightGlue) P3P + RANSAC keeps ~100 true inliers inliers below threshold → report "no fix" — never a guess
The funnel that makes planet scale possible: each stage cuts the candidate space by orders of magnitude before the expensive geometry runs.

The online path, stage by stage, with the design choices at each:

Stage 0 — the query package

A production query is never just pixels. It carries: calibrated intrinsics (from ARKit/ARCore), gravity direction (IMU) which pins roll/pitch, a coarse position prior (GPS, cell, WiFi — selects which map tile to even consider), and often several frames rather than one. Using priors is not cheating; it is what makes planet scale feasible: GPS narrows the earth to ~100 m, retrieval narrows 100 m to ~10 images, matching narrows 10 images to one pose.

Stage 1 — image retrieval (coarse)

Encode the query into a single global descriptor vector, nearest-neighbor search against the map images' descriptors. The lineage: bag-of-visual-words and VLAD (handcrafted aggregation) → NetVLAD (2016; a CNN with a learnable VLAD pooling layer, trained on Street View time-lapse triplets — the breakthrough that made retrieval robust to day/season change) → AP-GeM, DELG → transformer/foundation-model era: AnyLoc, MixVPR, SALAD built on DINOv2 self-supervised features, which currently dominate place-recognition benchmarks. Retrieval quality gates everything downstream: if the right map images are not in the top-k, no matcher can save the query.

Stage 2 — 2D–3D correspondence (fine)

Extract local features from the query; match them against features of the retrieved map images; each map feature is tied to a triangulated 3D point, so 2D–2D matches lift to 2D–3D correspondences. Cluster retrieved images by covisibility so matches accumulate into one consistent local scene rather than several rival hypotheses.

Stage 3 — pose solving

P3P inside RANSAC (gravity-aided if available) → inlier set → Levenberg–Marquardt refinement of the pose on all inliers. Output: [R|t], inlier count, and reprojection statistics. The inlier count is the confidence signal: below a threshold (commonly a few dozen), a production system reports "no fix" rather than a guess — a wrong pose confidently delivered is far worse than none, because downstream fusion (Section 8) will propagate it.

Failure taxonomy — where queries die

StageFailureSymptomPrimary fix
RetrievalAppearance gap (night query, day map)Right place absent from top-kCondition-robust global descriptors; map both conditions
RetrievalPerceptual aliasing (identical corridors, chain-store facades)Wrong-but-similar place retrievedPosition priors; geometric verification of retrieval
MatchingTexture-poor or repetitive surfacesFew or structured-wrong matchesLearned matchers (context helps); denser features; lines/planes
PnPDegenerate geometry (all points coplanar/distant)Pose ambiguity, huge covarianceMulti-frame queries; report covariance honestly
MapScene changed since mappingConsistent mismatch, low inliers everywhereFreshness pipeline; change detection; re-map triggers
Expert intuition #4. Read a localization system like a funnel and instrument every stage. "It fails at night" is not a diagnosis; "night queries lose 80% of retrieval recall@10 but matched pairs still verify" is — and it tells you to fix retrieval, not the matcher. The stages are separable, measurable, and independently upgradeable; that modularity is the hloc architecture's enduring advantage over end-to-end alternatives.

06Features and matching — the forty-year arms race

Old way: hand-written rules decide whether two patches of pixels look alike. New way: networks learn what matters and read the whole image before deciding any single match. Each generation survives worse lighting and wilder viewpoint change than the last.
handcrafted — math by hand learned — networks + context Harris · 1988 SIFT · 1999 SURF · 2006 ORB · 2011 SuperPoint · 2018 SuperGlue · 2020 LoFTR · 2021 LightGlue · 2023 MASt3R · 2024 the one-sentence law of this timeline: invariance moves from hand-designed math into learned weights, decisions from lone points into whole-image context
Four decades of matching, schematic spacing. Everything left of the divider is arithmetic on gradients; everything right of it is learned.

Handcrafted era

  • Harris corners (1988) — where gradients vary in two directions; detection only.
  • SIFT (Lowe, 1999/2004) — the field's foundation stone: scale-space extrema detection + 128-D gradient-histogram descriptor, invariant to scale/rotation and robust to moderate viewpoint and lighting change. Still a respectable baseline for mapping; COLMAP's default.
  • SURF (2006) — faster SIFT approximation. ORB (2011) — binary, real-time, powers ORB-SLAM; weak under strong appearance change.
Three stacked views of a Prague church with magenta SIFT keypoints, progressively filtered from noisy to stable
SIFT keypoints on a Prague church — detected everywhere (top), then filtered for contrast and stability (middle, bottom). Every surviving dot carries a descriptor: a fingerprint of its neighborhood, ready to be matched years later. (Wikimedia Commons, CC BY 3.0)

Learned era

  • SuperPoint (DeTone et al., 2018) — self-supervised CNN emitting keypoints + 256-D descriptors in one pass; trained via "homographic adaptation" (warp images, demand consistency). The workhorse detector of modern VPS.
  • D2-Net, R2D2, DISK, ALIKED, XFeat (2019–2024) — variations on detect-and-describe: describe-then-detect, reliability-aware training, differentiable keypoints, lighter/faster backbones for edge deployment.

Matching: from arithmetic to attention

  • Nearest neighbor + Lowe ratio test — accept a match only if the best descriptor distance is <~0.8× the second best. Simple, still everywhere.
  • SuperGlue (Sarlin et al., 2020) — a graph neural network with self- and cross-attention over both images' keypoints, solving matching as partial assignment (Sinkhorn). Matches with context — a keypoint's neighbors help decide its correspondence — nearly doubling hard-condition localization recall when it appeared.
  • LightGlue (Lindenberger et al., 2023) — SuperGlue accuracy at a fraction of the cost via early-exit on easy pairs and pruning of unmatchable points. The current default pairing: SuperPoint + LightGlue.
  • Dense/detector-free: LoFTR (2021), RoMa (2024) — match at feature-map level with transformers, no keypoints at all; strongest on texture-poor scenes, at higher compute cost.
  • Foundation 3D era: DUSt3R / MASt3R (2024) — transformers that regress 3D pointmaps (and matches) directly from image pairs without calibration, collapsing parts of the classic SfM pipeline into a single forward pass; MASt3R-SfM and successors are re-plumbing mapping itself.
Two photographs of a church taken from different positions, joined side by side with green and red correspondence lines connecting matched features
Matching made visible: two views of the same church, correspondence lines drawn between detected features, after geometric (RANSAC) verification. Sets of lines like these — lifted to the map's 3D points — are what a pose is solved from. (Wikimedia Commons, CC BY-SA 3.0)
Expert intuition #5. The evolutionary logic of this entire subfield is one sentence: move invariance from hand-designed math into learned weights, and move decisions from per-point independence into whole-image context. Each landmark (SIFT → SuperPoint → SuperGlue → LoFTR → MASt3R) is one more step along exactly that line. Predict the next paper by extrapolating it.

07Alternative paradigms — and why the classic pipeline still wins

Three rival ideas have challenged the classic pipeline: let a network guess the pose directly (failed — it memorizes, it doesn't measure), let a network memorize the scene's 3D shape and keep the geometry solver (works beautifully for a single building), or make the map photorealistic and search inside it (promising, still young). At city scale, the classic pipeline still beats all three.

Absolute pose regression (APR)

PoseNet (Kendall et al., 2015): train a CNN to map image → 6-DoF pose directly. Elegant, fast, and — as Sattler et al. (2019) demonstrated — fundamentally limited: APR behaves like sophisticated image retrieval, interpolating among training poses rather than reasoning geometrically, so it fails to extrapolate to novel viewpoints and trails structure-based methods by an order of magnitude of accuracy. Verdict: historically important, production-irrelevant.

Scene coordinate regression (SCR)

Instead of regressing the pose, regress each pixel's 3D world coordinate, then solve PnP+RANSAC on the predictions — keeping the geometric engine but replacing the explicit descriptor map with a network that has memorized the scene. Line: SCoRe Forests (2013) → DSAC* (differentiable RANSAC, Brachmann & Rother) → ACE (2023): mapping a new scene in ~5 minutes with a 4 MB network, no depth needed, state-of-the-art in small-to-mid scenes → ACE-G (2025): query pre-training for generalization. The industrial home of this line is Niantic Spatial's research group (nianticspatial.com/research), which is betting on SCR and its descendants as the scalable map format; the same group's map-free relocalization (2022) goes further still — metric pose relative to a single reference photo, no map at all, the natural fit for pop-up AR at places nobody pre-scanned. Weaknesses: scale (city-level SCR remains open) and the retrain-on-change problem. For room-to-building scale with a fixed scene, SCR is the modern dark horse — an expert should know it well.

Implicit/neural maps

NeRF-based localization (iNeRF: invert a radiance field by gradient descent on photometric error) and 3D Gaussian Splatting-based relocalization replace the point cloud with a differentiable renderer: localize by "render-and-compare." Attractive properties: photorealistic maps double as content, analysis-by-synthesis handles viewpoint gracefully. Current status: compelling research, not yet at production robustness/scale; splatting's speed is rapidly closing the practicality gap, and hybrid schemes (feature-based init + render-and-compare refinement) are the likely landing zone.

The NeRF pipeline diagram: 5D position and direction input to a network producing color and density, volume-rendered and compared against ground truth
The NeRF idea from the original paper: a network maps position + view direction to color + density; rays are volume-rendered and compared to real photos. Localization inverts this — adjust the camera until the render matches what you see. (NeRF authors, MIT license, via Wikimedia Commons)
A ruined tile-roofed house rendered photorealistically in a Gaussian splatting viewer with performance graphs overlaid
A 3D Gaussian Splatting viewer rendering a drone-scanned ruin in real time — 20 million splat instances, milliseconds per frame. Speed is what moved render-and-compare from paper to plausible. (Wikimedia Commons, CC BY-SA 4.0)
A garden fountain reconstructed by Gaussian splatting, photorealistic at the center with soft smeared geometry at the edges
A phone-captured garden as splats: photoreal at the well-observed center, soft and smeared at the edges — the characteristic failure texture of radiance-field maps. (Wikimedia Commons, CC BY-SA 4.0)
ParadigmMapAccuracyCity scaleUpdate on changeStatus
Structure-based (hloc)SfM points + descriptorscm–dmProven (planet)Incremental re-mapProduction default
APR (PoseNet line)Network weightsm-levelNoRetrainSuperseded
SCR (ACE line)Small networkcmOpen problemRetrain (fast)Strong niche
Neural rendering (NeRF/3DGS)Radiance field / splatscm (refinement)EmergingPartial re-fitResearch → hybrid

08VPS + VIO — how production AR actually works

The phone tracks its own motion smoothly but slowly wanders off course. The VPS occasionally checks the camera view against the world map and nudges the track back onto it — like a hiker who counts steps between trail signs, and trusts the signs.

No shipping system calls the VPS every frame. The division of labor:

  • On-device VIO (visual-inertial odometry — ARKit/ARCore's core): fuses camera tracking with IMU integration to deliver smooth 6-DoF motion at 30–60 Hz with low latency. Its flaw: the origin is arbitrary and the trajectory drifts (roughly ~1% of distance traveled, worse in feature-poor spaces), and it knows nothing of the world frame.
  • VPS fixes — occasional (on session start, on demand, every few seconds-to-minutes, or when drift covariance grows): each fix is an absolute pose measurement in the world frame.
  • Fusion — an extended Kalman filter or sliding-window pose-graph estimates the transform world ← odometry, treating VPS fixes as measurements with covariance and outlier gating (a bad fix must be rejectable — this is why honest confidence reporting in Section 5 matters). Corrections are applied gently (blended over frames) so virtual content never visibly teleports.
true path (world frame) VIO alone — error compounds (~1% of distance) VPS fix VPS fix smooth 60 Hz local tracking (VIO) + occasional absolute fixes (VPS) = continuous, drift-free, world-anchored pose
Why 200 ms of VPS latency is acceptable: the user rides the smooth VIO track; the VPS merely re-pins that track to the world every so often.
ORB-SLAM2 running: camera frames with green tracked feature points on a building, beside the sparse 3D map and estimated camera pose
The on-device half, live: a visual SLAM system (ORB-SLAM2) tracking features on the camera view (left) while building and following its sparse 3D map (right). Swap the self-built map for a downloaded VPS map and this is relocalization. (Wikimedia Commons, CC BY-SA 4.0)

This architecture is why "VPS latency" of 200 ms is acceptable: the user experiences VIO's latency (~ms), while VPS merely re-anchors the frame occasionally. It is also the template for robotics: swap ARKit for a LiDAR-inertial odometry stack, keep the same global-fix logic.

Anchors — the content layer

An anchor is a named pose in the world frame to which content is attached ("the dragon stands at this plaza corner, facing the fountain"). Persistence (content survives sessions) and sharing (two users see the same dragon in the same spot) both reduce to: everyone localizes into the same map frame, anchors live in that frame. Cloud anchors, geospatial anchors, location anchors — every vendor's flavor is this one idea.

Expert intuition #6. Think of the VPS as GPS for the camera: an occasional absolute fix that a local dead-reckoning system consumes. The system-design questions are then familiar from GNSS engineering — fix rate vs. drift rate, outlier rejection, covariance-honest fusion — and that mental mapping lets you reuse forty years of navigation literature.

09Production systems survey

The engineering is roughly the same everywhere; the difference is whose cameras built the map. Google drove the streets, Niantic's players walked them, Apple flew its own fleet, Immersal walks your venue for you. Microsoft had no cameras of its own — and its service is the one that died.
SystemMap sourceCoverage modelAccessNotes
Google — ARCore Geospatial API (VPS since 2022)Street View corpus (vehicle + Trekker imagery)Outdoors, ~100+ countries wherever Street View existsARCore (Android/iOS/Unity), free tiersThe planet-scale reference. Geospatial anchors (lat/long/alt), Streetscape Geometry (building/terrain meshes), Scene Semantics. Accuracy commonly dm-level position, ~1° heading in well-mapped streetscapes.
Niantic — Lightship VPS (2022)Crowdsourced: Pokémon GO/Ingress player scans, Scaniverse app, developer surveysPoint-of-interest–centric "VPS-activated locations" (1M+ claimed), city meshes in select areasLightship ARDK (Unity), 8th Wall (WebAR)The crowdsourcing model at maximum. In 2025 Niantic sold its games business to Scopely and re-founded as Niantic Spatial around the map/VPS asset; announced "Large Geospatial Model" ambition (2024) — foundation-model positioning on top of the scan corpus. Its research arm publishes the strongest industrial localization line: ACE/ACE-G scene coordinate regression, map-free relocalization, cross-view splatting.
Apple — ARKit Location Anchors (ARGeoAnchor, iOS 14, 2020)Apple Maps "Look Around" fleet imagerySupported cities list (US, Tokyo, London, and growing)ARKit (Swift), on Apple devices onlyTight OS integration, high-quality fleet data, conservative coverage. The same capability underlies AR walking directions in Apple Maps.
Immersal (acq. by Hexagon, 2021)Developer/venue scans via SDK or dronePer-venue: malls, airports, factories, stadiumsSDK (Unity, native), REST mapping APIThe leading independent venue-VPS vendor; surveying-grade parent company; strong in industrial/enterprise deployments.
Snap — Custom LandmarkersCreator phone scans + Snap's City Painter city meshesLandmark/venue-centricLens StudioOptimized for AR lenses at famous places; consumer-creative rather than infrastructure positioning.
Microsoft — Azure Spatial AnchorsSession feature maps (not a global map)Per-space anchorsRetired November 2024 — instructive: cross-platform anchor service without a proprietary map corpus proved a weak moat. The map is the business.
OthersMultiSet AI (commercial venue-scan VPS reaching consumer smart glasses, phones, and robots), Sturfee (satellite-imagery-derived VPS), Naver Labs (Korea, indoor+outdoor, strong research group and the Kapture toolset), Meta (research: Project Aria glasses corpora, LSD/Aria datasets feeding future wearable localization), automotive lane-level relocalization (Mobileye REM crowdsourced maps — VPS logic at highway scale).
A Google Street View car with its roof-mounted camera mast raised
The map moat on four wheels: a Street View capture car, camera mast up. Google's VPS exists because this fleet photographed the world's streets first — and keeps photographing them. (Wikimedia Commons, CC BY 2.0)
A person walking a boardwalk wearing the Google Street View Trekker backpack with its spherical camera head
Where cars cannot go, the map walks: the Street View Trekker backpack extends the fleet to trails, interiors, and alleys. (Wikimedia Commons, CC BY-SA 2.0)
An Apple Maps survey car with a roof-mounted camera and LiDAR mast driving a narrow Japanese street
Apple's answer: a Look Around survey car threading a narrow street in Japan — the imagery behind ARKit's location anchors. (Wikimedia Commons, CC BY-SA 4.0)
Four people standing on a street corner, each absorbed in their phone, playing Pokémon GO
And the third moat model needs no vehicles at all: Pokémon GO players, Stockholm 2016. Every scan-enabled play session is a mapping sortie — Niantic's fleet is its audience. (Wikimedia Commons, CC BY 4.0)
Expert intuition #7 — the strategic read. Every durable VPS business owns a defensible imagery/refresh loop: Google has cars, Niantic has players, Apple has its fleet + devices, Immersal has enterprise surveyors, Mobileye has customer vehicles. Azure Spatial Anchors, with no such loop, is the control experiment that failed. When evaluating a VPS play, the first diligence question is not "what accuracy?" but "whose cameras feed your map, and why do they keep doing it?"

10The hard problems

The world keeps repainting itself — night falls, snow lands, shopfronts change. The map is always a photograph of the past. Every hard problem in this section is one flavor of "past photo versus present view," plus the two questions any camera infrastructure must answer: who can reconstruct what from the data, and can the system be fooled.

1 · Long-term appearance change

Day↔night, summer↔winter, dry↔snow, renovation. The map was photographed under one condition; the query arrives under another. This is the canonical research problem — the Aachen Day-Night, RobotCar Seasons, and CMU Seasons benchmarks (Section 11) exist precisely to measure it. Mitigations: condition-robust learned features and retrieval (the main line of progress), mapping multiple conditions, semantic filtering (match on buildings, ignore vegetation — geometry stable, appearance volatile), and appearance-transfer augmentation at training time.

2 · Dynamic and ambiguous scenes

Crowds, vehicles, and merchandise occlude and pollute; identical corridors, glass, and chain-store facades alias. Mitigations: semantic masking of transient classes at both mapping and query time, multi-frame queries, position priors, and RANSAC's inherent outlier tolerance. Glass and mirrors remain genuinely unsolved for feature-based methods.

3 · Scale and freshness economics

Mapping the world once is capex; keeping it fresh is opex forever. The engineering answers: change detection (localization failure rates per tile are themselves the staleness signal), incremental map updates (register new imagery into the existing model rather than rebuilding), and crowdsourcing the refresh loop (Section 9's strategic read). Map compression (Section 4) governs serving cost.

4 · Privacy — both directions

  • Map privacy: SfM point clouds with descriptors are not anonymous geometry — Pittaluga et al. (2019) showed recognizable images can be reconstructed by inverting descriptors. Proposed defenses: lifting points to lines (Speciale et al., 2019) — later shown partially attackable (Chelani et al., 2021) — descriptor-free geometric matching (GoMatch line), and splitting sensitive computation between device and server. An active cat-and-mouse literature.
  • Query privacy: every localization uploads what the user's camera sees, tied to a precise pose. Production mitigations: on-device feature extraction (send descriptors, not pixels), ephemeral processing commitments, and on-device localization against downloaded map tiles (the strongest answer, adopted for sensitive venues).

5 · Integrity and spoofing

Rarely discussed, increasingly relevant as robots act on VPS output: a printed poster of a known facade is the visual analog of GPS spoofing. Defenses mirror GNSS thinking — multi-frame consistency with ego-motion, cross-checking against VIO and coarse radio position, and geometric liveness (a flat poster fails parallax checks across two frames).

11Benchmarks, metrics, and how to read a leaderboard

One score matters: out of 100 query photos, how many were placed within 25 cm and 2 degrees of the truth? And when reading any leaderboard, read the night-time column first — the daytime exam was solved years ago.

The metric

Visual localization is scored as recall at pose-error thresholds: the percentage of query images localized within both a position and an orientation bound. The community-standard triple (from the Long-Term Visual Localization benchmark, visuallocalization.net):

(0.25 m, 2°)  /  (0.5 m, 5°)  /  (5 m, 10°) high-precision / mid / coarse buckets — reported as three recall percentages, e.g. "89.6 / 95.8 / 98.9"

Read all three together: the first tells you AR-grade precision, the last tells you gross failure rate. A method with great (0.25 m) recall but poor (5 m) recall fails catastrophically when it fails — often worse in production than a method that degrades gracefully.

The benchmark canon

BenchmarkSettingWhat it stresses
Aachen Day-Night (v1.1)European old town; day map, day+night queriesThe day→night appearance gap; the single most-cited outdoor benchmark
RobotCar SeasonsSame Oxford route driven ~year-roundSeasonal/weather change from a vehicle; rain, dusk, snow, sun
Extended CMU SeasonsPittsburgh suburbs across seasonsVegetation change — foliage is the enemy
InLocUniversity buildings, RGB-D mapIndoor: texture-poor walls, repetitive structure, furniture churn
7-Scenes / 12-ScenesSmall RGB-D roomsThe SCR/APR playground; saturated for structure-based methods
Cambridge LandmarksFive outdoor landmarksHistoric APR benchmark; still used for method comparison

Reading a leaderboard like an expert

  • Check which stage differs between entries — many "new SOTA" rows are the same hloc skeleton with one component swapped. Attribute the gain to the component, not the brand.
  • Check compute honesty: dense matchers (RoMa-class) buy recall with 10–100× matching cost; a production system cares about recall per millisecond per dollar.
  • Check the night column first on Aachen — day columns have been near-saturated for years; hard conditions are where methods actually separate.
  • Distrust single-benchmark wins; the canonical methods (SuperPoint+LightGlue+hloc) win by being uniformly strong everywhere, which is what deployment requires.

12Build your own VPS — the practical recipe

One person, one phone, a weekend, and free software: walk the venue filming, let COLMAP turn the footage into a 3D map, wrap the matcher in a small service. The algorithms are a solved shopping list — capture discipline and an honest acceptance threshold are what decide success.

A venue-scale VPS (shop, mall, campus, factory) is a weekend-to-week project on open source. The reference stack:

ComponentToolRole
Pipeline frameworkhloc (github: cvg/Hierarchical-Localization)Glues everything below into mapping + localization scripts
SfM engineCOLMAP (+ pycolmap)Reconstruction, triangulation, bundle adjustment, PnP
Local featuresSuperPoint (or ALIKED/XFeat for lighter)Keypoints + descriptors
MatcherLightGlueRobust correspondence
RetrievalNetVLAD (or SALAD/DINOv2-based for harder conditions)Top-k map image shortlist
Dataset plumbingKapture (Naver) — optionalStandardized sensor/trajectory data format

The recipe

# 1 · CAPTURE — walk the venue; video → frames (1–2 fps), or 200–2000 photos.
#     Overlap generously; revisit from opposing directions; capture at the
#     times-of-day you expect queries. Loop closures matter more than count.

# 2 · MAP — hloc: extract features, match pairs, run COLMAP SfM
extract_features (superpoint)  →  pairs_from_retrieval (netvlad, top-40)
→  match_features (lightglue)  →  reconstruction (COLMAP)
# Output: sparse model (cameras.bin, images.bin, points3D.bin) + feature DB

# 3 · GEOREFERENCE — align the model to your venue frame:
#     mark 3+ surveyed control points in images, solve the 7-DoF similarity
#     (COLMAP model_aligner), or accept the arbitrary frame for AR-only use.

# 4 · LOCALIZE — per query image:
retrieval top-k  →  match query↔retrieved  →  lift to 2D–3D
→  pycolmap absolute_pose_estimation (P3P+RANSAC+refine)
# Returns: pose, num_inliers  →  accept if inliers ≥ ~50 (tune on your venue)

# 5 · SERVE — wrap step 4 in a service; client sends frame + intrinsics
#     (and gravity if available), receives pose + confidence.

The latency budget (single GPU server, 1080p query)

StageTypical costLevers
Feature extraction (query)10–30 msResolution, lighter detector, on-device extraction
Retrieval1–10 msANN index (FAISS), tile pre-filter by radio prior
Matching (k images)20–150 msk, LightGlue early-exit, covisibility clustering
PnP + RANSAC + refine2–15 msGravity prior, MAGSAC++, inlier threshold
Total (server-side)~50–200 msWell inside the VIO-fusion architecture's tolerance

Judgment calls that decide success

  • Capture discipline beats algorithm choice. A mediocre pipeline on thorough, multi-condition capture outperforms SOTA on a thin single-pass scan. Budget 70% of effort here.
  • Set the acceptance threshold empirically. Walk the venue with ground truth (or self-consistency checks: sequential queries must yield VIO-consistent poses) and choose the inlier cutoff that kills every wrong fix. False fixes are the product-killer.
  • Plan the refresh loop on day one. Decide what triggers re-mapping (failure-rate per zone), and make map updates incremental (register new images into the existing model — hloc/COLMAP support this) rather than rebuild-the-world.
  • On-device vs server: venue maps of a few hundred MB can ship to the device (privacy, latency, offline); city maps cannot. The hybrid — device extracts features, server matches — is the common production compromise.

13Applications and the business lens

Anywhere a machine or a person needs to know "exactly where am I and which way am I facing" — and GPS cannot answer — is a VPS market: inside buildings, dense cities, factories, and every AR experience that must stick to the world.
  • AR navigation & persistent content — airport/mall/hospital wayfinding with arrows painted on the floor through the camera; city-scale AR layers (Google Maps Live View is VPS-powered). The flagship consumer application.
  • Robotics last-meter — warehouse AMRs, delivery robots, and service robots use VPS-style relocalization to recover pose after kidnap/restart and to anchor to semantic infrastructure ("dock #7"), where GPS is absent and wheel+LiDAR odometry drifts.
  • Drones in GPS-denied/degraded settings — indoor inspection, under-bridge survey, urban canyons; and as GPS-jamming resilience: terrain/landmark-relative visual navigation is the civilian cousin of military visual-aided inertial navigation.
  • Industrial digital twins — technician points a tablet at a pump; the twin overlays torque specs and maintenance history. VPS is the registration layer between the twin and reality (Immersal/Hexagon's core market).
  • Automotive lane-level localization — camera-relocalization against crowdsourced sparse maps (Mobileye REM) delivers lane-keeping-grade position where GNSS cannot.
  • Accessibility — precise position + heading enables turn-by-turn guidance for blind and low-vision users indoors, a domain where meter-level error is the difference between usable and useless.
A phone showing an indoor floor plan with a green position blob marking the user's location
The indoor "blue dot" today (here radio-based): a floor plan and a position blob — meter-class, no heading. This is the experience a VPS upgrades to centimeters plus exact facing. (Wikimedia Commons, CC BY-SA 2.0)
Case study — defense-grade situational awareness on consumer hardware (Bilawal Sidhu, 2026). A $300 pair of Meta Ray-Ban glasses, an iPhone, and a commercial VPS platform (MultiSet AI): scan a building into a shared 3D map, anchor every device into that one frame, and each participant sees the live position and facing of everyone else — including through walls, because poses live in the shared model, not in the line of sight. The demo replicates the core of military systems of the Anduril EagleEye class, and its arc retells this report section by section: VPS where GPS fails (§1), one shared frame means shared anchors (§8), field-service annotation and indoor navigation as the sober use cases (§13), robots and drones in GPS-denied space as the trajectory, and the privacy double edge — the same map that guides you can track anyone through a venue in granular 3D (§10). Watch: youtube.com/watch?v=CU02AeUCIHc.

The economics in three sentences

Mapping is a fixed cost per venue/city; localization is a near-zero marginal cost per query — classic infrastructure economics with winner-take-most dynamics per geography. The moat is never the algorithm (open source is within a few percent of any proprietary stack); it is the imagery corpus and its refresh loop. Consequently the viable entries are: own a fleet (Google/Apple), own a crowd (Niantic/Mobileye), own the venue relationship (Immersal-style enterprise), or serve where giants won't — private facilities that will never let a fleet inside and want on-premises maps for confidentiality.

14Expert self-test

Fifteen questions. An expert answers ~13 without looking. Answers fold open.

1 · Why does a VPS provide orientation "for free" while GPS cannot?
The pose [R|t] recovered from 2D–3D correspondences via PnP inherently contains the full rotation matrix — orientation falls out of the same solve as position. GPS trilaterates a point from satellite ranges; a single antenna carries no orientation information at all (course-over-ground requires motion; compasses are magnetic, not GNSS).
2 · Why is monocular SfM scale-ambiguous, and name three ways scale is injected.
Projection is homogeneous — scaling the entire scene and all camera translations by λ produces identical images, so images alone cannot determine λ. Scale sources: GPS priors on camera positions, surveyed ground-control points, IMU integration (accelerometers measure metric acceleration); also stereo baselines and known-size objects.
3 · Why retrieval-then-match instead of matching against the whole map?
Compute (millions of points is intractable per query) and, more fundamentally, precision: against a huge candidate set, plausible-wrong descriptor matches multiply (perceptual aliasing) and can out-vote the true pose in RANSAC. Retrieval restores a small, mostly-correct candidate set.
4 · What does the RANSAC iteration formula N = log(1−p)/log(1−wˢ) imply about minimal solvers?
Iterations explode exponentially in sample size s. At inlier ratio w=0.3, s=3 (P3P) needs ~170 iterations for p=0.99; s=7 would need ~21,000. This is why minimal solvers (P3P over larger PnP variants inside the loop) are a cornerstone of robust geometry.
5 · Where is the camera center in world coordinates, given pose [R|t]?
C = −Rᵀt. ([R|t] maps world→camera; the center is the point mapping to the camera origin: RC + t = 0.)
6 · Why did SuperGlue outperform ratio-test matching so dramatically?
Ratio-test decides each match independently from descriptor distances alone. SuperGlue applies self- and cross-attention across all keypoints of both images, so spatial context and mutual consistency inform every assignment (solved as partial optimal transport) — recovering true matches with locally ambiguous descriptors and rejecting locally-similar false ones.
7 · Why is absolute pose regression (PoseNet-class) not used in production VPS?
Sattler et al. (2019) showed APR ≈ learned retrieval/interpolation among training poses: no geometric reasoning, poor extrapolation to novel viewpoints, meter-class accuracy, and a retrain-per-scene-change model. Structure-based methods beat it by roughly an order of magnitude.
8 · Your night-time recall collapses. Which stage do you check first and how?
Retrieval. Measure recall@k of the retrieval stage in isolation (is any correct map image in the top-k?). Night queries typically kill the global descriptor first. If retrieval holds but pose fails, then examine matching; if matches verify but PnP fails, examine geometry/degeneracy. Funnel instrumentation, stage by stage.
9 · Why does a phone's gravity estimate materially improve pose solving?
IMU gravity pins roll and pitch (2 of 3 rotational DoF), shrinking the search to 4-DoF. RANSAC then needs smaller samples/fewer iterations, degeneracies reduce, and wrong poses inconsistent with gravity are rejected outright — a large robustness gain in low-inlier conditions.
10 · What is the covisibility graph and why does localization use it?
The graph over map images/points recording which 3D points are observed together in which views. Localization clusters retrieved images by covisibility so 2D–3D matches accumulate into one coherent local scene hypothesis instead of split, mutually inconsistent match sets from different places.
11 · Why is a confidently wrong pose worse than no pose in production?
Downstream fusion (EKF/pose graph over VIO) ingests fixes as measurements; an undetected outlier fix corrupts the world–odometry transform and teleports/misaligns everything until enough good fixes wash it out. Systems therefore gate on inlier count/covariance and prefer "no fix."
12 · The privacy attack on SfM maps, and the defense arc?
Descriptor inversion: Pittaluga et al. (2019) reconstructed recognizable scene images from point clouds with descriptors. Defense: lift points to 3D lines to destroy exact positions (Speciale 2019); partially broken by density-analysis attacks (Chelani 2021); ongoing work: descriptor-free matching (geometry-only), on-device localization so raw maps/queries never cross the wire.
13 · Why did Azure Spatial Anchors die while Google/Niantic VPS thrived?
No proprietary imagery corpus or refresh loop — it hosted per-session feature maps, a commodity any SDK can replicate. Google (fleet), Niantic (crowd), Apple (fleet+devices) each own a self-refreshing map moat. The map, not the algorithm, is the business.
14 · When would you pick scene coordinate regression (ACE) over the hloc stack?
Fixed, bounded scene (room-to-building), need tiny maps (~MB) and fast setup (~minutes), comfortable retraining on scene change, and city-scale is out of scope. Bonus: no explicit descriptor database to invert (a privacy plus). For large, changing, or multi-condition environments, hloc still wins.
15 · Sketch the full production loop from camera frame to stable AR content.
VIO tracks at 60 Hz in a drifting local frame → periodically a frame (+ intrinsics, gravity, radio prior) goes to the VPS → retrieval → 2D–3D matching → P3P/RANSAC + refinement → absolute pose + confidence → fusion filter updates the world←odometry transform (outlier-gated, covariance-weighted, blended over frames) → anchors defined in the world frame render through the corrected transform, drift-free and shared across users.

15Glossary

6-DoF pose
Position (x,y,z) + orientation (roll,pitch,yaw); mathematically [R|t], R ∈ SO(3).
Anchor
A named pose in the map/world frame to which virtual content or semantics attach.
Bundle adjustment (BA)
Joint nonlinear least-squares refinement of all poses and 3D points minimizing total reprojection error.
Covisibility graph
Graph recording which map points are observed together from which images; used for clustering and consistency.
Descriptor
A vector summarizing local appearance around a keypoint (local, e.g. SuperPoint 256-D) or of a whole image (global, e.g. NetVLAD) for matching/retrieval.
Epipolar geometry
The two-view constraint (essential/fundamental matrix) relating corresponding points; the verification tool of pairwise matching.
Extrinsics / intrinsics
Pose [R|t] (world→camera) / internal projection parameters K plus lens distortion.
Georegistration
7-DoF similarity alignment (R, t, scale) of a reconstruction to an Earth-fixed frame.
hloc
Hierarchical Localization — the retrieval → match → PnP reference architecture and its open-source implementation.
Inlier
A correspondence consistent with the estimated model within threshold; inlier count ≈ pose confidence.
Keyframe
A selected representative frame retained in a map or SLAM graph.
Perceptual aliasing
Distinct places that look alike (corridors, chain stores), inducing confident wrong retrieval/matches.
PnP / P3P
Perspective-n-Point: pose from n 2D–3D correspondences with known intrinsics; P3P is the 3-point minimal case.
RANSAC
Random Sample Consensus — robust estimation by minimal-sample hypothesize-and-verify voting.
Relocalization
Recovering pose in an existing map after tracking loss or at session start — the VPS operation, viewed from SLAM.
Reprojection error
Pixel distance between a projected 3D point and its observed feature; the universal objective.
Retrieval (VPR)
Visual place recognition: finding which map images/places match a query, via global descriptors.
Scene coordinate regression
Regressing per-pixel 3D world coordinates with a scene-specific network, then PnP (DSAC*, ACE).
SfM
Structure from Motion — joint recovery of 3D structure and camera poses from image collections (COLMAP).
SLAM / VIO
Simultaneous Localization and Mapping / Visual-Inertial Odometry — online tracking (+mapping) in unknown space; VIO is the camera+IMU odometry core of ARKit/ARCore.
Triangulation
Intersecting rays from ≥2 posed views to place a 3D point.
WiFi CSI
Channel State Information — per-subcarrier amplitude/phase of the WiFi channel, a multipath fingerprint of a space; enables device-free sensing (presence, gesture, fall, respiration) and sub-meter radio positioning (IEEE 802.11bf).

16Reading list — the canon, in reading order

  1. 1981Fischler & Bolles — RANSAC ("Random Sample Consensus") — robust estimation, born from camera pose.
  2. 2004Lowe — SIFT ("Distinctive Image Features from Scale-Invariant Keypoints").
  3. 2004Hartley & Zisserman — Multiple View Geometry in Computer Vision — the field's textbook; chapters on projection, two-view geometry, and BA are the mathematical bedrock.
  4. 2009Lepetit et al. — EPnP — O(n) PnP.
  5. 2015Kendall et al. — PoseNet — absolute pose regression (read with its 2019 refutation, below).
  6. 2016Schönberger & Frahm — COLMAP ("Structure-from-Motion Revisited").
  7. 2016Arandjelović et al. — NetVLAD — learned place recognition.
  8. 2018DeTone et al. — SuperPoint — self-supervised keypoints.
  9. 2018Sattler et al. — Benchmarking 6DOF Outdoor Visual Localization in Changing Conditions — Aachen/RobotCar/CMU benchmark paper.
  10. 2019Sarlin et al. — From Coarse to Fine: Robust Hierarchical Localization at Large Scale — the hloc paper; the modern VPS blueprint.
  11. 2019Sattler et al. — Understanding the Limitations of CNN-based Absolute Camera Pose Regression — why APR ≈ retrieval.
  12. 2019Pittaluga et al. — Revealing Scenes by Inverting Structure from Motion Reconstructions — the privacy attack.
  13. 2020Sarlin et al. — SuperGlue — attention-based matching.
  14. 2021Sun et al. — LoFTR — detector-free transformer matching.
  15. 2023Lindenberger et al. — LightGlue — fast adaptive matching.
  16. 2022Arnold et al. — Map-free Visual Relocalization — metric pose from a single reference image, no map at all.
  17. 2023Brachmann et al. — ACE ("Accelerated Coordinate Encoding") — 5-minute scene coordinate mapping.
  18. 2023Keetha et al. — AnyLoc — foundation-model (DINOv2) place recognition.
  19. 2024Wang et al. / Leroy et al. — DUSt3R / MASt3R — pointmap regression; the foundation-model turn in 3D matching and SfM.

Live resources: visuallocalization.net (benchmark + leaderboard) · github.com/cvg/Hierarchical-Localization (hloc) · colmap.github.io (COLMAP docs) · Image Matching Challenge (CVPR, annual) for the state of matching. Watching: YouTube @bilawalsidhu — Bilawal Sidhu, formerly the Google product lead behind 3D Maps / ARCore Geospatial (the Google VPS of Section 9), now a 2M-subscriber explainer of reality capture, Gaussian splatting, and spatial intelligence; the moving-picture companion to this report.

The expert's one-paragraph compression. A VPS is a two-phase system: offline, structure-from-motion (COLMAP) turns imagery into a georegistered sparse 3D map whose points carry visual descriptors; online, a query image is localized by retrieval (NetVLAD-class global descriptors) → 2D–3D matching (SuperPoint features, LightGlue matching) → P3P inside RANSAC → nonlinear refinement, yielding a 6-DoF pose whose confidence is the inlier count. Reprojection error is the universal objective; scale must be injected from outside the images; retrieval-then-match is what makes city scale tractable; gravity priors and radio priors make mobile queries robust; VIO fusion turns occasional fixes into continuous drift-free tracking; long-term appearance change is the central research problem, benchmark recall at (0.25 m, 2°) the standard score; the map corpus and its refresh loop — not the algorithm — is the business moat; and descriptor inversion means the map itself is sensitive data. Hold those clauses and you can reconstruct the field.

17Plain speak — the whole report, retold simply

This section is the entire document again, in plain crisp language — no equations, no jargon that isn't translated on the spot. Read it in five minutes and you hold the shape of the field; the sixteen sections above supply the depth whenever you need it.

1 · What it is

A VPS tells a camera exactly where it is and which way it is pointing, by recognizing what it sees against a prepared 3D memory of the place. GPS guesses your dot from satellites — meters off, no idea which way you face, dead indoors. A VPS is accurate to centimeters, knows your facing, and works indoors — but only where someone has already built the map. Hold one idea above all: it is not a sensor, it is recognition against a map. One cousin worth knowing: WiFi CSI — the router's radio echo of a room. It can sense people moving even through walls, but it can never deliver the precise position-plus-facing a camera can; the two work best together.

2 · The geometry

A camera is a machine that drops 3D points onto a flat sensor. If you know which 3D points landed on which pixels, there is only one place the camera can be standing — and finding that place is the whole game. "Reprojection error" is simply how far off the landing predictions are for a guessed position; every algorithm in the field works to make that number small. Three good point-to-pixel pairs already give a candidate answer. And because many pairs are wrong, the answer is chosen by a voting trick: try many small random samples, keep the answer the most pairs agree with. Matching proposes; voting disposes.

3 · The two phases

Build the map once, slowly and expensively: photograph everything, compute a 3D model. Then answer questions forever, fast and cheaply: recognize, match, solve. It is the same shape as a search engine — crawl offline, serve online — and just like search, whoever owns the index owns the business.

4 · Making the map

Take many overlapping photos. Software finds the same small details across different photos and works out, simultaneously, where every photo was taken and where every detail sits in 3D. A final clean-up pass spreads the small errors evenly so nothing accumulates. One catch: photos alone cannot tell true size — a dollhouse and a house photograph identically — so real-world scale must come from outside: GPS, measured reference points, or the phone's motion sensors. The finished map is a cloud of 3D dots, each remembering what it looks like. That memory is what queries match against.

5 · Answering a query

Three shrinking questions. Which part of town? — a fast whole-image similarity search picks a handful of map photos. Which details match? — compare the small features between the query and those photos. Where must the camera stand so that everything lines up? — geometry gives the spot and the facing. Then the honesty meter: count how many matches truly agree with the answer. If too few agree, say "no fix." A confident wrong answer is the worst thing this system can produce, because everything downstream trusts it.

6 · Recognizing details

A "feature" is a small recognizable detail — a corner, an edge, a mark. For twenty years, hand-written math decided what counts as a detail and whether two look alike. Today, neural networks learn both — and they read the whole image for context before deciding any single match. Each generation of this technology survives worse conditions than the last: night, rain, snow, and big changes of viewpoint.

7 · The rival ideas

Three challengers have tried to replace the classic recipe. Let a network look at a photo and guess the position outright — it turned out to memorize rather than measure, and fails away from its training shots. Let a network memorize one scene's 3D shape so every pixel can name its 3D point — this genuinely works for a single building, but must be retrained when the scene changes and does not scale to cities. Make the map photorealistic and search inside it like a rendering — promising and young. At city scale, the classic recipe still beats all three.

8 · Living with the phone's own tracking

Phones already track their own motion smoothly, using the camera and motion sensors together — but like a step-counter, they slowly wander off course. The VPS plays the role of the trail sign: every so often, look up, check, correct. The user experiences only the smooth track; corrections are blended in so nothing visibly jumps. "Anchors" are named spots saved in the shared map where content lives — which is why two people's phones can show the same virtual object standing on the same real corner.

9 · Who runs the big ones

Google built its VPS from Street View — it covers much of the world's streets. Niantic built its map from millions of players' phone scans — strongest at interesting places. Apple flew and drove its own fleet — select cities, tightly integrated. Immersal walks your building for you — venues and factories. Microsoft ran an anchor service with no camera corpus of its own, and it is the one that shut down. The lesson in one line: the map is the moat, not the math.

10 · What is still hard

The map is a photograph of the past; every query is the present. Night, snow, and renovations break the resemblance. Identical corridors and repeated storefronts fool the recognizer. Keeping maps fresh costs money forever. Privacy cuts both ways: map data can be reverse-engineered back into images of the place, and every query shows a server what your camera sees. And the system can in principle be spoofed with a printed picture of a place — though a poster is flat, and flat things fail the parallax check when the camera moves.

11 · Keeping score

The standard exam: out of 100 query photos, how many were placed within 25 centimeters and 2 degrees of the truth? Also watch the loose 5-meter score — when the system misses, it should miss near, not teleport across town. And always read the night-time results first; the daytime exam was solved years ago.

12 · Build one yourself

One person, one phone, a weekend, free software. Film the venue walking slowly, from both directions, at the times of day you care about. Free tools turn the footage into a 3D map. A small program answers queries: similarity search, detail matching, geometry. Spend your effort where it counts — thorough filming beats clever algorithms — and set the "no fix" threshold strictly, so a wrong answer never escapes. Decide on day one how you will re-map when the venue changes, because it will.

13 · Where the money is

Anywhere someone or something needs "exactly where am I, facing which way" and GPS cannot answer: navigation arrows painted through the camera in malls, airports, and hospitals; robots finding their dock; drones where GPS is absent or jammed; a factory tablet that recognizes the machine it is pointed at; cars holding their lane. The cost model: expensive to map once, nearly free per query after — value concentrated exactly where GPS is blind.

14–16 · The wrap-up, plain

Test yourself with five one-breath questions: why does a VPS know your facing while GPS never can; why can photos alone not tell true size; why does matching against the whole map at once fail; why is "no fix" better than a wrong fix; why did the service without its own cameras die? Answer those cleanly and Section 14's full exam will go well. The vocabulary reduces to five items: pose = position + facing; features = recognizable details; structure-from-motion = photos in, 3D out; PnP + RANSAC = geometry + voting; hloc = the standard recipe wiring it all together. And if you read only four papers, read them in this order: SIFT, COLMAP, hloc, SuperGlue — the detail, the map, the recipe, the matcher.

The whole field in one breath: photograph the world into a 3D memory once; then let any camera ask "where am I?" and answer it by recognizing details, lining up geometry, and voting out the lies — honestly enough to say "I don't know" when it doesn't.