All Projects → simonw → datasette-cluster-map

simonw / datasette-cluster-map

Licence: Apache-2.0 license
Datasette plugin that shows a map for any data with latitude/longitude columns

Programming Languages

javascript
184084 projects - #8 most used programming language
python
139335 projects - #7 most used programming language
CSS
56736 projects

Projects that are alternatives of or similar to datasette-cluster-map

datasette-render-images
Datasette plugin that renders binary blob images using data-uris
Stars: ✭ 14 (-72.55%)
Mutual labels:  datasette, datasette-plugin, datasette-io
datasette-ripgrep
Web interface for searching your code using ripgrep, built as a Datasette plugin
Stars: ✭ 58 (+13.73%)
Mutual labels:  datasette, datasette-plugin, datasette-io
datasette-dashboards
Datasette plugin providing data dashboards from metadata
Stars: ✭ 65 (+27.45%)
Mutual labels:  datasette, datasette-plugin, datasette-io
datasette-publish-vercel
Datasette plugin for publishing data using Vercel
Stars: ✭ 30 (-41.18%)
Mutual labels:  datasette, datasette-plugin, datasette-io
google-takeout-to-sqlite
Save data from Google Takeout to a SQLite database
Stars: ✭ 73 (+43.14%)
Mutual labels:  datasette, datasette-io
dogsheep-photos
Upload your photos to S3 and import metadata about them into a SQLite database
Stars: ✭ 156 (+205.88%)
Mutual labels:  datasette, datasette-io
healthkit-to-sqlite
Convert an Apple Healthkit export zip to a SQLite database
Stars: ✭ 130 (+154.9%)
Mutual labels:  datasette, datasette-io
pocket-to-sqlite
Create a SQLite database containing data from your Pocket account
Stars: ✭ 56 (+9.8%)
Mutual labels:  datasette, datasette-io
Datasette
An open source multi-tool for exploring and publishing data
Stars: ✭ 5,640 (+10958.82%)
Mutual labels:  datasette, datasette-io
treetracker-web-map-client
The front end of the treetracker web map app.
Stars: ✭ 37 (-27.45%)
Mutual labels:  leafletjs
museums
A website recommending niche museums to visit
Stars: ✭ 30 (-41.18%)
Mutual labels:  datasette
Teyvat.moe
A flexible, community-driven interactive website for Genshin Impact.
Stars: ✭ 137 (+168.63%)
Mutual labels:  leafletjs
rikitraki
This repository contains the client code of RikiTraki.com, a map-centric hiking log web application.
Stars: ✭ 16 (-68.63%)
Mutual labels:  leafletjs
leaflet-experiments
Demos and experiments with LeafletJS
Stars: ✭ 20 (-60.78%)
Mutual labels:  leafletjs
Leaflet Cluster Example
🗺 Example of using the clustering plugin with Leaflet
Stars: ✭ 26 (-49.02%)
Mutual labels:  leafletjs
Leaflet Example
🗺 An example of how to use Leaflet to create an interactive map.
Stars: ✭ 41 (-19.61%)
Mutual labels:  leafletjs
OSMChina-NextOSM
A more modern, designed and easy-to-use UI designed for browsing OpenStreetMap.
Stars: ✭ 17 (-66.67%)
Mutual labels:  leafletjs
cogviewer
Simple Cloud Optimized GeoTIFF viewer.
Stars: ✭ 21 (-58.82%)
Mutual labels:  leafletjs
leaflet-locationpicker
Simple location picker on Leaflet map
Stars: ✭ 31 (-39.22%)
Mutual labels:  leafletjs
os-leaflet
A Leafletjs TileLayer using Ordnance Survey OpenSpace web map service
Stars: ✭ 23 (-54.9%)
Mutual labels:  leafletjs

datasette-cluster-map

PyPI Changelog License

A Datasette plugin that detects tables with latitude and longitude columns and then plots them on a map using Leaflet.markercluster.

More about this project: Datasette plugins, and building a clustered map visualization.

Demo

global-power-plants.datasettes.com hosts a demo of this plugin running against a database of 33,000 power plants around the world.

Cluster map demo

Installation

Run datasette install datasette-cluster-map to add this plugin to your Datasette virtual environment. Datasette will automatically load the plugin if it is installed in this way.

If you are deploying using the datasette publish command you can use the --install option:

datasette publish cloudrun mydb.db --install=datasette-cluster-map

If any of your tables have a latitude and longitude column, a map will be automatically displayed.

Configuration

If your columns are called something else you can configure the column names using plugin configuration in a metadata.json file. For example, if all of your columns are called xlat and xlng you can create a metadata.json file like this:

{
    "title": "Regular metadata keys can go here too",
    "plugins": {
        "datasette-cluster-map": {
            "latitude_column": "xlat",
            "longitude_column": "xlng"
        }
    }
}

Then run Datasette like this:

datasette mydata.db -m metadata.json

This will configure the required column names for every database loaded by that Datasette instance.

If you want to customize the column names for just one table in one database, you can do something like this:

{
    "databases": {
        "polar-bears": {
            "tables": {
                "USGS_WC_eartag_deployments_2009-2011": {
                    "plugins": {
                        "datasette-cluster-map": {
                            "latitude_column": "Capture Latitude",
                            "longitude_column": "Capture Longitude"
                        }
                    }
                }
            }
        }
    }
}

You can also use a custom SQL query to rename those columns to latitude and longitude, for example:

select *,
    "Capture Latitude" as latitude,
    "Capture Longitude" as longitude
from [USGS_WC_eartag_deployments_2009-2011]

The map defaults to being displayed above the main results table on the page. You can use the "container" plugin setting to provide a CSS selector indicating an element that the map should be appended to instead.

Custom tile layers

You can customize the tile layer used by the maps using the tile_layer and tile_layer_options configuration settings. For example, to use the Stamen Watercolor tiles you can use these settings:

{
    "plugins": {
        "datasette-cluster-map": {
            "tile_layer": "https://stamen-tiles-{s}.a.ssl.fastly.net/watercolor/{z}/{x}/{y}.{ext}",
            "tile_layer_options": {
                "attribution": "Map tiles by <a href=\"http://stamen.com\">Stamen Design</a>, <a href=\"http://creativecommons.org/licenses/by/3.0\">CC BY 3.0</a> &mdash; Map data &copy; <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors",
                "subdomains": "abcd",
                "minZoom": 1,
                "maxZoom": 16,
                "ext": "jpg"
            }
        }
    }
}

The Leaflet Providers preview list has details of many other tile layers you can use.

Custom marker popups

The marker popup defaults to displaying the data for the underlying database row.

You can customize this by including a popup column in your results containing JSON that defines a more useful popup.

The JSON in the popup column should look something like this:

{
    "image": "https://niche-museums.imgix.net/dodgems.heic?w=800&h=400&fit=crop",
    "alt": "Dingles Fairground Heritage Centre",
    "title": "Dingles Fairground Heritage Centre",
    "description": "Home of the National Fairground Collection, Dingles has over 45,000 indoor square feet of vintage fairground rides... and you can go on them! Highlights include the last complete surviving and opera",
    "link": "/browse/museums/26"
}

Each of these columns is optional.

  • title is the title to show at the top of the popup
  • image is the URL to an image to display in the popup
  • alt is the alt attribute to use for that image
  • description is a longer string of text to use as a description
  • link is a URL that the marker content should link to

You can use the SQLite json_object() function to construct this data dynamically as part of your SQL query. Here's an example:

select json_object(
  'image', photo_url || '?w=800&h=400&fit=crop',
  'title', name,
  'description', substr(description, 0, 200),
  'link', '/browse/museums/' || id
  ) as popup,
  latitude, longitude from museums
where id in (26, 27) order by id

Try that example here or take a look at this demo built using a SQL view.

How I deployed the demo

datasette publish cloudrun global-power-plants.db \
    --service global-power-plants \
    --metadata metadata.json \
    --install=datasette-cluster-map \
    --extra-options="--config facet_time_limit_ms:1000"

Development

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

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

Or if you are using pipenv:

pipenv shell

Now install the dependencies and tests:

pip install -e '.[test]'

To run the tests:

pytest
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].