将Leafzen图块与Leaflet一起使用

时间:2017-06-02 09:08:02

标签: leaflet openstreetmap mapzen

我阅读传单和Mapzen文档表明,为了使用Leaflet的自定义磁贴提供程序,只需要做两件事:

  1. L.tilelayer(urlTemplateToTileProvider)
  2. 中指定切片提供程序
  3. 将此提供商设置为MapZen
  4. var urlTemplateToTileProvider =
      'http://tile.mapzen.com/mapzen/vector/v1/all/{z}/{x}/{y}.mvt?api_key=apiKey'
    

    然而,当我尝试这个时,我最终得到一张空地图,然后继续正确显示标记等。然而,对生成的图块URL进行手动测试,例如,

    http://tile.mapzen.com/mapzen/vector/v1/all/14/8471/5583.mvt?api_key=apiKey

    事实上确实下载了一些 - 我无法理解 - 数据。

    我还尝试使用Mapzen文档(.json.geojson)中提到的其他两种格式,但结果完全相同。鉴于后两种格式返回人类可读数据,我在浏览器中检查了我的测试图块,数据确实是我想要使用的区域。

    奇怪的是,Leaflet文档和教程请求PNG切片图层(http://{s}.tile.osm.org/{z}/{x}/{y}.png),而不是原始数据。

    显然,我在这里做错了。对于任何可能提供帮助的人,我都非常感激。

1 个答案:

答案 0 :(得分:7)

Tile Layer用于光栅图块(例如普通图片,例如PNG格式)。

Mapzen提供矢量图块。要将它们与Leaflet一起使用,您可以使用插件,例如Leaflet.VectorGridlicense

  

在Leaflet 1.0.0中显示网格化矢量数据(切片GeoJSON或protobuf矢量切片)

请参阅demo,其中包含来自Mapzen的图块

var mapzenTilesUrl = "https://tile.mapzen.com/mapzen/vector/v1/all/{z}/{x}/{y}.mvt?api_key={apikey}";
var mapzenVectorTileOptions = {
  rendererFactory: L.canvas.tile,
  attribution: '<a href="https://mapzen.com/">&copy; MapZen</a>, <a href="http://www.openstreetmap.org/copyright">&copy; OpenStreetMap</a> contributors',
  vectorTileLayerStyles: vectorTileStyling,
  apikey: 'KEY',
};
var mapzenTilesPbfLayer = L.vectorGrid.protobuf(mapzenTilesUrl, mapzenVectorTileOptions);

由于您在矢量切片中有原始数据,因此需要提供样式规范(vectorTileStyling