Skip to main content

Render a map for any query with a geometry column

Project description


PyPI Changelog Tests License

Render a map for any query with a geometry column


Install this plugin in the same environment as Datasette.

$ datasette install datasette-geojson-map


Start by loading a GIS file.

For example, you might use geojson-to-sqlite or shapefile-to-sqlite to load neighborhood boundaries into a SQLite database.

wget -O neighborhoods.geojson
geojson-to-sqlite boston.db neighborhoods neighborhoods.geojson

(The command above uses Spatialite, but that's not required.)

Start up datasette and navigate to the neighborhoods table.

datasette serve boston.db

# in another terminal tab
open http://localhost:8001/boston/neighborhoods

You should see a map centered on Boston with each neighborhood outlined. Clicking a boundary will bring up a popup with details on that feature.

Boston neighbhorhoods map

This plugin relies on (and will install) datasette-geojson. Any query that includes a geometry column will produce a map of the results. This also includes single row views.

Run the included demo project to see it live.


This project uses the same map configuration as datasette-cluster-map. Here's how you would use Stamen's terrain tiles:

    tile_layer: https://stamen-tiles-{s}{z}/{x}/{y}.{ext}
      attribution: >-
        Map tiles by <a href="">Stamen Design</a>, 
        under <a href="">CC BY 3.0</a>. 
        Data by <a href="">OpenStreetMap</a>, 
        under <a href="">ODbL</a>.
      subdomains: abcd
      minZoom: 1
      maxZoom: 16
      ext: jpg


  • tile_layer: Use a URL template that can be passed to a Leaflet Tilelayer
  • tile_layer_options: All options will be passed to the tile layer. See Leaflet documentation for more on possible values here.

Styling map features

Map features can be styled using the simplestyle-spec. This requires setting specific fields on returned rows. Here's an example:

SELECT Name, geometry, "#ff0000" as fill, "#0000ff" as stroke, 0.2 as stroke-width,  from neighborhoods

That will render a neighborhood map where each polygon is filled in red, outlined in blue and lines are 0.2 pixels wide.

A more useful approach would use the CASE statement to color features based on data:

    WHEN "Roslindale" THEN "#ff0000"
    WHEN "Dorchester" THEN "#0000ff"
    ELSE "#dddddd"
  END fill

This will fill Roslindale in red, Dorchester in blue and all other neighborhoods in gray.


To set up this plugin locally, first checkout the code. Then create a new virtual environment:

cd datasette-geojson-map
python3 -mvenv venv
source venv/bin/activate

Or if you are using pipenv:

pipenv shell

Now install the dependencies and test dependencies:

pip install -e '.[test]'

To run the tests:


Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

datasette-geojson-map-0.4.0.tar.gz (10.0 kB view hashes)

Uploaded Source

Built Distribution

datasette_geojson_map-0.4.0-py3-none-any.whl (10.9 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page