2023-01-11
1.坐標系
Cartesian3 笛卡爾坐標,又叫世界坐標,是一個三維空間中的點 ,具有xyz,類似:(-1314910.6675027965, 5328726.846411945, 3238183.748823095),單位為米
原點在橢球中心
Cartesian2 是二維空間中的點,通常是螢屏坐標
console.log(`滑鼠點擊位置為:${click.position}`);
滑鼠點擊位置為:(372.79998779296875, 213.7999997138977)
螢屏左上角為原點,向右為x正方向,向下為y正方向
cartographic
和Cartesian3一樣是三維空間中的點,但是單位是弧度,通常也叫橢球坐標
當世界坐標為:(-1315009.0349616667, 5329125.484381694, 3238427.62747913),
此時對應的cartographic為:(1.8127222052449903, 0.5359692831389684, 492.5617098962376)
第三個引數是海拔,單位為米,
經緯度
Cesuim中沒有具體的經緯度物件,要得到經緯度首先需要計算為弧度,再進行轉換,
2.坐標轉換
2.1 轉換為經緯度
其實在實際應用中最常用的就是經緯度,我們先將如何轉換為經緯度
2.1.1 cartographic 轉經緯度(弧度轉經緯度)
這是最簡單的,弧度和經緯度是可以直接按照數學公式計算的,

Cesium的Math庫也提供了函式進行計算:
// 弧度轉換為經緯度 var lon = Cesium.Math.toDegrees(cartographic.longitude); // 經度 var lat = Cesium.Math.toDegrees(cartographic.latitude); // 緯度 console.log(`經度:${lon},緯度:${lat}`);
2.1.2 Cartesian3轉經緯度(世界坐標/笛卡爾坐標 轉經緯度)
由于已經知道如果有弧度的話就可以計算得到經緯度,所以問題轉換為如何將世界坐標轉換為橢球坐標,
找到了如下方法

可以直接用Cartesian3創建一個弧度坐標,
var x = Cesium.Cartographic.fromCartesian(new Cesium.Cartesian3.fromDegrees(100,30,500)) console.log(`100,30,500對應的弧度:${x}`);
100,30,500對應的弧度:(1.7453292519943295, 0.5235987755982987, 499.9999999999014)
2.1.3 螢屏坐標轉經緯度
在camera里有這么一個方法

回傳一個Cartesian3也就是笛卡爾坐標系下的點
click是點擊事件,這里不用管console.log(`滑鼠點擊位置為:${click.position}`); var cartesian = that.viewer.scene.globe.pick(that.viewer.camera.getPickRay(click.position),that.viewer.scene); console.log(`世界坐標:${cartesian}`);
滑鼠點擊位置為:(367.20001220703125, 233.00003337860107)
世界坐標:(-1296852.0512911458, 5257755.129365052, 3210992.6158761424) Cartesian3怎么轉經緯度不用說了吧//轉換為弧度 var x = Cesium.Cartographic.fromCartesian(cartesian); console.log(x); //弧度轉經緯度 var lon = Cesium.Math.toDegrees(cartographic.longitude); // 經度 var lat = Cesium.Math.toDegrees(cartographic.latitude); // 緯度 console.log(`經度:${lon},緯度:${lat}`);

2.2 經緯度轉換為其他
2.2.1 經緯度轉換為弧度
//經緯度轉弧度 var cartographic=Cesium.Cartographic.fromDegrees(lon,lat,height); console.log(cartographic);
2.2.2 經緯度轉換為世界坐標
Cesium.Cartesian3.fromDegrees(longitude, latitude, height, ellipsoid, result);
很明顯,fromDegrees這個方法就是從經緯度轉換為某某坐標系下的方法
2.2.3 經緯度轉換為螢屏坐標
var c3 = Cesium.Cartesian3.fromDegrees(new Cesium.Cartesian3(100,30,500)); //笛卡爾坐標轉螢屏坐標 var c2 = Cesium.SceneTransforms.wgs84ToWindowCoordinates(that.viewer.scene, c3); console.log(c2);

原點是viewer的原點
3. 總結
我們可以畫一條線
Cartesian2 -> Cartesian3 -> cartographic -> 經緯度
這條線往返轉換的方法都講了,依次轉換就可以了
中間應該還有一些跳步驟的方法,比如Cesium.Cartesian3.fromDegrees(longitude, latitude, height, ellipsoid, result),經緯度直接轉換為世界坐標
后面再更新
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/541759.html
標籤:其他
