Crunchy Spatial: It's PostGIS, for the Web
Let's put that on a map!
PostGIS has so many cool features that it is possible to do full GIS analyses without ever leaving the SQL language, but... at the end of the day, you want to get those results, show that data, on the map.
The Crunchy Data geospatial team has been thinking about how to bring PostGIS to the web, and we established some basic principles:
Use the database, as much as possible.
The database already has a user model and security model.
The database can already generate output formats, like MVT, JSON and GeoJSON.
The database can perform complex analysis via the many many PostGIS functions.
The database can host units of custom behaviour via user-defined functions.
Divide up the web application services into small chunks.
Vector tile serving.
Vector feature serving.
Data import.
Routing.
Geocoding.
Base map serving.
Implement each service independently, using the database as the coordination point.
Keep each service simple and small enough to qualify as a "micro-service" and assume production deployment in a managed environment like Kubernetes.
The result is a set of micro-service components that we plan on growing over time. The first two services allow us to build simple view-query-display spatial applications:
- pg_tileserv, a vector tile server, and;
- pg_featureserv, a vector feature server.
Because the services are so simple, wrapping them in containers for easy scale out in Kubernetes is straight forward, and allows us to build out scalable back-ends automagically.
As we add to the collection of services in the Crunchy Spatial offering, we'll be able to add drag'n'drop import, vector base maps, routing and other useful features, all running on a standard, open k8s platform, like OpenShift.
Crunchy Spatial: it's PostGIS, for the web.
Related Articles
- Crunchy Data Warehouse: Postgres with Iceberg for High Performance Analytics
8 min read
- Loading the World! OpenStreetMap Import In Under 4 Hours
6 min read
- Easy Totals and Subtotals in Postgres with Rollup and Cube
5 min read
- A change to ResultRelInfo - A Near Miss with Postgres 17.1
8 min read
- Accessing Large Language Models from PostgreSQL
5 min read