墨卡託投影的應用

傳統在三維球上繪製一個對象, 比如說 圓形、圓錐等,常用的方式是繪製一個局部圓等對象 ,然後經過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()));
    }

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