1

我正在尝试将 OpenStreetMap 数据(osm.pbf 文件)转换为“z/x/y.pbf”文件夹/文件结构,并使用 Openlayers 6 和 Ionic 离线显示地图。

到目前为止我所做的是:

  1. 下载的 osm.pbf 文件(https://download.geofabrik.de/europe/netherlands/flevoland.html
  2. 使用 Maperitive 打开 osm.pbf 并用于generate-mbtiles [minzoom=0 maxzoom=16]生成 mbtiles
  3. 使用 mbutil ( https://github.com/mapbox/mbutil ) 和mb-util --image_format=pbf input_folder output_folder命令。在此之后,我最终在正确的文件夹结构中使用 pbfs -到目前为止非常好
  4. 使用 openlayers 显示 pbfs(请注意,我使用的是 Ionic,所以这里有一些 Angular 代码)
this.map = new Map({
layers: [
        new VectorTileLayer({
          declutter: true,
          source: new VectorTileSource({
            format: new MVT(),
            url: 'http://localhost:8100/assets/downloaded-osm-pbfs/{z}/{x}/{y}.pbf'
          }),
          style: createMapboxStreetsV6Style(Style, Fill, Stroke, Icon, Text)
        })
      ],
      target: 'map',
      view: new View({
        center: [0, 0],
        zoom: 2
      })
    });

在此之后,一旦我尝试在浏览器中查看地图,我就会得到“错误:未实现的类型:6”。 在此处输入图像描述

有趣的是,如果我使用https://openmaptiles.com/downloads并从那里下载 mbtiles 并执行第 3-4 步(在第 3 步中,我只是做额外的步骤并解压缩 pbfs,因为 openmaptiles gzip 是文件)一切都会正确显示,但这里的问题是 openmaptiles 提供 14 个缩放级别,我需要 16 个缩放级别。

知道如何克服这个问题吗?任何帮助将不胜感激!

4

1 回答 1

0

首先,矢量切片被过度放大,您只需要 10 或 12 级,大部分可能高达 14 级即可获得最详细的数据,并且地图继续显示该数据一直到 24 级,而不会损失质量。其次,gz是mbtiles内部的格式,即规范。由 ogr2ogr 或 tippecanoe、python 或其他工具创建的所有矢量图块始终是 gzip 压缩的 pbf。
我们在 webview Android 和 wkwebview iOS 的许多移动应用程序中使用带有 openlayers 的 openmaptiles 在 iOS 12 中,iOS 将 webview 的可用内存减少了一半。基本上扼杀了 wkwebview 中的高级映射和数据可视化。

这是我们的开放层驱动的移动应用程序(和 WPF 桌面) https://mapdiscovery.techmaven.net

我们还使用了类似于http://geodataexplorer.world的图标的 Apache Cordova, 它使用传单

我们也使用 Cesium http://earthexplorer.world

于 2020-09-03T02:53:04.597 回答