您可以使用自己的瓷砖。我尝试了两件事。生成我自己的Mapzen 矢量图块(它们使用与 Mapbox 相同的格式)您也可以免费使用它们。这是他们的层描述. 这是一项工作量很大的工作。您需要使用 postgresql 并将整个 OSM PBF 导出加载到数据库中,然后运行 python 服务器,该服务器从该数据库请求数据并呈现矢量切片。我认为这是为了渲染队列中的所有图块,因为每页需要几秒钟来渲染可见图块。查询数据库服务器后,大部分时间都花在了python上。它的优点是你可以得到漂亮的瓷砖。它基本上拥有你需要的一切,但更难定制。例如,如果您想为自行车道添加特定样式。您需要深入研究代码并更改几个查询模板和许多其他内容。
然后我尝试了 Tilemaker。这只是一个 C++ 程序,它读取 OSM PBF 转储和 lua 配置脚本(您可以在其中指定要发送到瓦片的标签)并吐出 mapbox 瓦片。它的优点是设置和自定义更容易,并且所有图块都可以立即渲染。但是创建漂亮的瓷砖更难。(AKA 加载所有不同的高速公路标签都是不同类型的道路。由您指定,但这已经在前面提到的 Mapzen 和 Mapbox 中有效)。
例如Mapzen 道路图层中的种类 在mapzen 中,这已经被处理了,但在 tilemaker 中,您可以将所有从不同 OSM 标签获取道路类型的条件写入图层。而且它在土地使用标签中变得更加复杂,因为 kind 是:
土地利用、休闲、自然、高速公路、航空和便利设施 OSM 标签的组合,或城市区域和自然地球区域的公园或受保护土地的组合。
当然,您可以拥有完全不同的标签,但拥有一个告诉您您正在查看的土地用途的标签是很好的。
您需要知道 Mapbox、mapzen 您的自定义 mapbox 瓦片都使用相同的格式,但每个都有不同的标签。因此,您为其中一个创建的样式可能不适用于另一个。
要创建样式,您可以使用 Mapbox Studio(但可能没用,因为它目前处于公开测试阶段,我不确定您是否可以在那里指定自己的图块)。
我使用了 Mapbox codeflow,它基本上是带有 gulp 脚本的 nodejs 服务器,当样式文件更改时,它会使用地图重新加载站点。除了 JSON 之外,它还支持 toml、JSON5 和 yml 的编写样式。它还可以很好地显示错误。(仅缺少行号)目前它支持第 7 版的样式,但目前已推出 8 版。为了获取错误的行号,我使用了 Mapbox GL 样式规范,它也可以将样式更新到新版本。您也可以尝试Glug,它是一种不同的风格语言,可编译为 Mapbox GL 风格。它更紧凑一些。
对于使用图块,您还可以使用mb-util创建 mbtiles并使用它们。