为包含 geometry 列的任何查询渲染地图
在与 Datasette 相同的环境中安装此插件。
$ datasette install datasette-geojson-map
首先加载一个 GIS 文件。
例如,您可以使用 geojson-to-sqlite 或 shapefile-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
您应该会看到一个以波士顿为中心、勾勒出每个邻里的地图。单击边界将弹出一个显示该特征详细信息的窗口。
此插件依赖于(并将安装)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