Cesium中的座標系及轉換

2022-06-17 19:12:17 字數 4437 閱讀 4313

在我們開始學習entity之前,我們首先需要先學習下cesium中的座標系,cesium中有多個座標系,在進行新增entity時經常會使用到。

我們先來列舉下cesium中的座標系:wgs84經緯度座標系(沒有實際的物件)、wgs84弧度座標系(cartographic)、笛卡爾空間直角座標系(cartesian3)、平面座標系(cartesian2),4d笛卡爾座標系(cartesian4)

world geodetic system 1984,是為gps全球定位系統使用而建立的座標系統,座標原點為地球質心,其地心空間直角座標系的z軸指向bih (國際時間服務機構)1984.o定義的協議地球極(ctp)方向,x軸指向bih 1984.0的零子午面和ctp赤道的交點,y軸與z軸、x軸垂直構成右手座標系。我們平常手機上的指南針顯示的經緯度就是這個座標系下當前的座標,進度範圍[-180,180],緯度範圍[-90,90]。

我們都知道cesium目前支援兩種座標系wgs84和webmercator,但是在cesium中沒有實際的物件來描述wgs84座標,都是以弧度的方式來進行運用的也就是cartographic類:new cesium.cartographic(longitude, latitude, height),這裡的引數也叫longitude、latitude,就是經度和緯度,計算方法:弧度= π/180×經緯度角度。

wgs84座標系

笛卡爾空間座標的原點就是橢球的中心,我們在計算機上進行繪圖時,不方便使用經緯度直接進行繪圖,一般會將座標系轉換為笛卡爾座標系,使用計算機圖形學中的知識進行繪圖。這裡的cartesian3,有點類似於supermap iobejcts中的point3d物件,new cesium.cartesian3(x, y, z),裡面三個分量xyz。

笛卡爾空間直角座標系

平面座標系也就是平面直角座標系,是乙個二維笛卡爾座標系,與cartesian3相比少了乙個z的分量,new cesium.cartesian2(x, y)。cartesian2經常用來描述螢幕座標系,比如滑鼠在電腦螢幕上的點選位置,返回的就是cartesian2,返回了滑鼠點選位置的xy畫素點分量。

平面座標系

到目前來說,還沒有用過,等後續有用到的時候再更新吧

經緯度轉弧度:var radians=cesium.cesiummath.toradians(degrees);

弧度轉經緯度:var degrees=cesium.cesiummath.todegrees(radians);

我們來看下cesium中原始碼的轉換方法,其實就是:弧度= π/180×經緯度角度;經緯度角度=180/π×弧度。

cesiummath.radians_per_degree = math.pi / 180.0;

cesiummath.degrees_per_radian = 180.0 / math.pi;

cesiummath.toradians = function(degrees)

//>>includeend('debug');

return degrees * cesiummath.radians_per_degree;

};cesiummath.todegrees = function(radians)

//>>includeend('debug');

return radians * cesiummath.degrees_per_radian;

};

1.直接轉換:通過上面提到的方法,將經緯度轉換為弧度後,直接new cesium.cartographic(longitude弧度, latitude弧度, height公尺)

2.間接轉換:通過var cartographic= cesium.cartographic.fromdegrees(longitude, latitude, height)直接轉換;

類似的還有var cartographic= cesium.cartographic.fromradians(longitude, latitude, height)方法,傳入的是弧度。

wgs84轉為笛卡爾空間直角座標系

1.通過經緯度或弧度進行轉換:

var c3= cesium.cartesian3.fromdegrees(longitude, latitude, height) ;高度height可不填寫。

var c3s=cesium.cartesian3.fromdegreesarray(coordinates);coordinates格式為不帶高度的陣列。例如:[-115.0, 37.0, -107.0, 33.0]

var c3s=cesium.cartesian3.fromdegreesarrayheights(coordinates);coordinates格式為帶有高度的陣列。例如:[-115.0, 37.0, 100000.0, -107.0, 33.0, 150000.0]

同理將度轉化為弧度,然後再進行轉換,

和上面一樣有cesium.cartesian3.fromradians,cesium.cartesian3.fromradiansarray,cesium.cartesian3.fromradiansarrayheights等方法,用法和上面一樣,只是度需要轉換為弧度,這裡不再講這些方法。

cartesian3.fromradians = function(longitude, latitude, height, ellipsoid, result) 

return cartesian3.add(scratchk, scratchn, result);

};

2.通過度來進行轉換var position = cesium.cartographic.fromdegrees(longitude, latitude, height);

var c3 = cesium.ellipsoid.wgs84.cartographictocartesian(position);

var c3s=cesium.ellipsoid.wgs84.cartographicarraytocartesianarray([position1,position2,position3])

弧度同理

笛卡爾空間直角座標系轉換為wgs84

1.直接轉換

var cartographic= cesium.cartographic.fromcartesian(cartesian3)

轉換得到wgs84弧度座標系後再使用經緯度和弧度的轉換,進行轉換到目標值

2、間接轉換

var cartographic= cesium.ellipsoid.wgs84.cartesiantocartographic(cartesian3)

var cartographics= cesium.ellipsoid.wgs84.cartesianarraytocartographicarray([cartesian1,cartesian2,cartesian3])

平面座標系轉笛卡爾空間直角座標系

這裡需要說明的是當前的點必須在三維球上,否則返回的是undefined,我們在screenspaceeventhandler**會取到的座標都是cartesian2,大家可以測試觀察下。

1.螢幕座標轉場景wgs84座標,這裡的場景座標是包含了地形、傾斜、模型的座標。

轉換方法為:var cartesian3= viewer.scene.pickposition(cartesian2),目前ie瀏覽器不支援深度拾取,所以用不了這個方法。

2.螢幕座標轉地表座標,這裡是地球表面的wgs84座標,包含地形,不包括模型、傾斜攝影表面。

轉換方法為:var cartesian3= viewer.scene.globe.pick(viewer.camera.getpickray(cartesian2),viewer.scene);

3.螢幕座標轉橢球面座標,這裡的橢球面座標是參考橢球的wgs84座標,不包含地形、模型、傾斜攝影表面。

轉換方法為:var cartesian3= viewer.scene.camera.pickellipsoid(cartesian2)

笛卡爾空間直角座標系轉平面座標系

var cartesian2= cesium.scenetransforms.wgs84towindowcoordinates(viewer.scene,cartesian3)

Cesium 座標系轉換

cesium中常用的座標有兩種wgs84地理座標系和笛卡爾空間座標系 世界座標 我們平時常用的以經緯度來指明乙個地點就是用的wgs84座標,笛卡爾空間座標系常用來做一些空間位置變換如平移旋轉縮放等等。二者的聯絡如下圖,笛卡爾空間座標的原點就是橢球的中心.pick 螢幕座標 cartesian 世界座...

Cesium空間座標系相互轉換

一 常用座標轉換 世界座標轉經緯度座標 var cartographic cesium.cartographic.fromcartesian cartesian 世界座標轉弧度 var longitude cesium.math.todegrees cartographic.longitude va...

Cesium 座標轉換

參考 幾個重要的座標物件 1.世界座標 cartesian3 笛卡爾空間直角座標系 new cesium.cartesian3 x,y,z 可以看作,以橢球中心為原點的空間直角座標系中的乙個點的座標。2.經緯度 地理座標系,座標原點在橢球的質心。經度 參考橢球面上某點的大地子午面與本初子午面間的兩面...