xyz瓦片 获取方法

1、openlayer经纬度转xyz

function lon2tile(lon, zoom) {
    return (Math.floor((lon + 180) / 360 * Math.pow(2, zoom)));
}
 
function lat2tile(lat, zoom) {
    return (Math.floor((1 - Math.log(Math.tan(lat * Math.PI / 180) + 1 / Math.cos(lat * Math.PI / 180)) / Math.PI) / 2 * Math.pow(2, zoom)));
}
 
const loadMapByBounds = (minLon, minLat, maxLon, maxLat, zoom) => {
    const minTileX = lon2tile(minLon, zoom);
    const minTileY = lat2tile(maxLat, zoom); // Y轴是反的,自上而下
    const maxTileX = lon2tile(maxLon, zoom);
    const maxTileY = lat2tile(minLat, zoom);
    for (let x = minTileX; x <= maxTileX; x++) {
        for (let y = minTileY; y <= maxTileY; y++) {
            loadTile(x, y, zoom); // 加载瓦片
        }
    }
}

Openlayers中的比例尺(scale)和分辨率(resolution)_openlayers 比例尺-CSDN博客

参照 :GIS中XYZ瓦片的加载流程解析与实现 - 当时明月在曾照彩云归 - 博客园

2、cesium 比例尺方法获取

// 计算当前视图的比例尺分母及分辨率
function calculateScaleDenominator(viewer) {
  let scale = null;
  let centerX = viewer._lastWidth / 2;
  let centerY = viewer._lastHeight / 2;
  let cartesian2 = new Cesium.Cartesian2(centerX, centerY);
  let ray = viewer.camera.getPickRay(cartesian2);
  let cartesian = viewer.scene.globe.pick(ray, viewer.scene);
  if (cartesian) {
    let boundingSphere = new Cesium.BoundingSphere();
    boundingSphere.center = cartesian;
    boundingSphere.radius = 0.1;
    let resolution = viewer.scene.camera.getPixelSize(
      boundingSphere, 
      viewer.scene.context.drawingBufferWidth,
      viewer.scene.context.drawingBufferHeight
    );
    scale = (96 * resolution) / 0.0254;
  }
  return { scale: scale, resolution: resolution };
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值