OSM 数据到 mapBox 格式

OSM data to mapBox format

我看到几个地方 OSM data is converted to MVT(mapbox 矢量切片)用于简单渲染。

其中包括:

有没有简单的工具可以在本地将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-bridgetilelive-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 切片。

低级实用程序

文章

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 密钥系统的服务。