Data Sources

Connect to any geospatial source
via DuckDB extensions

GeoFMV's analytics layer is powered by DuckDB WASM โ€” an in-process analytical database that runs directly in the browser with no server round-trip. Install optional extensions to unlock cloud storage, spatial query engines, enterprise databases, and archive formats.

DuckDB WASM GDAL ST_Read Cloud-Native In-Browser Queries

Why DuckDB WASM?

Traditional analytics pipelines require a server-side database, a network request, and a response round-trip. DuckDB WASM compiles the entire analytical engine to WebAssembly and ships it with the GeoFMV client. Query millions of detection records, join them with remote GeoParquet contextual data, and render map features โ€” all without leaving the browser tab.

Engine
DuckDB WASM
Deployment
In-Browser / Client-Side
Base Format
Parquet, CSV, JSON
// Initialize DuckDB WASM + extensions
import * as duckdb from '@duckdb/duckdb-wasm';

const db = await duckdb.createInMemory();
const conn = await db.connect();

// Load spatial extension
await conn.query(`INSTALL spatial; LOAD spatial;`);

// Load cloud access extension
await conn.query(`INSTALL httpfs; LOAD httpfs;`);

// Query GeoFMV detection results
const result = await conn.query(`
  SELECT class_label, COUNT(*) as count,
    ST_Collect(geometry) as geom
  FROM detections.parquet
  WHERE confidence > 0.7
  GROUP BY class_label
`);
Available Extensions

Configure your data universe

Each extension is optional and loaded on demand. GeoFMV's settings dialog shows which are active and provides per-extension configuration.

๐ŸŒ

spatial extension

GDAL-powered spatial queries โ€” read and analyze any vector format
Core Geo

What it enables

โœ” ST_Read() โ€” load any GDAL-supported format directly in SQL
โœ” Spatial predicates: ST_Within, ST_Intersects, ST_Distance
โœ” GeoParquet columnar storage with spatial pushdown
โœ” FlatGeoBuf streaming for web-efficient vector delivery
โœ” WKT/WKB geometry serialization
โœ” CRS/projection transforms via PROJ

Supported Formats

GeoJSONGeoPackage (.gpkg) Shapefile (.shp)KML/KMZ GeoParquetFlatGeoBuf (.fgb) GPXCSV + WKT GeoTIFF (raster)WMS / WFS
-- Load detections from a GeoPackage
SELECT * FROM ST_Read('detections.gpkg');

-- Spatial join: detections within a building polygon
SELECT d.class_label, d.confidence,
       b.building_name
FROM   detections d, ST_Read('buildings.geojson') b
WHERE  ST_Within(d.geometry, b.geom);

-- Query remote GeoParquet with spatial filter
SELECT * FROM read_parquet(
  's3://my-bucket/contextual/roads.parquet'
)
WHERE ST_DWithin(geometry, ST_Point(-77.03, 38.89), 500);
โ˜๏ธ

httpfs extension

Direct access to remote files over HTTP, S3, Azure, and GCS
Cloud Access

What it enables

โœ” AWS S3 buckets (s3://) โ€” IAM or access key auth
โœ” Azure Blob Storage (az:// / abfs://)
โœ” Google Cloud Storage (gcs://)
โœ” HTTP/HTTPS with HTTP range requests (no full download)
โœ” Scan Parquet partition sets from S3 prefixes
โœ” MinIO and S3-compatible endpoints

Common Use Cases

Archived FMV Detection Exports Remote GeoParquet Cloud Sensor Databases FlatGeoBuf via HTTPS Partitioned Detection Logs
-- Configure S3 credentials
SET s3_region='us-east-1';
SET s3_access_key_id='AKI...';
SET s3_secret_access_key='...';

-- Query partitioned detection archive directly
SELECT date_trunc('day', timestamp_us) as day,
       class_label,
       COUNT(*) as detections
FROM read_parquet('s3://geofmv-archive/detections/**/*.parquet')
WHERE confidence > 0.8
GROUP BY 1, 2
ORDER BY day;

-- Azure: scan contextual overlay from Blob
SELECT * FROM ST_Read(
  'az://geofmv-container/overlays/aoi.geojson'
);
๐Ÿ—œ

zipfs extension

Virtual filesystem for ZIP archives โ€” including 3D Tiles (3TZ) containers
Archive Access

What it enables

โœ” Mount any .zip as a virtual read-only filesystem
โœ” Read .3tz (3D Tiles archive) tile index + metadata without extraction
โœ” Access zipped KMZ files: GeoFMV exports and contextual layers
โœ” Remote ZIPs via httpfs (combine with S3/HTTP access)
โœ” Multi-file archives: scan all Parquet files inside a zip

Common Use Cases

3D Tiles (3TZ) KMZ Overlays Zipped GeoPackage Bundles FMV Data Packages
-- Mount a local ZIP as a virtual filesystem
CALL mount_zip('fmv_export_bundle.zip', '/export');

-- Query Parquet files inside the ZIP
SELECT * FROM read_parquet('/export/detections/*.parquet');

-- Access 3D Tiles archive metadata
CALL mount_zip('terrain.3tz', '/tiles');
SELECT * FROM read_json('/tiles/tileset.json');

-- Remote ZIP via httpfs + zipfs combination
CALL mount_zip(
  's3://geofmv-archive/bundles/mission_42.zip',
  '/mission'
);
SELECT * FROM ST_Read('/mission/aoi.geojson');
๐Ÿ—„

sqlite_scanner extension

Direct read access to SQLite databases and OGC GeoPackage files
Local DB
โœ” Query .gpkg GeoPackage files exported from QGIS or ArcGIS Pro
โœ” Read SQLite-backed field-collection databases (Survey123, Fulcrum)
โœ” Join detection records with reference data in the same .gpkg
โœ” Attach multiple SQLite files in a single query
-- Attach a GeoPackage as a DuckDB database
ATTACH 'mission_detections.gpkg' AS gpkg (TYPE sqlite);

-- List tables in the GeoPackage
SHOW ALL TABLES;

-- Query accepted detections
SELECT class_label, confidence, geom
FROM  gpkg.detections
WHERE review_status = 'ACCEPTED'
  AND  confidence > 0.6;
๐Ÿ˜

postgres_scanner extension

Live read access to PostgreSQL / PostGIS enterprise geodatabases
Enterprise DB
โœ” Connect directly to PostGIS spatial databases (including Supabase)
โœ” Read enterprise geodatabases managed by ArcGIS Enterprise
โœ” Join GeoFMV detections with PostGIS reference layers in a single query
โœ” Uses PostgreSQL COPY protocol for high-throughput reads
-- Attach enterprise PostGIS geodatabase
ATTACH 'postgresql://gis_user:pass@db.org/geodb'
  AS ent_gdb (TYPE postgres);

-- Spatial join: detections + PostGIS parcels layer
SELECT d.class_label, p.parcel_id, p.owner
FROM   detections d
JOIN   ent_gdb.parcels p
  ON   ST_Within(d.geometry, p.geom)
WHERE d.review_status = 'ACCEPTED';
๐Ÿ”ต

azure extension

Native Azure Blob Storage and Data Lake access with managed identity support
Azure Cloud
โœ” Azure Blob Storage with connection string or SAS token authentication
โœ” Azure Data Lake Storage Gen2 (ADLS) hierarchical namespaces
โœ” Managed Identity authentication (no key exposure)
โœ” Scan Azure Blob Parquet partitions for batch detection archives
-- Configure Azure access
SET azure_storage_connection_string='DefaultEndpointsProtocol=https;...';

-- Read detection archive from Azure Blob
SELECT mission_id, COUNT(*) as detections
FROM read_parquet(
  'az://geofmv/detections/2026/**/*.parquet'
)
GROUP BY mission_id
ORDER BY detections DESC;
๐ŸงŠ

iceberg extension

Apache Iceberg table format โ€” time-travel queries on historical detection archives
Lakehouse
โœ” Query Iceberg tables on S3, GCS, or ADLS
โœ” Time-travel: query detection state at any historical snapshot
โœ” Schema evolution โ€” detection schema changes tracked in metadata
โœ” Efficient partition pruning for large detection archives (TB-scale)
-- Query current Iceberg detection table
SELECT * FROM iceberg_scan(
  's3://geofmv-lake/detections/'
)
WHERE class_label = 'vehicle'
  AND confidence > 0.85;

-- Time-travel: detections as of last week
SELECT * FROM iceberg_scan(
  's3://geofmv-lake/detections/',
  version => '2026-03-11T00:00:00'
);
Quick Reference

Extension ร— Data Source Matrix

Data Source Extension Protocol Auth Spatial Streaming
GeoPackage (.gpkg)spatial or sqlite_scannerLocal fileโ€”โœ”โ€”
GeoJSON / GeoParquetspatialFile / HTTPโ€”โœ”โœ”
Shapefile (.shp)spatialLocal fileโ€”โœ”โ€”
FlatGeoBuf (.fgb)spatialHTTP/HTTPSโ€”โœ”โœ”
AWS S3 Parquethttpfss3://IAM / Keyโœ” w/ spatialโœ”
Azure Blob Storageazureaz://Connection str / MIโœ” w/ spatialโœ”
Google Cloud Storagehttpfsgcs://Service accountโœ” w/ spatialโœ”
HTTP/HTTPS remote filehttpfshttps://โ€”โœ” w/ spatialโœ”
ZIP archive (local/remote)zipfsFile / s3://Via httpfsโœ” w/ spatialโ€”
3D Tiles archive (.3tz)zipfsFile / s3://Via httpfsMetadata onlyโ€”
SQLite / GeoPackage DBsqlite_scannerLocal fileโ€”โœ”โ€”
PostgreSQL / PostGISpostgres_scannerpostgresql://User/Passโœ”โœ”
Supabase PostGISpostgres_scannerpostgresql://User/Passโœ”โœ”
Apache Iceberg (S3/ADLS)icebergs3:// / az://Via httpfs/azureโœ” w/ spatialโœ”
CSV / TSV (DJI telemetry)Built-inLocal fileโ€”โ€”โ€”
JSON / NDJSONBuilt-inLocal / HTTPโ€”โ€”โœ”
ParquetBuilt-inLocal / s3://Via httpfsโœ” w/ spatialโœ”