墨卡托投影的应用

传统在三维球上绘制一个对象, 比如说 圆形、圆锥等,常用的方式是绘制一个局部圆等对象 ,然后经过mvp投影变换放到指定的地理位置处,当然这样也有很多好处,比如说动态变化时,只需要更新下投影变换矩阵,不用重新绘制对象等。但是也存在一个比较大的弊端,做一些分析时不是那么方便,圆形相对还好,如果是一个多边形,怎么判断其他点在他内部呢

碰上 这种情况,墨卡托投影就比较有用了

基本思路是将地理座标转换成墨卡托投影下的座标,然后根据圆形半径等参数,直接计算出圆上其他点的墨卡托 座标(其他形状类似),这样就能获取到圆形上点的墨卡托座标点了,然后再转换成地理座标,就可以获取圆形的地理点座标点集了,这样做其他应用就比较方便了

    var viewPoint = new Cesium.Cartesian3(-1715458.381202962,4993543.848935778,3566901.09041305);
    // 加载座标轴,便于测试
    var transform = Cesium.Transforms.eastNorthUpToFixedFrame(viewPoint);
    // 世界座标转换为投影座标
    var webMercatorProjection = new Cesium.WebMercatorProjection(viewer.scene.globe.ellipsoid);
    var viewPointWebMercator = webMercatorProjection.project(Cesium.Cartographic.fromCartesian(viewPoint));

    // 目标点集合
    var destPoints = [];

    // 视域点和目标点的距离
    var radius = 100; // 视距1000米

    // 计算一圈
    for (var i = 0; i <= 360; i++) {
        // 度数转弧度
        var radians = Cesium.Math.toRadians(i);
        // 计算目标点
        var toPoint = new Cesium.Cartesian3(viewPointWebMercator.x + radius * Math.cos(radians), viewPointWebMercator.y + radius * Math.sin(radians),480);
        // 投影座标转世界座标
        toPoint = webMercatorProjection.unproject(toPoint);
        destPoints.push(Cesium.Cartographic.toCartesian(toPoint.clone()));
    }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章