设置底图并从 PostGIS 叠加点
您通常有一些半专有数据源,您想将其叠加到另一个数据源上。 本指南展示如何使用 Planetiler 从 OSM 生成底图,并从 PostGIS 数据库叠加自定义点。 有关此/替代数据源的优缺点讨论,请参见此处。
先决条件
我们期望您已经安装以下内容:
使用 Planetiler 生成 MBTiles 底图
有多种方法可以生成瓦片存档。 对于半静态瓦片存档,我们认为使用 Planetiler 通过 OpenMapTiles 构建 MBtiles 存档是一个很好的起点。
🤔 为什么我首先需要一个工具来将 OSM 转换为 mbtiles?(点击展开)
您需要一个工具从 OpenStreetMap 构建矢量瓦片集的原因是 OpenStreetMap 中的数据
- 不遵循特定架构,
- 也没有预先分块为
x/y/z块。
🤔 MBtiles 和 OpenMapTiles 是什么?(点击展开)
好问题。
MBtiles 是存档格式。可以将其视为一个 sqlite 数据库,存储您需要的世界块(x/y/z)的数据。
有关此/替代格式的优缺点讨论,请参阅我们的比较 pmtiles vs. mbtiles。
但存档中的数据看起来如何?
这就是矢量瓦片架构的作用:
OpenMapTiles 定义了在提供的数据中包含哪些层以及它们如何聚合。
OpenMapTiles 确实有归属要求。您需要在地图底部有 © OpenMapTiles。
如果您想了解更多,请参阅 Shortbread,这是一个更新但不太成熟的替代方案。
以下命令为摩纳哥下载一个瓦片存档到 data/monaco.mbtiles。
有关不同下载选项,请参阅 Planetiler 文档。
mkdir --parents data
docker run \
--user=$UID \
-e JAVA_TOOL_OPTIONS="-Xmx1g" \
-v "$(pwd)/data":/data \
--rm \
ghcr.io/onthegomap/planetiler:latest \
--download \
--minzoom=0 \
--maxzoom=14 \
--tile_compression=none \
--area=monaco \
--output /data/monaco.mbtiles
将数据加载到 PostGIS 数据库
运行 PostGIS
首先,您需要一个正在运行的 postGIS 实例。
docker run \
--name some-postgis \
--env POSTGRES_PASSWORD=mypass \
--publish 5432:5432 \
--detach \
postgis/postgis
将点导入 PostGIS
然后您需要将几何添加到 PostGIS 数据库。
这可以通过多种方式实现,例如 osm2pgsql 用于添加特定的、可更新的 OSM 数据,或通过 postgres 的各种数据库连接器在您选择的编程语言中实现。
docker exec some-postgis psql --dbname postgres --username postgres --command \
"CREATE TABLE where_yachts_can_be_looked_at ("\
" title TEXT NOT NULL, "\
" subtitle TEXT NOT NULL, "\
" location GEOMETRY(Point, 4326) NOT NULL);"
docker exec some-postgis psql --dbname postgres --username postgres --command \
"INSERT INTO where_yachts_can_be_looked_at (title, subtitle, location) VALUES ( "\
" 'Port Hercules', "\
" 'Great view of superyachts docked in the iconic harbor.', "\
" ST_SetSRID(ST_MakePoint(7.424789, 43.735217), 4326));"
使用 Martin 提供瓦片
现在我们将提供 mbtiles 和 postgis 数据库的内容。
如果您想要更精确的选项来控制发布内容的方式,请参阅配置文件或 cli 文档。 默认情况下,我们将共享每个可服务的 postgres 表、视图和函数。
martin data/monaco.mbtiles postgres://postgres:mypass@localhost:5432/postgres
您现在可以在此处查看可用内容的目录:http://localhost:3000/catalog
两个瓦片集的 tilejson 端点是 http://localhost:3000/monaco,where_yachts_can_be_looked_at
在 Maputnik 中使用以设置地图样式
由于 CORS,我们无法在没有进一步设置的情况下使用网站 https://maplibre.org/maputnik/。 一旦瓦片部署在 https 后面,就可以使用它。
要获取 maputnik 的本地版本,请运行
docker run -it --rm -p 8888:80 ghcr.io/maplibre/maputnik:main
Maputnik 现在在线,所以让我们将 martin 的瓦片加载到其中。
- 访问
http://localhost:8888 - 您首先需要一个样式:
- 点击
Open
- 选择您喜欢的样式(我们将选择
Maptiler Basic)
- 点击
- 您现在有一个使用 Maptilers’(不是 martin)数据的样式。您需要更改其数据源以使用我们刚刚发布的瓦片:
- 点击
Data Sources
- 并添加上面的 tilejson
http://localhost:3000/monaco,where_yachts_can_be_looked_at:
- 点击
- 现在,让我们放大到摩纳哥:

- 最后,让我们为我们的游艇添加一个圆圈层:
-
点击
Add Layer
-
按如下方式配置层:

-
并将其样式设置为:

json 配置(点击展开)
{ "id": "where_yachts_can_be_looked_at", "type": "circle", "source": "openmaptiles", "source-layer": "where_yachts_can_be_looked_at", "paint": { "circle-color": "rgba(255, 7, 103, 1)", "circle-blur": 0.2, "circle-radius": { "stops": [ [13, 1], [15, 300], [20, 2000] ] }, "circle-opacity": { "stops": [[13.5, 0], [14, 0.4]] } }, "minzoom": 13 }
-