in modules/geo-layers/src/tile-layer/tile-2d-traversal.js [92:137]
export function getOSMTileIndices(viewport, maxZ, zRange) {
// Get the culling volume of the current camera
const planes = Object.values(viewport.getFrustumPlanes()).map(
({normal, distance}) => new Plane(normal.clone().negate(), distance)
);
const cullingVolume = new CullingVolume(planes);
// Project zRange from meters to common space
const unitsPerMeter = viewport.distanceScales.unitsPerMeter[2];
const elevationMin = (zRange && zRange[0] * unitsPerMeter) || 0;
const elevationMax = (zRange && zRange[1] * unitsPerMeter) || 0;
// Always load at the current zoom level if pitch is small
const minZ = viewport.pitch <= 60 ? maxZ : 0;
const root = new OSMNode(0, 0, 0);
const traversalParams = {
viewport,
cullingVolume,
elevationBounds: [elevationMin, elevationMax],
minZ,
maxZ,
// num. of worlds from the center. For repeated maps
offset: 0
};
root.update(traversalParams);
if (viewport.subViewports && viewport.subViewports.length > 1) {
// Check worlds in repeated maps
traversalParams.offset = -1;
while (root.update(traversalParams)) {
if (--traversalParams.offset < -MAX_MAPS) {
break;
}
}
traversalParams.offset = 1;
while (root.update(traversalParams)) {
if (++traversalParams.offset > MAX_MAPS) {
break;
}
}
}
return root.getSelected();
}