Cesium中常用的坐標(biāo)
1.屏幕坐標(biāo)(像素)
即二維笛卡爾平面坐標(biāo)罩驻,我們通過鼠標(biāo)點擊直接獲取的坐標(biāo)就是屏幕坐標(biāo)了秒梳,單位是像素值,也可以通過new Cesium.Cartesian2(x, y)創(chuàng)建鳞疲。
2.笛卡爾空間直角坐標(biāo)
笛卡爾空間直角坐標(biāo)又稱為世界坐標(biāo)霎奢,Cesium中用Cartesian3變量表示,可通過new Cesium.Cartesian3(x, y, z)創(chuàng)建梢灭,主要是用來做空間位置的變化如平移夷家、旋轉(zhuǎn)和縮放等等蒸其,它的坐標(biāo)原點在橢球的中心,如下圖所示:
3.地理坐標(biāo)(弧度)
Cesium中的地理坐標(biāo)單位默認(rèn)是弧度制库快,用Cartographic變量表示摸袁,可通過new Cesium.Cartographic(longitude, latitude, height)創(chuàng)建,其中這里的參數(shù)是用弧度表示的經(jīng)緯度缺谴,即經(jīng)度和緯度但惶。弧度即角度對應(yīng)弧長是半徑的倍數(shù)湿蛔。
角度轉(zhuǎn)弧度 π/180×角度
弧度變角度 180/π×弧度
4.經(jīng)緯度坐標(biāo)
即測繪中的地理經(jīng)緯度坐標(biāo)膀曾,默認(rèn)是WGS84坐標(biāo)系,坐標(biāo)原點在橢球的質(zhì)心阳啥。
經(jīng)度:參考橢球面上某點的大地子午面與本初子午面間的兩面角添谊,東正西負(fù)。
緯度 :參考橢球面上某點的法線與赤道平面的夾角察迟,北正南負(fù)斩狱。
Cesuim中沒有具體的經(jīng)緯度對象,要得到經(jīng)緯度首先需要計算為弧度扎瓶,再進(jìn)行轉(zhuǎn)換所踊。Cesium提供了如下對應(yīng)的轉(zhuǎn)換方法:
// 經(jīng)緯度轉(zhuǎn)弧度
Cesium.Math.toRadians(degrees)
// 弧度轉(zhuǎn)經(jīng)緯度
Cesium.Math.toDegrees(radians)
Cesium中常用的坐標(biāo)變換
1.經(jīng)緯度坐標(biāo)轉(zhuǎn)世界坐標(biāo)
Cesium提供了兩種方式將經(jīng)緯度坐標(biāo)轉(zhuǎn)成世界坐標(biāo)。
// 方法1:直接轉(zhuǎn)換
// var cartesian3 = Cesium.Cartesian3.fromDegrees(lng, lat, height);
// 方法2:借助ellipsoid對象概荷,先轉(zhuǎn)換成弧度再轉(zhuǎn)換
var cartographic = Cesium.Cartographic.fromDegrees(lng, lat, height); //單位:度秕岛,度,米
var cartesian3 = ellipsoid.cartographicToCartesian(cartographic);
2.世界坐標(biāo)轉(zhuǎn)經(jīng)緯度
// 3.笛卡爾空間直角坐標(biāo)系轉(zhuǎn)為地理坐標(biāo)(弧度制)
// var cartographic = Cesium.Cartographic.fromCartesian(cartesian3); // 方法1
var cartographic = ellipsoid.cartesianToCartographic(cartesian3); // 方法2
// 4.地理坐標(biāo)(弧度制)轉(zhuǎn)為經(jīng)緯度坐標(biāo)
var lat = Cesium.Math.toDegrees(cartographic.latitude);
var lng = Cesium.Math.toDegrees(cartographic.longitude);
var height = cartographic.height;
3.弧度和經(jīng)緯度互轉(zhuǎn)
經(jīng)緯度轉(zhuǎn)弧度:
Cesium.Math.toRadians(degrees)
弧度轉(zhuǎn)經(jīng)緯度:
Cesium.Math.toDegrees(radians)
4.屏幕坐標(biāo)和世界坐標(biāo)互轉(zhuǎn)
屏幕轉(zhuǎn)世界坐標(biāo):
// 2.二維屏幕坐標(biāo)轉(zhuǎn)為三維笛卡爾空間直角坐標(biāo)(世界坐標(biāo))
var cartesian3 = scene.globe.pick(
viewer.camera.getPickRay(windowPostion),
scene
);
注意這里屏幕坐標(biāo)一定要在球上误证,否則生成出的cartesian對象是undefined继薛。
世界坐標(biāo)轉(zhuǎn)屏幕坐標(biāo):
// 三維笛卡爾空間直角坐標(biāo)(世界坐標(biāo))轉(zhuǎn)為二維屏幕坐標(biāo)
// 結(jié)果是Cartesian2對象,取出X,Y即為屏幕坐標(biāo)愈捅。
windowPostion = Cesium.SceneTransforms.wgs84ToWindowCoordinates(
scene,
cartesian3
);
坐標(biāo)變換工具
只有轉(zhuǎn)換到笛卡爾坐標(biāo)系后才能運(yùn)用計算機(jī)圖形學(xué)中的仿射變換知識進(jìn)行空間位置變換如平移旋轉(zhuǎn)縮放遏考。Cesium為我們提供了如下幾種很有用的變換工具類:
- Cesium.Cartesian3(相當(dāng)于Point3D)
- Cesium.Matrix3(3x3矩陣,用于描述旋轉(zhuǎn)變換)
- Cesium.Matrix4(4x4矩陣蓝谨,用于描述旋轉(zhuǎn)加平移變換)
- Cesium.Quaternion(四元數(shù)灌具,用于描述圍繞某個向量旋轉(zhuǎn)一定角度的變換)
- Cesium.Transforms(包含將位置轉(zhuǎn)換為各種參考系的功能)