Features

Everything you need for modern geospatial applications β€” from fast map services to spatial AI.

OGC Standard

Web Map Service (WMS 1.1.1 & 1.3.0)

Full WMS implementation that renders map tiles from your PostGIS vector data. Multi-layer compositing, transparent backgrounds, and configurable output formats.

  • GetCapabilities β€” Service metadata and layer discovery with ETag caching
  • GetMap β€” Render map images with multi-layer compositing
  • GetFeatureInfo β€” Click-to-query features at point locations
  • GetLegendGraphic β€” Zoom-aware legend images reflecting active rules
PNG WebP JPEG Up to 4096x4096 CQL Filters
# WMS GetMap request
GET /wms?
  SERVICE=WMS&
  REQUEST=GetMap&
  LAYERS=parcels,roads&
  BBOX=106.7,-6.3,106.9,-6.1&
  WIDTH=512&
  HEIGHT=512&
  FORMAT=image/webp&
  CQL_FILTER=zone='residential'

βœ“ 512x512 WebP rendered
OGC Standard

Web Feature Service (WFS 2.0)

Query, filter, and edit vector features directly. Full transactional support (WFS-T) with atomic operations, streaming responses for large datasets, and cursor-based pagination.

  • GetFeature β€” Query features with CQL filtering, BBOX, and pagination
  • DescribeFeatureType β€” Schema introspection in JSON
  • Transaction β€” Insert, Update, Delete with atomic rollback
  • Streaming β€” Chunked transfer for large result sets
WFS-T Cursor Pagination GeoJSON + GML Geometry Validation
# WFS GetFeature with filtering
GET /wfs?
  SERVICE=WFS&
  REQUEST=GetFeature&
  TYPENAMES=parcels&
  CQL_FILTER=area > 500&
  COUNT=100&
  OUTPUTFORMAT=application/json

# WFS-T: Insert a new feature
POST /wfs
  <Insert>...</Insert>

βœ“ 100 features returned
Modern Tiles

Mapbox Vector Tiles (MVT)

Serve vector tiles directly from PostGIS for client-side rendering with MapLibre GL JS, Mapbox GL, or OpenLayers. Smaller payloads, crisp rendering at any zoom, and dynamic client-side styling.

  • Direct from PostGIS β€” ST_AsMVT for efficient tile generation
  • Client-side rendering β€” Style in the browser with MapLibre GL
  • Adaptive simplification β€” Geometry simplified per zoom level
  • Attribute selection β€” Only include needed properties per tile
MapLibre GL Z/X/Y Tiles Protobuf Cacheable
# MVT tile request
GET /tiles/parcels/14/13358/8185.pbf

# MapLibre GL source config
{
  "type": "vector",
  "tiles": [
    "/tiles/parcels/{z}/{x}/{y}.pbf"
  ]
}

βœ“ Protobuf tile served
Raster

Raster & COG Serving

Serve raster data via WMS, WCS, and a dedicated tile API directly from Cloud Optimized GeoTIFFs. Point sampling, band statistics, and built-in colormaps β€” no pre-tiling or raster database required.

  • Tile API β€” Dedicated raster tile endpoint with PNG/WebP output alongside WMS and WCS access
  • Built-in colormaps β€” Viridis, Terrain, NDVI, Temperature, Bathymetry, Grayscale, or custom stops
  • Point sampling β€” Query pixel values at any coordinate via REST
  • Band statistics β€” Min, max, mean, stddev per band with preview and legend endpoints
COG WMS + WCS Tile API Colormaps Point Sampling
# Raster tile API
GET /api/v1/raster/elevation/tiles/
  14/13358/8185?colormap=terrain

# Point sampling
GET /api/v1/raster/elevation/point?
  lon=106.85&lat=-6.2
β†’ { "value": 847.3, "unit": "m" }

# Band statistics
GET /api/v1/raster/elevation/statistics
β†’ { "min": 0, "max": 3042, "mean": 612 }
Embedded GDAL

Data Import

Import spatial data directly through the web UI or API. Embedded GDAL means no external tools needed β€” upload your file and it lands in PostGIS, registered and ready to serve.

  • 20+ vector formats β€” Shapefile, GeoPackage, GeoJSON, KML, GPX, FlatGeobuf, GeoParquet, FileGDB, and more via embedded GDAL
  • Multi-layer detection β€” Auto-detect layers in complex files with selective import
  • Chunked upload β€” Resumable uploads for large files with progress tracking via SSE
  • CRS auto-detection β€” Reads source projection, reprojects to EPSG:4326
Shapefile GeoPackage GeoJSON GeoParquet FlatGeobuf File GDB GeoTIFF / COG MBTiles
# Upload via REST API
POST /api/v1/import/upload
  Content-Type: multipart/form-data
  file: parcels.gpkg

# Server auto-detects layers
{
  "layers": [
    { "name": "parcels", "features": 12450 },
    { "name": "roads", "features": 3200 }
  ]
}

βœ“ Imported 15,650 features in 4.2s
JSON Styles

Dynamic Styling

No SLD, no XML. Style your layers with clean JSON. Zoom-dependent properties, rule-based classification, categorized and graduated themes β€” all with live updates, no server restart needed.

  • Zoom interpolation β€” Stroke width, opacity, and colors vary by zoom via stops
  • Rule-based classification β€” CQL conditions map to different styles
  • Label engine β€” Point, line-following, and polygon labels with collision detection
  • MapLibre expressions β€” Auto-generate client-side MVT styles from your rules
Categorized Graduated Labels Zoom Stops Live Update
// JSON style with zoom stops
{
  "rules": [{
    "filter": "zone = 'residential'",
    "fill": {
      "color": "#4ade80",
      "opacity": 0.6
    },
    "stroke": {
      "width": {
        "stops": [[10, 0.5], [16, 2]]
      }
    },
    "label": {
      "field": "name",
      "size": 12
    }
  }]
}
Query Language

CQL Filtering

Filter features across WMS, WFS, and styles using Common Query Language. Attribute comparisons, pattern matching, spatial predicates β€” all parsed as a safe AST to prevent injection.

  • Comparison operators β€” =, !=, >, <, >=, <=, LIKE, IN, IS NULL
  • Logical operators β€” AND, OR, NOT with grouping
  • Spatial predicates β€” BBOX, INTERSECTS, WITHIN, CONTAINS, CROSSES
  • Safe parsing β€” AST-based evaluation prevents CQL injection
WMS Filters WFS Filters Style Rules Spatial Queries
# Attribute filtering
population > 1000000
zone = 'residential' AND area < 500
name LIKE 'North%'
type IN ('primary', 'secondary')

# Spatial filtering
BBOX(106.7, -6.3, 106.9, -6.1)
INTERSECTS(POLYGON((
  106.8 -6.2, 106.9 -6.2,
  106.9 -6.1, 106.8 -6.1,
  106.8 -6.2
)))

# Combined
zone = 'commercial' AND
  BBOX(106.7, -6.3, 106.9, -6.1)
Modern Standard

OGC API

Full implementation of the modern OGC API family β€” REST/JSON endpoints alongside classic WMS/WFS. Features, Tiles, Coverages, Records, and Processes (Enterprise) with OpenAPI documentation.

  • OGC API – Features β€” CRUD operations with CQL2-Text/JSON filtering, bbox, datetime, and pagination
  • OGC API – Tiles β€” Vector and raster tiles with TileMatrixSet metadata
  • OGC API – Coverages β€” Raster coverage access with band subsetting
  • OGC API – Records β€” Layer catalog with free-text and spatial search
  • OGC API – Processes β€” Async job execution mapped to plugin operations (Enterprise)
Features Tiles Coverages Records Processes
# OGC API Features β€” query with CQL2
GET /ogc/collections/parcels/items?
  filter=area > 500&
  bbox=106.7,-6.3,106.9,-6.1&
  limit=50

# OGC API Tiles
GET /ogc/collections/parcels/tiles/
  WebMercatorQuad/14/13358/8185

# Conformance + OpenAPI
GET /ogc/conformance
GET /ogc/api

βœ“ Full OGC API compliance
Catalog

STAC Catalog

Built-in SpatioTemporal Asset Catalog (STAC v1.1.0) for discovering and searching your raster and vector layers. Cross-collection search with spatial, temporal, and free-text filters.

  • Auto-catalog β€” All layers automatically exposed as STAC items with bbox and temporal extent
  • Cross-collection search β€” Search across all collections by bbox, datetime, IDs, or free text
  • STAC API v1.0.0 β€” Compatible with STAC Browser, PySTAC, and other STAC clients
  • Asset links β€” Direct links to WMS, WFS, MVT, and COG tile endpoints per item
STAC v1.1.0 Catalog Search Collections Items
# STAC catalog root
GET /stac/

# Search across collections
POST /stac/search
{
  "bbox": [106.7, -6.3, 106.9, -6.1],
  "datetime": "2024-01-01/..",
  "collections": ["raster"]
}

# Browse collection items
GET /stac/collections/vector/items

βœ“ Compatible with STAC Browser & PySTAC
Built-in

Authentication & Security

JWT authentication with HTTP-only cookies β€” immune to XSS token theft. Layer-level permissions, role-based access control, audit logging, and OWASP Top 10 compliance built in from day one.

  • JWT auth β€” RS256, ES256, HS256 with HTTP-only cookies (no localStorage)
  • Keycloak / OIDC β€” Enterprise SSO via OpenID Connect with JWKS auto-discovery
  • Layer permissions β€” View, Edit, Owner levels per user and group
  • Rate limiting β€” Configurable per-endpoint rate limits (auth, API, tiles, WMS, WFS groups)
JWT Keycloak / OIDC RBAC Rate Limiting Audit Log
# Layer permission levels
View   β†’ Read-only (WMS, WFS Get)
Edit   β†’ Read + Write (WFS-T)
Owner  β†’ Full control

# Security headers
Strict-Transport-Security
X-Content-Type-Options
X-Frame-Options
Content-Security-Policy

# OWASP compliance
βœ“ SQL injection: parameterized queries
βœ“ CQL injection: AST parsing
βœ“ XSS: HTTP-only cookies
βœ“ Memory safety: Rust
Performance

Multi-Layer Caching

Automatic tile and query caching with configurable TTLs. Community uses in-memory LRU (moka), Enterprise adds disk, Redis, and Redis Cluster backends. ETags for capabilities, smart cache keys for tiles.

  • Tile cache β€” Rendered images keyed by layer, BBOX, zoom, style, and CQL filter
  • Query cache β€” PostGIS feature results cached for repeat queries
  • Capabilities cache β€” GetCapabilities XML with ETag support
  • Per-layer control β€” Clear cache per layer or globally via API
Memory (moka) Disk Redis / Cluster ETag
# Cache hierarchy
Browser Cache (HTTP headers)
  ↓ cache miss
CDN/Proxy Cache
  ↓ cache miss
Tile Cache (moka / Redis)
  ↓ cache miss
Query Cache (feature results)
  ↓ cache miss
PostGIS (spatial index)

# config.toml
[cache.tile]
backend = "memory"
max_entries = 10000
ttl_seconds = 3600
Rust-Powered

Performance & Deployment

No JVM, no Python runtime, no external dependencies to manage. Single binary, sub-second startup, and efficient concurrent request handling via Tokio.

  • Single binary β€” All dependencies bundled (GDAL, GEOS, PROJ included)
  • Prometheus metrics β€” Built-in /metrics endpoint for monitoring with Grafana or any scraper
  • Health probes β€” /health and /ready endpoints for container orchestration
  • Chunked uploads β€” Large file import with resumable chunked upload and SSE progress
Single Binary Prometheus Health Probes Daemon Mode
# Supported platforms
Linux   x86_64  glibc 2.28+
macOS   arm64   Apple Silicon
WSL2    x86_64  Windows + WSL

# Just run it
$ ./geovertix serve
βœ“ WMS available at /wms
βœ“ WFS available at /wfs
βœ“ MVT available at /tiles
βœ“ API available at /api/v1
βœ“ Server ready

# Or as a daemon
$ ./geovertix serve    # daemonizes
$ ./geovertix stop     # graceful stop
$ ./geovertix restart  # zero-downtime
Enterprise Edition

Plugin Ecosystem

Extend GeoVertix with licensed plugins for geoprocessing, AI, 3D visualization, and more. Each plugin is a separate signed binary managed by the distributed task dispatcher.

Enterprise Plugin

Geoprocessing

Server-side spatial analysis on your PostGIS layers. Buffer, clip, union, intersect, dissolve, and more β€” all executed as async jobs with progress reporting and output layer registration.

  • Buffer β€” Create distance-based zones around features
  • Clip & Intersect β€” Overlay analysis between layers
  • Union & Dissolve β€” Merge and aggregate geometries
  • Spatial Join β€” Enrich features based on spatial relationships
  • Centroid & Voronoi β€” Geometric transformations
PostGIS Native Async Jobs Progress SSE Auto-register Output
# Buffer a layer by 500 meters
POST /api/v1/process
{
  "operation": "geoprocess.buffer",
  "params": {
    "layer_id": "abc-123",
    "distance": 500,
    "unit": "meters"
  }
}

βœ“ Job submitted β€” task_id: "def-456"
βœ“ Output layer registered as "roads_buffer_500m"
Enterprise Plugin

AI Inference

Serve pre-trained ONNX models for real-time and batch geospatial AI. Pixel classification, object detection, interactive segmentation (SAM), and location embeddings β€” all from a model registry with hot-reload.

  • Classification β€” Land use/land cover from Prithvi-EO, Clay, or custom models
  • Detection β€” Object detection with YOLOv8 (vehicles, buildings, ships)
  • Segmentation β€” Interactive SAM with point/bbox prompts, encoder caching
  • Embeddings β€” Location embeddings via SatCLIP with pgvector k-NN search
  • Temporal β€” Multi-date raster stacking (BTCHW/BCTHW) for change detection
ONNX Runtime Hot-Reload SAM pgvector Ollama / LLM
# Real-time classification tile
GET /api/v1/inference/tiles/
  lulc-unet/14/13358/8185
  ?layer_id=satellite_rgb

# Interactive SAM segmentation
POST /api/v1/inference/segment
{
  "model": "sam-vit-b",
  "prompts": [
    {"type": "point",
     "x": 106.85, "y": -6.2}
  ]
}

βœ“ Polygon returned (encoder cached)
Enterprise Plugin

GeoAI Agent

Describe what you want in plain language. The GeoAI agent translates your request into the right spatial operation with the right parameters β€” no GIS expertise required. Powered by a local LLM (Ollama) for complete data privacy.

  • Natural language dispatch β€” "Buffer the roads layer by 200 meters and clip it to the city boundary"
  • Multi-step chaining β€” Automatically sequences operations with output chaining
  • Conversational sessions β€” Follow-up questions reference previous results
  • Report generation β€” LLM-written markdown narratives from job results
  • Runs locally β€” Ollama backend keeps all data on your infrastructure
Local LLM Ollama Multi-Step Chains Data Privacy
# Chat with GeoAI
User: "Find all buildings within
  200 meters of the river"

GeoAI: I'll run this in 2 steps:
  1. Buffer "rivers" by 200m
  2. Clip "buildings" to the buffer

  [Confirm]  [Cancel]

User: [Confirm]

βœ“ Step 1/2: Buffer complete
βœ“ Step 2/2: Clip complete
βœ“ 1,247 buildings found
Enterprise Plugin

3D Visualization

Convert CityGML, IFC (BIM), and point cloud data into web-viewable 3D formats. CityGML becomes 3D Tiles, IFC becomes GLB with component metadata, and point clouds become Potree octrees for streaming visualization.

  • CityGML β†’ 3D Tiles β€” Buildings, terrain, and city models as tiled 3D content
  • IFC β†’ GLB β€” BIM models with semantic component hierarchy preserved
  • Point Clouds β€” LAS/LAZ to Potree octree for progressive streaming
  • Component query β€” Browse IFC element tree, query individual components via API
3D Tiles CityGML IFC / GLB Potree deck.gl
# Convert CityGML to 3D Tiles
POST /api/v1/process
{
  "operation": "store.convert_citygml",
  "params": {
    "source": "./data/city.gml"
  }
}

# Serve tileset / model / point cloud
GET /3dtiles/{layer_id}/tileset.json
GET /3d/{layer_id}/model.glb
GET /potree/{layer_id}/metadata.json

βœ“ 3D content ready for visualization
Enterprise Plugin

Object Storage

Export layers and rasters to S3-compatible storage. Bundled with SeaweedFS for self-hosted object storage β€” no external cloud dependency required.

  • Layer export β€” GeoJSON, GeoPackage, Shapefile, CSV, KML, DXF to S3
  • Raster export β€” COG files to S3 buckets
  • COG ingest β€” Import rasters from S3 into GeoVertix
  • Self-hosted β€” Bundled SeaweedFS for on-premise S3
S3 Compatible SeaweedFS GeoPackage COG Export
# Export a layer to S3
POST /api/v1/process
{
  "operation": "store.export_layer",
  "params": {
    "layer_id": "abc-123",
    "format": "gpkg",
    "bucket": "exports"
  }
}

βœ“ parcels.gpkg uploaded to s3://exports/
βœ“ Download URL generated (24h expiry)
Enterprise Plugin

QGIS Algorithms

Access 220+ QGIS Processing algorithms as server-side operations. The plugin runs QGIS headless inside a container β€” no desktop installation needed. QGIS native and GDAL processing toolbox available via REST API.

  • 220+ algorithms β€” QGIS native and GDAL processing tools
  • Containerized β€” QGIS 3.40 LTR in Docker, managed by the dispatcher
  • Auto-discovery β€” Operations generated from QGIS algorithm metadata
  • COG output β€” Raster results converted to Cloud Optimized GeoTIFF
QGIS 3.40 LTR Docker 220+ Algorithms GDAL Tools
# Run QGIS hillshade algorithm
POST /api/v1/process
{
  "operation": "qgis.native:hillshade",
  "params": {
    "INPUT": "dem_layer",
    "Z_FACTOR": 1.0,
    "AZIMUTH": 315,
    "V_ANGLE": 45
  }
}

βœ“ Hillshade computed
βœ“ COG output registered as raster layer

Ready to Get Started?

Download the Community Edition or contact us for Enterprise pricing

Contact Sales