如何定义图块提供者 (H.map.provider.TileProvider)?

How to define tile provider (H.map.provider.TileProvider)?

我正在尝试获取边界框中的图块以将它们传递给 PDE。我正在使用以下代码,但我不确定如何定义 H.map.provider.TileProvider.

// I don't know how to define the tileProvider (this is what I have for now)
var tileProvider = new H.map.provider.TileProvider({
min: 12,
max: 15,
});

var overlayLayer = new H.map.layer.TileLayer(tileProvider, {
// Let's make it semi-transparent
opacity: 0.5
})

var boundingBox = new 
H.geo.Rect(map.getViewBounds().getTop(),map.getViewBounds().getLeft(),map.getVi 
ewBounds().getBottom(),map.getViewBounds().getRight());

var zoomLevel=14;
var cacheOnly=false;
var prioCenter=new H.math.Point(42.36099070901032,-71.09613451879883);

overlayLayer.requestTiles(boundingBox, zoomLevel, cacheOnly, prioCenter)

你能告诉我如何定义 TileProvider 吗?

谢谢

您不能创建 TileProvider 的实例,因为它是一个抽象 class。您可以创建其子项的实例(ImageTileProvider、MarkerTileProvider 等,请参阅开发人员站点中的文档)。

示例:

  // Create your own LocalObjectProvider and add some hierarchical objects:
  myProvider = new H.map.provider.LocalObjectProvider();
  myMap.addLayer(new H.map.layer.ObjectLayer(myProvider));

我知道这个问题已经有一年了,但答案可能会对其他人有所帮助:

(function (map) {
    tileProvider = new H.map.provider.ImageTileProvider({
        min: 5, //min zoom factor
        max: 12,  //max zoom factor
        

定义一个带有 3 个参数的 getURL 函数:

getURL: function (column, row, zoom) {

这里你应该 return 一个 url 包含瓷砖。您可以通过 API 甚至本地获取它。最后传递 3 个因素:zoom / col / row .. 或者你的图像是如何被调用的

在下一个示例中,图像存储在以缩放数字和图像命名的文件夹中,例如:12-16.png

            return `.../${zoom}/${column}-${row}.png`;
        }
    });

请注意,如果您从外部提供商处获取磁贴图像 您应该使用版权方法确认提供者:

tileProvider.getCopyrights = function (bounds, level) {
    return [{
        label: "© ....", // this will appear under the map
        alt: "© ...."
    }];
};

然后定义一个包含图块的图层。

var overlayLayer = new H.map.layer.TileLayer(tileProvider);

将图层添加到地图(我假设您已经初始化了地图)

 map.addLayer(overlayLayer);
})(map);



(function(map) {
    tileProvider = new H.map.provider.ImageTileProvider({
        min: 5,
        max: 12,
        getURL: (column, row, zoom) =>
            `${site_url}/images-folder/tiles-folder/${zoom}/${column}_${row}.png`,
    });
    tileProvider.getCopyrights = (bounds, level) => {
        return [{
            label: "©...",
            alt: "©..."
        }];
    };
    let overlayLayer = new H.map.layer.TileLayer(tileProvider);
    map.addLayer(overlayLayer);
})(map);