Openlayers 具有相同投影但不同栅格的两个XYZ图层。是否忽略了TileGrid范围?

Openlayers 具有相同投影但不同栅格的两个XYZ图层。是否忽略了TileGrid范围?,openlayers,Openlayers,我有两个带有自定义投影的XYZ源(EPSG:3059),我想同时显示两个层,外加一个OSM层。困难在于我的源的分辨率相差5倍(因此z=0时的平铺范围也不同),因此我不能对这两个源使用相同的平铺ID 我假设Projection对象只负责米和源坐标之间的转换(反之亦然),而TileGrid对象负责请求正确的X Y Z。因此我假设需要为两个源和两个不同的TileGrid创建一个投影。 然而,似乎完全忽略了TileGrid的范围,而投影的范围定义了将加载哪些tile 我手动计算了两个自定义源的磁贴x=0

我有两个带有自定义投影的XYZ源(EPSG:3059),我想同时显示两个层,外加一个OSM层。困难在于我的源的分辨率相差5倍(因此z=0时的平铺范围也不同),因此我不能对这两个源使用相同的平铺ID

我假设Projection对象只负责米和源坐标之间的转换(反之亦然),而TileGrid对象负责请求正确的X Y Z。因此我假设需要为两个源和两个不同的TileGrid创建一个投影。 然而,似乎完全忽略了TileGrid的范围,而投影的范围定义了将加载哪些tile

我手动计算了两个自定义源的磁贴x=0 y=0 z=0的范围:

const extent2k = [-5120900, -13757822.445178203, 12635022.445178203, 3998100];
const extent10k = [-5120900, -13757822.445178203, 12635022.445178203, 3998100];
如果创建未指定范围的投影:

proj4.defs("EPSG:3059","+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9996 +x_0=500000 +y_0=-6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
register(proj4);
const projection = getProjection('EPSG:3059');
并创建两个具有不同范围的平铺网格:

const tileGrid10k = new TileGrid({
    extent: extent10k,
    resolutions: resolutions10k,
});
const tileGrid2k = new TileGrid({
    extent: extent2k,
    resolutions: resolutions2k,
});
然后在地图上添加三个图层,两个带有此投影的矿层和瓷砖,再加上OSM图层,只有OSM图层可以正常工作。我的两个自定义层都请求了错误的瓷砖

若我将投影范围设置为
projection.setExtent(extent10k)、OSM和第一个“我的自定义层”可以工作,但第二个不行。如果我将投影范围设置为
projection.setExtent(extent2k),OSM和第二层工作,但第一层不工作

看起来TileGrid本身的范围并没有改变XYZ的计算方式,只有投影的范围才重要。应该是这样吗

我试图以这种方式创建两个不同的投影:

const projection10k = getProjection('EPSG:3059');
projection10k.setExtent(extent10k);

const projection2k = getProjection('EPSG:3059');
projection2k.setExtent(extent2k);
但是如果没有成功-getProjection返回相同的实例,因此不能有两个不同的区段

有什么正确的方法可以解决我的任务,即两个XYZ层具有不同的平铺0/0/0范围,但投影相同?

oops。 这种行为的原因是我将tileGrid传递给了错误的对象,而不是将其传递给XYZ()选项,而是将其传递给TileLayer(),而TileLayer根本不将tileGrid作为选项

XYZ初始值设定项具有回退:

var tileGrid = options.tileGrid !== undefined
    ? options.tileGrid
    : createXYZ({
        extent: extentFromProjection(projection), ...
所以它确实使用了投影的范围

现在,我创建了投影,但没有指定en extent,并将两个具有不同extent的tilegrid传递给XYZ()源。所有三层都按预期工作