datasette-geojson-map 作者 eyeseast

Star

README 源代码

datasette-geojson-map

PyPI Changelog Tests License

为包含 geometry 列的任何查询渲染地图

安装

在与 Datasette 相同的环境中安装此插件。

$ datasette install datasette-geojson-map

用法

首先加载一个 GIS 文件。

例如,您可以使用 geojson-to-sqliteshapefile-to-sqlite邻里边界 加载到 SQLite 数据库中。

wget -O neighborhoods.geojson https://opendata.arcgis.com/datasets/3525b0ee6e6b427f9aab5d0a1d0a1a28_0.geojson
geojson-to-sqlite boston.db neighborhoods neighborhoods.geojson

(上面的命令使用了 Spatialite,但这并不是必需的。)

启动 datasette 并导航到 neighborhoods 表。

datasette serve boston.db

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

您应该会看到一个以波士顿为中心、勾勒出每个邻里的地图。单击边界将弹出一个显示该特征详细信息的窗口。

Boston neighbhorhoods map

此插件依赖于(并将安装)datasette-geojson。任何包含 geometry 列的查询都将生成结果地图。这包括单行视图。

运行包含的 demo 项目以查看实际效果。

配置

本项目使用与 datasette-cluster-map 相同的地图配置。以下是如何使用 Stamen 的地形瓦片

Stamen Design,基于 CC BY 3.0 授权。数据来自 OpenStreetMap,基于 ODbL 授权。 subdomains: abcd minZoom: 1 maxZoom: 16 ext: jpg">
plugins:
  datasette-geojson-map:
    tile_layer: https://stamen-tiles-{s}.a.ssl.fastly.net/terrain/{z}/{x}/{y}.{ext}
    tile_layer_options:
      attribution: >-
        Map tiles by Stamen Design, 
        under CC BY 3.0. 
        Data by OpenStreetMap, 
        under ODbL.
      subdomains: abcd
      minZoom: 1
      maxZoom: 16
      ext: jpg

选项

  • tile_layer: 使用可以传递给 Leaflet Tilelayer 的 URL 模板
  • tile_layer_options: 所有选项都将传递给瓦片层。有关此处可能的值的更多信息,请参阅 Leaflet 文档

地图要素样式设置

地图要素可以使用 simplestyle-spec 进行样式设置。这需要在返回的行上设置特定字段。这是一个示例

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

这将渲染一个邻里地图,其中每个多边形填充为红色,边框为蓝色,线条宽度为 0.2 像素。

更实用的方法是使用 CASE 语句根据数据对要素进行着色

SELECT
  Name,
  geometry,
  CASE
    Name
    WHEN "Roslindale" THEN "#ff0000"
    WHEN "Dorchester" THEN "#0000ff"
    ELSE "#dddddd"
  END fill
FROM
  neighborhoods

这将把 Roslindale 填充为红色,Dorchester 填充为蓝色,所有其他邻里填充为灰色。

开发

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

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

或者如果您正在使用 pipenv

pipenv shell

现在安装依赖项和测试依赖项

pip install -e '.[test]'

运行测试

pytest