leaflet - 如何设置 Openstreetmap 的样式?
问题描述
目前我正在使用带有 Openstreetmaps 的传单。我想为地图添加一些样式以获得更好的外观和感觉,并将地图的主题与我的应用程序的主题相匹配。我看到了 maputnik、mapbox 等,它们会收取费用来使用自定义样式。有没有免费的方法可以做到这一点?
解决方案
我想您在 Leaflet 应用程序中使用的 OpenStreetMap 是免费的 OpenStreetMap WMS。因此,您应该首先了解什么是 WMS。
WMS 代表 Web 地图服务。它是通过 HTTP 提供地图图像的 OGC 标准。
事实上,使用 OpenStreetMap WMS 得到的就是这个过程的最终产物:
存储在数据库中的空间数据 -> WMS 服务器 -> WMS 切片
WMS 服务器将空间数据转换为地理参考图像并负责样式设置。
空间数据库和 WMS 服务器都属于 OpenStreetMap。你得到的是他们的服务器提供的免费瓷砖(图像)。因此,您可以应用于地图图块的唯一样式是可以应用于光栅图像的样式(例如黑白滤镜)。例如,您不能为道路、建筑物等应用不同的样式。这只能由 WMS 服务器完成。
Mapbox、Maptiler和其他供应商实际上是在使用 OSM 数据集,让您选择一种样式,甚至创建一个自定义样式。样式仍然由他们自己的 WMS 服务器完成。这就是为什么这些服务并非完全免费的原因。
因此,自定义 WMS 样式的唯一选择是:
- 建立自己的 WMS 服务器。这可能很麻烦,并且由于硬件要求和可能的安全问题,它实际上可能不像听起来那么免费。
- 使用可能提供具有特定限制的免费定价计划(例如每月提供的瓷砖)的第三方提供商(如您提到的那些)。
推荐阅读
- java - 谷歌语音识别开启新活动
- directx - 如何使用 Directx10 使用 DXGI 和 SetFullScreenState(...) 检测全屏更改或退出?
- sql - 7 天用户计数:Big-Query 自加入以获取日期范围和计数?
- maven - 如何从 Maven 重新运行失败的 Cucumber 场景?
- flutter - Flutter中的滑动表单步骤?
- swift - Java 服务器的 Swift RSA 加密公钥失败
- server - 访问在 Hyper-V 中运行的虚拟服务器
- reactjs - 路由更改时反应路由器的位置状态变为未定义
- typescript - Typescript 包到一个 .js 文件
- kubernetes - 如何将 k8s yaml 转换为 helm chart