跳转到主要内容

Datasette插件,可显示具有经纬度列的任何数据地图

项目描述

datasette-cluster-map

PyPI Changelog License

这是一个Datasette插件,它可以检测具有latitudelongitude列的表,并使用Leaflet.markercluster在地图上绘制它们。

关于此项目的更多信息:Datasette插件,以及构建聚类地图可视化

演示

global-power-plants.datasettes.com提供了一个包含全球33,000个发电厂数据库的此插件演示。

Cluster map demo

安装

运行datasette install datasette-cluster-map将此插件添加到您的Datasette虚拟环境。如果以这种方式安装,Datasette将自动加载插件。

如果您正在使用datasette publish命令进行部署,可以使用--install选项

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

如果您的任何表具有以下列之一对,将自动显示地图

  • latitudelongitude
  • latlng
  • latlon
  • latlong
  • *_latitude*_longitude
  • *_lat*_lng可以是三种lng变体中的任何一种

配置

如果您列的名称不是这样,您可以通过在 metadata.json 文件中使用 插件配置 来配置列名。例如,如果所有列都命名为 xlatxlng,则可以创建如下所示的 metadata.json 文件:

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

然后按照以下方式运行 Datasette:

datasette mydata.db -m metadata.json

这将配置该 Datasette 实例加载的每个数据库所需列的名称。

如果您只想为数据库中的一个表自定义列名,可以这样做:

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

您还可以使用自定义 SQL 查询将列重命名为 latitudelongitude,例如

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

地图默认显示在页面上的主要结果表上方。您可以使用 "container" 插件设置提供一个 CSS 选择器,指示地图应该附加到哪个元素。

自定义瓦片图层

您可以使用 tile_layertile_layer_options 配置设置来自定义地图使用的瓦片图层。例如,要使用 OpenTopoMap,可以使用以下设置:

{
    "plugins": {
        "datasette-cluster-map": {
            "tile_layer": "https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png",
            "tile_layer_options": {
                "attribution": "Map data: &copy; <a href='https://www.openstreetmap.org/copyright'>OpenStreetMap</a> contributors, <a href='http://viewfinderpanoramas.org'>SRTM</a> | Map style: &copy; <a href='https://opentopomap.org'>OpenTopoMap</a> (<a href='https://creativecommons.org/licenses/by-sa/3.0/'>CC-BY-SA</a>)",
                "maxZoom": 17
            }
        }
    }
}

如果您的瓦片服务器提供视网膜瓦片,请将 "detectRetina": true 添加到 tile_layer_options 以启用它们。

Leaflet Providers 预览列表 提供了您可以使用的大量其他瓦片图层详细信息。

自定义标记弹出窗口

标记弹出窗口默认显示底层数据库行的数据。

您可以通过在结果中包含一个 popup 列来自定义此内容,该列包含定义更有用弹出窗口的 JSON。

弹出窗口列中的 JSON 应该看起来像这样:

{
    "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"
}

这些列都是可选的。

  • title 是在弹出窗口顶部显示的标题
  • image 是要显示在弹出窗口中的图像的 URL
  • alt 是用于该图像的 alt 属性
  • description 是用作描述的长字符串文本
  • link 是标记内容应链接到的 URL

您可以使用 SQLite 的 json_object() 函数在 SQL 查询中动态构建此数据。以下是一个示例:

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

在此尝试此示例 或查看使用 SQL 视图构建的 此演示

如何部署演示

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"

开发

要本地设置此插件,首先检出代码。然后创建一个新的虚拟环境

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

或如果您正在使用 pipenv

pipenv shell

现在安装依赖项和测试

pip install -e '.[test]'

要运行测试

pytest

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分布

datasette_cluster_map-0.18.2.tar.gz (38.5 kB 查看散列值)

上传时间

构建分布

datasette_cluster_map-0.18.2-py3-none-any.whl (35.1 kB 查看散列值)

上传时间 Python 3

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面