OSM 数据到 mapBox 格式
OSM data to mapBox format
我看到几个地方 OSM data is converted to MVT(mapbox 矢量切片)用于简单渲染。
其中包括:
- OSRM 提供基于 MVT 的路线渲染图像
- OpenMapTiles 可以下载 MVT 格式的 OSM 地图
- GeoServer可以导入OSM导出MVT
有没有简单的工具可以在本地将OSM数据转换为MVT?
我有自己的 OSM 格式数据,我想将其转换为 MVT 并存储在本地,而不渲染为地图图像。
位于 GitHub 的 mapbox/awesome-vector-tiles 存储库有一长串 Mapbox Vector Tile 实现。这是截至今天的列表:
解析器和生成器
- vector-tile-js - 使用 JavaScript.
解析矢量切片
- mapnik-vector-tile - C++ 矢量切片 read/write 在 Mapnik 之上的实现。
- mbtiles-cpp - 用于将 mbtiles 和矢量数据解码为函数回调的 C++ 库。
- vector-tile-py - Python 将 Mapnik 矢量切片转换为 GeoJSON 的工具
- node-mapnik - Node.js API 用于取决于
mapnik-vector-tile
的矢量切片
- vector-tile-cs - 使用 C# 解析矢量切片(本机 C# 实现,无依赖项)。
- mapbox-vector-tile-cs - 使用 C# 解析矢量切片(使用 protobuf-net)。
- tilelive-bridge - Implements Tilelive API 用于从 Node.js 中的传统 Mapnik 数据源创建矢量切片。
- tilelive-vector - Implements Tilelive API 用于读取矢量切片并渲染到 Node.js 中的图像切片。
- mapbox-vector-tile is a Python package for vector tile encoding maintained by Mapzen. (It is used in Mapzen's vector tile service).
- geojson-vt - 在浏览器中将 GeoJSON 动态切片为矢量切片。
- java-vector-tile - java 矢量切片编码器和解码器。
- mapbox-vector-tile-java - 编码和解码 v2.1 Mapbox 矢量切片。将 JTS 几何与 MVT 功能相互转换,包括简单的用户数据支持。用于将世界坐标转换为 MVT 坐标并裁剪为图块包络的实用函数。
- cached-vector-tile - vector-tile-js 接口的另一种实现,由普通 JS objects/arrays 支持,而不是按需解析的 protobuf 数据。牺牲内存效率以获得更快的 feature.loadGeometry() 调用。
- tilegrinder - 一个帮助程序库,用于在 MBTiles 中的每个矢量瓦片上应用数据更改功能,使用本机 protobuf 包装器进行解压和编码,重新压缩结果并将它们存储在 MBTiles 或作为单个文件。
- SwiftVectorTiles - 根据 Mapbox 矢量切片规范的矢量切片编码器 Swift。
客户
- Mapbox GL Native - C++/OpenGL 矢量地图库,带有原生 SDK,适用于 Android、iOS、Node.js、macOS 和 Qt
- Mapbox GL JS - JavaScript/WebGL 矢量地图库。
- OpenLayers 3 - JavaScript 矢量和光栅库。
- WhirlyGlobe/Maply - Objective C 能够在 iOS 设备上读取和渲染矢量图块(以及使用 mapnik xml 设置样式)的代码。
- Leaflet.MapboxVectorTile 能够从 REST 端点读取 PBF MapboxVectorTiles 并将它们呈现为传单地图上的 TileLayer。如果您想在标准 Leaflet 网络地图上使用矢量切片而不需要 WebGL,请使用此选项。
- CARTO Mobile SDK - C++ maps library focused on offline features, for iOS, Android, Windows Phone and Xamarin with bindings for Java, Objective-C and C#. Based on Nutiteq Maps SDK,但开源并使用 CartoCSS。
- Mapzen Tangram - JavaScript 用于在带有 WebGL 的网络浏览器中实时渲染 2D 和 3D 地图的库,支持 MVT、GeoJSON、TopoJSON
- Mapzen Tangram-es - 使用带有自定义样式和交互的 OpenGL ES 2 渲染 2D 和 3D 地图的 C++ 库
- mapbox-gl-leaflet - 在 Leaflet 中创建 Mapbox GL 图层
- react-native-mapbox-gl - 从 React 应用程序渲染 Mapbox GL 地图
- hoverboard - 使用 Leaflet 0 在 canvas 上渲染矢量切片。7.x(支持 GeoJSON、TopoJSON 和 protobuf)
- Leaflet.VectorGrid - 在 Leaflet 1.0.0
中显示网格矢量数据(切片 GeoJSON、TopoJSON 或 Mapbox 矢量切片)
- ArcGIS API for JavaScript - 绘制矢量切片图层作为 web 地图的一部分。通过
mapbox-gl-js
集成完成渲染。
- mapscii - 用于 xterm 兼容终端的盲文和 ASCII 渲染器的 Vector Tile
应用程序/命令行工具
- Mapbox Studio - 桌面设计工作室,用于从原始地理数据创建矢量图块并将它们即时渲染成图像块。内部使用
tilelive.js
模块来处理矢量切片(参见 tilelive-bridge
和 tilelive-vector
)
- kosmtik - 使用 CartoCSS 和 Mapnik 设计地图。
- ArcGIS Pro - 从在 ArcGIS Pro 中制作或从 ArcMap 导入的地图生成矢量切片。
- MVT Styler - 矢量切片的地图样式编辑器。
- Maputnik - Mapbox GL 样式规范的视觉样式编辑器。
CLI 实用程序
- Datamaps 可用于创建矢量切片并将其存储在 mbtiles 中的 C 应用程序。请参阅
render-vector
命令。
- tilemaker - 无需中间数据库即可直接从 .osm.pbf 提取中生成矢量切片的命令行工具。
- vector-tiles-producer C++ 中的命令行工具,使用 Mapnik XML.
在选定的缩放级别为给定区域创建矢量切片
- tippecanoe - 从大量 GeoJSON 特征中构建矢量瓦片集。
- vt-geojson - 将矢量切片解码为 GeoJSON FeatureCollections
- tl - tilelive
的备用命令行界面
- tileshrink - 减少图层范围并简化 MBTiles
中所有矢量切片的结果几何图形
- tiler - 用于将 GeoJSON、Shapefile 或 PostGIS 图层转换为原始矢量切片(或 MBTiles)的命令行工具
- geojson2mvt - npm 包,用于从 geojson 文件中为给定的 xyz 边界构建静态矢量瓦片树(使用 vt-geojson)
Mapbox GL JS 插件
- gl-draw - 添加了对 Mapbox GL JS 地图上绘图和编辑功能的支持
服务器
- tessera - 支持服务和渲染矢量图块。使用与 Mapbox Studio 相同的核心库。
- tilestrata - with tilestrata-vt, it can generate Mapnik Vector Tiles; with tilestrata-postgismvt,它可以从 PostGIS 数据库提供 Mapbox 矢量切片
- SpatialServer (PGRestAPI) - A multi-purpose GeoSpatial NodeJS web server created at SpatialDev 不仅可以提供填充有矢量图块的 MBTiles,还可以从 PostGIS 数据库中即时剪切矢量图块。
- Utilery 从 PostGIS 查询生成矢量切片的服务器。 Python 基于
- tileserver Mapzen 矢量切片服务。
- TileStache 通过 .pbf 扩展请求添加了对 Mapbox 矢量切片的支持。
- Kartotherian Wikipedia tile server with Tilerator 后端瓦片预生成器
- ArcGIS Online - 支持在由 ArcGIS API for JavaScript
提供支持的地图应用程序中提供矢量切片和渲染
- Portal for ArcGIS - 支持在由 ArcGIS API for JavaScript
提供支持的地图应用程序中提供矢量切片和渲染
- tilesplash - 轻便快速的 nodejs 网络服务器,用于从 postgis 后端提供 topojson 或 mapbox 矢量切片
- go-vtile-example - 用 Go 编写的示例服务器
- Tegola - 用纯 Go 编写的 MVT 服务器,支持从 PostGIS 数据提供程序提供切片服务。
- t-rex - 用 Rust 编写的单个可执行文件中的 MVT 服务器。提供来自支持自定义切片网格的 PostGIS 切片。
低级实用程序
- mapbox-gl-function - Mapbox GL 风格函数求值器
- mapbox-gl-filter-simplify - 简化和复杂化 Mapbox GL 样式中的过滤器
- vt-pbf 将表示矢量切片的 JavaScript 对象序列化为矢量切片的二进制协议缓冲区编码
文章
MVT 的特殊之处在于它是平铺和多分辨率(基于缩放)显示优化的,更像是 "rendered" 地图用于视觉快速渲染和样式化,它不是您真正典型的地理数据格式.例如,它没有地理坐标,它在矢量对象的图块中有 "pixel space" 坐标。这使得 'simple conversion' from/to 地理数据非常棘手,而且非常典型的转换解决方案是一个奇怪的解决方案 - 使用地图服务器或服务处理您的数据,然后从中刮取图块。对于 tile scraping,最好的工具似乎是 tilelive-copy。
但是,从上面的长列表中最接近您可能想要的是 tippecanoe,它将 GeoJSON 转换为 MVT(在 mbtiles 文件中)。如果你的数据是.osm格式,那你需要转成geojson;但还有其他工具,例如 ogr2ogr。请注意,OSM 文件包含许多数据层并且结构非常具体,因此您需要为所有转换步骤找到运行良好的配置。
经过长时间的搜索,我现在的结论是:
gdal 应该与 ogr2ogr cli 工具转换器一起使用。理论上,它可以从 osm 转换为 mvt(geojson 这一步应该不是强制性的)。
tippecanoe 做了一件安静的等效事情,从 geojson 到 mvt(ogr2ogr 或 osmium 可以帮助从 .osm 转换为 .geojson)
但细节决定成败:您需要明确哪些数据在哪些 mvt 层(水、道路、建筑物等...)上。
我还没有找到一个方便的 "all-in-one" 工具能够将 osm 建筑或建筑部件多边形和关系转换为 mvt 建筑层,等等......看起来每个团队(mapbox 和 co)都秘密地把它藏在后面 API 具有 API 密钥系统的服务。
我看到几个地方 OSM data is converted to MVT(mapbox 矢量切片)用于简单渲染。
其中包括:
- OSRM 提供基于 MVT 的路线渲染图像
- OpenMapTiles 可以下载 MVT 格式的 OSM 地图
- GeoServer可以导入OSM导出MVT
有没有简单的工具可以在本地将OSM数据转换为MVT?
我有自己的 OSM 格式数据,我想将其转换为 MVT 并存储在本地,而不渲染为地图图像。
位于 GitHub 的 mapbox/awesome-vector-tiles 存储库有一长串 Mapbox Vector Tile 实现。这是截至今天的列表:
解析器和生成器
- vector-tile-js - 使用 JavaScript. 解析矢量切片
- mapnik-vector-tile - C++ 矢量切片 read/write 在 Mapnik 之上的实现。
- mbtiles-cpp - 用于将 mbtiles 和矢量数据解码为函数回调的 C++ 库。
- vector-tile-py - Python 将 Mapnik 矢量切片转换为 GeoJSON 的工具
- node-mapnik - Node.js API 用于取决于
mapnik-vector-tile
的矢量切片
- vector-tile-cs - 使用 C# 解析矢量切片(本机 C# 实现,无依赖项)。
- mapbox-vector-tile-cs - 使用 C# 解析矢量切片(使用 protobuf-net)。
- tilelive-bridge - Implements Tilelive API 用于从 Node.js 中的传统 Mapnik 数据源创建矢量切片。
- tilelive-vector - Implements Tilelive API 用于读取矢量切片并渲染到 Node.js 中的图像切片。
- mapbox-vector-tile is a Python package for vector tile encoding maintained by Mapzen. (It is used in Mapzen's vector tile service).
- geojson-vt - 在浏览器中将 GeoJSON 动态切片为矢量切片。
- java-vector-tile - java 矢量切片编码器和解码器。
- mapbox-vector-tile-java - 编码和解码 v2.1 Mapbox 矢量切片。将 JTS 几何与 MVT 功能相互转换,包括简单的用户数据支持。用于将世界坐标转换为 MVT 坐标并裁剪为图块包络的实用函数。
- cached-vector-tile - vector-tile-js 接口的另一种实现,由普通 JS objects/arrays 支持,而不是按需解析的 protobuf 数据。牺牲内存效率以获得更快的 feature.loadGeometry() 调用。
- tilegrinder - 一个帮助程序库,用于在 MBTiles 中的每个矢量瓦片上应用数据更改功能,使用本机 protobuf 包装器进行解压和编码,重新压缩结果并将它们存储在 MBTiles 或作为单个文件。
- SwiftVectorTiles - 根据 Mapbox 矢量切片规范的矢量切片编码器 Swift。
客户
- Mapbox GL Native - C++/OpenGL 矢量地图库,带有原生 SDK,适用于 Android、iOS、Node.js、macOS 和 Qt
- Mapbox GL JS - JavaScript/WebGL 矢量地图库。
- OpenLayers 3 - JavaScript 矢量和光栅库。
- WhirlyGlobe/Maply - Objective C 能够在 iOS 设备上读取和渲染矢量图块(以及使用 mapnik xml 设置样式)的代码。
- Leaflet.MapboxVectorTile 能够从 REST 端点读取 PBF MapboxVectorTiles 并将它们呈现为传单地图上的 TileLayer。如果您想在标准 Leaflet 网络地图上使用矢量切片而不需要 WebGL,请使用此选项。
- CARTO Mobile SDK - C++ maps library focused on offline features, for iOS, Android, Windows Phone and Xamarin with bindings for Java, Objective-C and C#. Based on Nutiteq Maps SDK,但开源并使用 CartoCSS。
- Mapzen Tangram - JavaScript 用于在带有 WebGL 的网络浏览器中实时渲染 2D 和 3D 地图的库,支持 MVT、GeoJSON、TopoJSON
- Mapzen Tangram-es - 使用带有自定义样式和交互的 OpenGL ES 2 渲染 2D 和 3D 地图的 C++ 库
- mapbox-gl-leaflet - 在 Leaflet 中创建 Mapbox GL 图层
- react-native-mapbox-gl - 从 React 应用程序渲染 Mapbox GL 地图
- hoverboard - 使用 Leaflet 0 在 canvas 上渲染矢量切片。7.x(支持 GeoJSON、TopoJSON 和 protobuf)
- Leaflet.VectorGrid - 在 Leaflet 1.0.0 中显示网格矢量数据(切片 GeoJSON、TopoJSON 或 Mapbox 矢量切片)
- ArcGIS API for JavaScript - 绘制矢量切片图层作为 web 地图的一部分。通过
mapbox-gl-js
集成完成渲染。 - mapscii - 用于 xterm 兼容终端的盲文和 ASCII 渲染器的 Vector Tile
应用程序/命令行工具
- Mapbox Studio - 桌面设计工作室,用于从原始地理数据创建矢量图块并将它们即时渲染成图像块。内部使用
tilelive.js
模块来处理矢量切片(参见tilelive-bridge
和tilelive-vector
) - kosmtik - 使用 CartoCSS 和 Mapnik 设计地图。
- ArcGIS Pro - 从在 ArcGIS Pro 中制作或从 ArcMap 导入的地图生成矢量切片。
- MVT Styler - 矢量切片的地图样式编辑器。
- Maputnik - Mapbox GL 样式规范的视觉样式编辑器。
CLI 实用程序
- Datamaps 可用于创建矢量切片并将其存储在 mbtiles 中的 C 应用程序。请参阅
render-vector
命令。 - tilemaker - 无需中间数据库即可直接从 .osm.pbf 提取中生成矢量切片的命令行工具。
- vector-tiles-producer C++ 中的命令行工具,使用 Mapnik XML. 在选定的缩放级别为给定区域创建矢量切片
- tippecanoe - 从大量 GeoJSON 特征中构建矢量瓦片集。
- vt-geojson - 将矢量切片解码为 GeoJSON FeatureCollections
- tl - tilelive 的备用命令行界面
- tileshrink - 减少图层范围并简化 MBTiles 中所有矢量切片的结果几何图形
- tiler - 用于将 GeoJSON、Shapefile 或 PostGIS 图层转换为原始矢量切片(或 MBTiles)的命令行工具
- geojson2mvt - npm 包,用于从 geojson 文件中为给定的 xyz 边界构建静态矢量瓦片树(使用 vt-geojson)
Mapbox GL JS 插件
- gl-draw - 添加了对 Mapbox GL JS 地图上绘图和编辑功能的支持
服务器
- tessera - 支持服务和渲染矢量图块。使用与 Mapbox Studio 相同的核心库。
- tilestrata - with tilestrata-vt, it can generate Mapnik Vector Tiles; with tilestrata-postgismvt,它可以从 PostGIS 数据库提供 Mapbox 矢量切片
- SpatialServer (PGRestAPI) - A multi-purpose GeoSpatial NodeJS web server created at SpatialDev 不仅可以提供填充有矢量图块的 MBTiles,还可以从 PostGIS 数据库中即时剪切矢量图块。
- Utilery 从 PostGIS 查询生成矢量切片的服务器。 Python 基于
- tileserver Mapzen 矢量切片服务。
- TileStache 通过 .pbf 扩展请求添加了对 Mapbox 矢量切片的支持。
- Kartotherian Wikipedia tile server with Tilerator 后端瓦片预生成器
- ArcGIS Online - 支持在由 ArcGIS API for JavaScript 提供支持的地图应用程序中提供矢量切片和渲染
- Portal for ArcGIS - 支持在由 ArcGIS API for JavaScript 提供支持的地图应用程序中提供矢量切片和渲染
- tilesplash - 轻便快速的 nodejs 网络服务器,用于从 postgis 后端提供 topojson 或 mapbox 矢量切片
- go-vtile-example - 用 Go 编写的示例服务器
- Tegola - 用纯 Go 编写的 MVT 服务器,支持从 PostGIS 数据提供程序提供切片服务。
- t-rex - 用 Rust 编写的单个可执行文件中的 MVT 服务器。提供来自支持自定义切片网格的 PostGIS 切片。
低级实用程序
- mapbox-gl-function - Mapbox GL 风格函数求值器
- mapbox-gl-filter-simplify - 简化和复杂化 Mapbox GL 样式中的过滤器
- vt-pbf 将表示矢量切片的 JavaScript 对象序列化为矢量切片的二进制协议缓冲区编码
文章
MVT 的特殊之处在于它是平铺和多分辨率(基于缩放)显示优化的,更像是 "rendered" 地图用于视觉快速渲染和样式化,它不是您真正典型的地理数据格式.例如,它没有地理坐标,它在矢量对象的图块中有 "pixel space" 坐标。这使得 'simple conversion' from/to 地理数据非常棘手,而且非常典型的转换解决方案是一个奇怪的解决方案 - 使用地图服务器或服务处理您的数据,然后从中刮取图块。对于 tile scraping,最好的工具似乎是 tilelive-copy。
但是,从上面的长列表中最接近您可能想要的是 tippecanoe,它将 GeoJSON 转换为 MVT(在 mbtiles 文件中)。如果你的数据是.osm格式,那你需要转成geojson;但还有其他工具,例如 ogr2ogr。请注意,OSM 文件包含许多数据层并且结构非常具体,因此您需要为所有转换步骤找到运行良好的配置。
经过长时间的搜索,我现在的结论是:
gdal 应该与 ogr2ogr cli 工具转换器一起使用。理论上,它可以从 osm 转换为 mvt(geojson 这一步应该不是强制性的)。
tippecanoe 做了一件安静的等效事情,从 geojson 到 mvt(ogr2ogr 或 osmium 可以帮助从 .osm 转换为 .geojson)
但细节决定成败:您需要明确哪些数据在哪些 mvt 层(水、道路、建筑物等...)上。 我还没有找到一个方便的 "all-in-one" 工具能够将 osm 建筑或建筑部件多边形和关系转换为 mvt 建筑层,等等......看起来每个团队(mapbox 和 co)都秘密地把它藏在后面 API 具有 API 密钥系统的服务。