Spatial operations from hours to minutes.
150+ PostGIS-compatible functions, H3 indexing, track operators, and server-side map rendering — all in SQL, all on GPU.
PostGIS is the richest geospatial library — but it's CPU-bound at scale. Kinetica runs the same SQL, 240x faster.
The richest function library — CPU-bound at scale.
Decades of development have made PostGIS the gold standard for geospatial depth. The cost: it's a row-store on CPUs. Point-in-polygon over hundreds of millions of rows hits a wall.
Point-in-polygon over 100M rows skips the chunks it can — then vectorizes the rest. Pruned first, dispatched once, not 100 million row iterations.
Each chunk = 8M rows with cached min/max ranges. Chunks outside the polygon's bounding box are skipped before ST_CONTAINS runs — the predicate only touches candidate chunks.
“Spatial operations that typically take several hours on traditional databases can now be completed within a couple of minutes, allowing Foursquare to push the boundaries of what's possible with SQL in the geospatial domain.”
Independent benchmark. Same hardware. 100M rows.
Geo Filter & Sum
How long were rides originating in this area? STXY_INTERSECTS + aggregation.
Geo Join & Count
How many trips originated and ended in an area? STXY_INTERSECTS over both endpoints.
Geo Join & Temporal Filter
Trips intersecting an area where duration < 10 min — joined geometry + time predicate.
Geometry. Hex grids. Tracks. Maps. One toolbox.
Full PostGIS-style geometry library.
Predicates, measurements, constructions, set operations, transforms. Plus enhanced STXY_* variants for raw x/y columns.
SELECT id FROM points WHERE STXY_CONTAINS( zone_geom, lon, lat ) = 1;
Uber's hex tessellation, in SQL.
Convert points and polygons to H3 cells, walk parent and child levels, take grid disks and rings. Sixteen resolutions, continent to half-meter.
SELECT H3_LATLNGTOCELL( lat, lon, 9 ) AS cell, COUNT(*) FROM events GROUP BY cell;
Time-aware moving objects.
A track is a sequence of points ordered by time — flights, vehicles, ships. Match tracks against geofences or find tracks within a space-time tolerance.
SELECT * FROM TABLE( ST_TRACKINTERSECTS( TRACK_TABLE => ..., GEOFENCE_TABLE => ... ) );
Render the map in the database.
Issue an HTTP request, get back a PNG. Six rendering modes covering point clouds, choropleths, density surfaces, and route reachability.
GET /wms?REQUEST= 'GetMap' &STYLES='heatmap' &LAYERS=trips &BBOX=...
Moving objects, geofences, and time windows in one SQL table function — no streaming layer, no graph DB, no glue code.
-- Find every flight that crosses -- a geofence within a time window. -- One table function. One query. SELECT * FROM TABLE( ST_TRACKINTERSECTS( TRACK_TABLE => INPUT_TABLE(flights), TRACK_ID_COLUMN => 'flight_id', TRACK_X_COLUMN => 'lon', TRACK_Y_COLUMN => 'lat', TRACK_ORDER_COLUMN => 'flight_time', GEOFENCE_TABLE => INPUT_TABLE(geofences), GEOFENCE_ID_COLUMN => 'fence_name', GEOFENCE_WKT_COLUMN => 'fence_wkt' ) ) ORDER BY flight_id, fence_name;
Travel-time curves over a road network — produced by the same engine.
# A graph weighted by ST_LENGTH CREATE OR REPLACE GRAPH roads ( EDGES => INPUT_TABLES( SELECT shape AS EDGE_WKTLINE, ST_LENGTH(shape, 1) / speed AS WEIGHTS_VALUESPECIFIED FROM road_network ) ); # One HTTP call returns a PNG GET /wms? STYLES=isochrones &GRAPH_NAME=roads &SOURCE_NODE='POINT(-122 47)' &NUM_LEVELS=3 &COLORMAP=viridis
Render the map in the database.
Density surfaces from millions of points.
Per-pixel aggregation directly over the source table. Sum, count, average, log-scaled — paired with any of 60+ colormaps from viridis to magma to inferno. Shown: 100M Citi Bike trips, rendered server-side in under one second, delivered as a PNG over HTTP.
- VAL_ATTR = count / sum / avg / min / max / log(...)
- COLORMAP: 60+ built in
- BLUR_RADIUS · MIN_LEVEL · MAX_LEVEL parameterized
Pre-baking tiles is the wrong layer. The renderer should sit next to the data, not downstream of it — the map is finished when it leaves the database. One HTTP GET returns the rendered PNG; style with URL parameters and restyle without re-querying.
Every dialect of geospatial.
One vectorized engine.
Frequently asked questions
How is Kinetica's geospatial engine different from PostGIS?
Does Kinetica run on GPU, CPU, or both?
Is H3 indexing native, or do I need an extension?
H3_LATLNGTOCELL,
H3_POLYGONTOCELLS, H3_GRIDDISK, H3_CELLTOPARENT, and the
full Uber H3 family — with sixteen resolutions from continent to half-meter. No extension to
install, no UDF library to package.
Can I run spatiotemporal queries on moving objects?
ST_TRACKINTERSECTS matches tracks against geofences (with optional time
tolerance), ST_TRACK_DWITHIN finds tracks within a space-time radius, and
ST_LINESTRINGFROMORDEREDPOINTS materializes the line geometry. One table function
replaces a streaming layer plus a spatial DB plus a graph engine.
What rendering modes does the WMS endpoint support?
/vts endpoint.
How do spatial queries combine with graph queries?
ST_LENGTH on a
road segment is a travel-time weight when divided by speed. Build the graph with
CREATE OR REPLACE GRAPH over a road network, then issue SHORTEST_PATH or
render an isochrone via the WMS endpoint. The same engine that ran your point-in-polygon query
just walked the graph and rendered the image.