Open source GIS portal
GratisGIS is a portal for publishing datasets, web maps, forms, and dashboards on your own infrastructure. Built on open components (PostGIS, MapLibre, Keycloak). No license fees; your only cost is the hardware (or cloud bill) you choose to run it on.
PostGIS-backed datasets, web maps, and forms. Bring data in from shapefiles, GeoJSON, GDB, or any OGR-supported format.
A data-collection app that installs to the home screen, works offline, and syncs when you're back online.
OGC API Features, Tiles, Styles, and Records; CSW 2.0.2 catalog; Schema.org JSON-LD; WMS / WFS service references; plus Esri WebMap JSON export so portal maps open in ArcGIS Pro, ArcGIS Online, QGIS, and kepler.gl.
Docker compose, single-command deploy. Runs on a $20/month VPS or your existing infrastructure. No SaaS lock-in.
Stale items get flagged. Inactive users get auto-disabled. Expiring shares trigger warnings. Spatial extents get recomputed on a schedule. Admins get a dashboard, not a backlog.
Offline edits go to a per-edit queue with isolated retries. A bad row doesn't poison the rest. Schema changes notify every device that has cached the deployment so the field crew rebuilds before they next sync.
Built-in templates for shares, expirations, schema changes, form submissions, and field captures. Org admins customize the copy through a guided editor with click-to-insert variables. Routed through one SMTP, not a sprawl of webhooks.
Share an item with a user, a group, or a folder. Folder shares cascade to every item in the folder. Per-share row scope ('all' vs 'own') and geographic clip (polygon) layer on top. View / download / edit / admin tiers, not a single 'shared' bit.
The portal can now run your Python for you, on its own, hourly or daily or monthly. Paste a script or upload a Jupyter notebook, give it a schedule, and a layer that should be refreshed every month actually is. Notebooks keep their charts and their explanations alongside the results, so a job somebody else set up is readable rather than a wall of print statements. Your administrator has to turn this on.
The `gratisgis` Python package went from reading and writing features to most of what you can do in the browser: load a shapefile or GeoPackage into a layer, export to GeoParquet or CSV, attach and download photos, create and share layers, compute a field across a whole layer at once, and run buffers and other geoprocessing on the server so the data never has to come down to your machine. There is now proper documentation with worked examples under Help.
Pulling a large layer into a script used to fetch the whole thing at once, and past a certain size it quietly stopped short, so you could end up working with only part of your data without being told. Reads now come back a page at a time, and the Python package handles the paging for you. Editing the layer while a script reads it no longer risks skipping or repeating a feature.
You can now reach the portal from outside a browser. Create an API key under Profile, then read and write your layers from a notebook, a script, or a scheduled job on your own machine. A key acts as you, so it sees exactly what you see, and you can make it read-only in one click. There is a small Python package to go with it, so pulling a layer into your own analysis is a couple of lines.
Elevation, hillshade, and height maps used to cap out on large areas, forcing a coarser resolution. The portal now builds them in pieces behind the scenes and joins them seamlessly, so a whole county renders at full detail. And 3D is now a proper on/off switch: flip to a flat view to check something, flip back, and your elevation setup is exactly as you left it.
Datasets, maps, and apps gratis-gis has shared publicly.
Nothing has been shared publicly yet. If you have a portal account, sign in to see content shared with you.
Sign in