日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

学习【Cesium】第四篇,Cesium的坐标与转换(学不会揍我)

發(fā)布時(shí)間:2024/1/18 编程问答 64 豆豆
生活随笔 收集整理的這篇文章主要介紹了 学习【Cesium】第四篇,Cesium的坐标与转换(学不会揍我) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Cesium坐標(biāo)系

Cesium中常用的坐標(biāo)有兩種WGS84地理坐標(biāo)系和笛卡爾空間坐標(biāo)系,我們平時(shí)常用的以經(jīng)緯度來指明一個(gè)地點(diǎn)就是用的WGS84坐標(biāo),笛卡爾空間坐標(biāo)系常用來做一些空間位置變換如平移旋轉(zhuǎn)縮放等等。其中,WGS84地理坐標(biāo)系包括WGS84經(jīng)緯度坐標(biāo)系(沒有實(shí)際的對(duì)象)和WGS84弧度坐標(biāo)系(Cartographic);笛卡爾空間坐標(biāo)系包括笛卡爾空間直角坐標(biāo)系(Cartesian3)、平面坐標(biāo)系(Cartesian2),4D笛卡爾坐標(biāo)系(Cartesian4)。

WGS84坐標(biāo)系(Cartographic)



World Geodetic System 1984,是為GPS全球定位 系統(tǒng)使用而建立的坐標(biāo)系統(tǒng),坐標(biāo)原點(diǎn)為地球質(zhì)心,其地心空間直角坐標(biāo)系的Z軸指向BIH (國(guó)際時(shí)間服務(wù)機(jī)構(gòu)) 1984.0定義的協(xié)議地球極(CTP)方向,X軸指向BIH 1984.0的零子午面和CTP赤道的交點(diǎn),Y軸與Z軸、X軸垂直構(gòu)成右手坐標(biāo)系。我們平常手機(jī)上的指南針顯示的經(jīng)緯度就是這個(gè)坐標(biāo)系下當(dāng)前的坐標(biāo),進(jìn)度范圍[-180, 180]緯度范圍[-90, 90]。
?

?Cesium目前支持兩種坐標(biāo)系WGS84和WebMercator,但是在Cesium中沒有 實(shí)際的對(duì)象來描述WGS84坐標(biāo),都是以弧度的方式來進(jìn)行運(yùn)用的也就是Cartographic類: new Cesium.Cartographic(longitude, latitude, height),這里的參數(shù)也叫l(wèi)ongitude、latitude, 就是經(jīng)度和緯度,計(jì)算方法:弧度= π/180x經(jīng)緯度角度。

笛卡爾空間坐標(biāo)系(Cartesian3)

直角坐標(biāo)系也可以推廣至三維空間與高維空間?(higher dimension)。在原本的二維直角坐標(biāo)系,再添加一個(gè)垂直于x-軸,y-軸的坐標(biāo)軸,稱為z-軸。假若,這三個(gè)坐標(biāo)軸滿足右手定則,則可得到三維的直角坐標(biāo)系。這z-軸與x-軸,y-軸相互正交于原點(diǎn)。在三維空間的任何一點(diǎn)P,可以用直角坐標(biāo)(x,y,z)來表達(dá)其位置

平面坐標(biāo)系(Cartesian2)?


平面坐標(biāo)系也就是平面直角坐標(biāo)系,是一一個(gè)二維笛卡爾坐標(biāo)系,與Cartesian3相比少 了-一個(gè)z的分量, new Cesium.Cartesian2(x, y)。Cartesian2經(jīng)常用來描述屏幕坐標(biāo)系,如鼠標(biāo)在電腦屏幕上的點(diǎn)擊位置,返回的就是Cartesian2, 返回了鼠標(biāo)點(diǎn)擊位置的xy像素點(diǎn)分量。

?4D笛卡爾坐標(biāo)系(Cartesian4)

在《web GL編程指南》中有描述:

?

?(按照矩陣運(yùn)算規(guī)則:依次用各行*各列)新的X=1*x+Tx*1;新的Y=y+Ty;新的Z=z+Tz; 最后的的一行任然為1不改變。 加入沒有紅框中的那一行的話運(yùn)算就不成立

?所以可以理解為Cartesian4就是三維坐標(biāo)上增加一行,使用的時(shí)候看作Cartesian3即可,在實(shí)際場(chǎng)景運(yùn)用中基本無。

坐標(biāo)轉(zhuǎn)換

1. 經(jīng)緯度和弧度的轉(zhuǎn)換:

var radians=Cesium.Math.toRadians(degrees);//經(jīng)緯度轉(zhuǎn)弧度var degrees=Cesium.Math.toDegrees(radians);//弧度轉(zhuǎn)經(jīng)緯度

2. WGS84經(jīng)緯度坐標(biāo)和WGS84弧度坐標(biāo)系(Cartographic)的轉(zhuǎn)換:

//方法一: var longitude = Cesium.Math.toRadians(longitude1); //其中l(wèi)ongitude1為可選經(jīng)度,以弧度為單位 var latitude= Cesium.Math.toRadians(latitude1) //其中l(wèi)atitude1為可選緯度,以弧度為單位 var cartographic = new Cesium.Cartographic(longitude,latitude,height) //方法二: var cartographic= Cesium.Cartographic.fromDegrees(longitude,latitude,height); //其中,longitude和latitude為可選經(jīng)、緯度,以弧度為單位 //方法三: var cartographic= Cesium.Cartographic.fromRadians(longitude,latitude,height); //其中,longitude和latitude為可選經(jīng)、緯度,以弧度為單位

3. WGS84坐標(biāo)系和笛卡爾空間直角坐標(biāo)系(Cartesian3)的轉(zhuǎn)換

? ? ? ?通過經(jīng)緯度或弧度進(jìn)行轉(zhuǎn)換

var position = Cesium.Cartesian3.fromDegrees(longitude,latitude,height);//其中,高度默認(rèn)值為0,可以不用填寫;longitude和latitude為可選經(jīng)、緯度,以弧度為單位 var positions = Cesium.Cartesian3.fromDegreesArray(coordinates);//其中,coordinates格式為不帶高度的數(shù)組。例如:[-115.0,37.0,-107.0,33.0] var positions = Cesium.Cartesian3.fromDegreesArrayHeights(coordinates);//coordinates格式為帶有高度的數(shù)組。例如:[-115.0,37.0,100000.0,-107.0,33.0,150000.0] //同理,通過弧度轉(zhuǎn)換,用法相同,具體有Cesium.Cartesian3.fromRadians,Cesium.Cartesian3.fromRadiansArray,Cesium.Cartesian3.fromRadiansArrayHeights等方法

注意:上述轉(zhuǎn)換函數(shù)中最后均有一個(gè)默認(rèn)參數(shù)ellipsoid(默認(rèn)值為Ellipsoid.WGS84)。

4. 通過弧度進(jìn)行轉(zhuǎn)換

具體弧度原理可以參考上邊的注意事項(xiàng)。

var position = Cesium.Cartographic.fromDegrees(longitude, latitude, height); var positions = Cesium.Ellipsoid.WGS84.cartographicToCartesian(position); var positions = Cesium.Ellipsoid.WGS84.cartographicArrayToCartesianArray([position1,position2,position3]);

5. 笛卡爾空間直角坐標(biāo)系轉(zhuǎn)換為WGS84

  • 直接轉(zhuǎn)換
var cartographic= Cesium.Cartographic.fromCartesian(cartesian3); // 轉(zhuǎn)換得到WGS84弧度坐標(biāo)系后再使用經(jīng)緯度和弧度的轉(zhuǎn)換,進(jìn)行轉(zhuǎn)換到目標(biāo)值
  • 間接轉(zhuǎn)換
var cartographic = Cesium.Ellipsoid.WGS84.cartesianToCartographic(cartesian3); var cartographics = Cesium.Ellipsoid.WGS84.cartesianArrayToCartographicArray([cartesian1,cartesian2,cartesian3]);

6. 平面坐標(biāo)系(Cartesian2)和笛卡爾空間直角坐標(biāo)系(Cartesian3)的轉(zhuǎn)換

  • 平面坐標(biāo)系轉(zhuǎn)笛卡爾空間直角坐標(biāo)系
    ? ? ? ?這里注意的是當(dāng)前的點(diǎn)(Cartesian2)必須在三維球上,否則返回的是undefined;通過ScreenSpaceEventHandler回調(diào)會(huì)取到的坐標(biāo)都是Cartesian2。
  • 屏幕坐標(biāo)轉(zhuǎn)場(chǎng)景坐標(biāo)-獲取傾斜攝影或模型點(diǎn)擊處的坐標(biāo)
    ? ? ? ?這里的場(chǎng)景坐標(biāo)是包含了地形、傾斜攝影表面、模型的坐標(biāo)。
    ? ? ? ?通過viewer.scene.pickPosition(movement.position)獲取,根據(jù)窗口坐標(biāo),從場(chǎng)景的深度緩沖區(qū)中拾取相應(yīng)的位置,返回笛卡爾坐標(biāo)。
var handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas); handler.setInputAction(function (movement) {var position = viewer.scene.pickPosition(movement.position);console.log(position); }, Cesium.ScreenSpaceEventType.LEFT_CLICK);// 注:若屏幕坐標(biāo)處沒有傾斜攝影表面、模型時(shí),獲取的笛卡爾坐標(biāo)不準(zhǔn), // 此時(shí)要開啟地形深度檢測(cè) // viewer.scene.globe.depthTestAgainstTerrain = true;默認(rèn)為false
  • 屏幕坐標(biāo)轉(zhuǎn)地表坐標(biāo)-獲取加載地形后對(duì)應(yīng)的經(jīng)緯度和高程
    ? ? ? ?這里是地球表面的世界坐標(biāo),包含地形,不包括模型、傾斜攝影表面。
    ? ? ? ?通過viewer.scene.globe.pick(ray,scene)獲取,其中fay=viewer.camera.getPickRay(movement.position)。
var handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas); handler.setInputAction(function (movement) {var ray = viewer.camera.getPickRay(movement.position);var position = viewer.scene.globe.pick(ray, viewer.scene);console.log(position); }, Cesium.ScreenSpaceEventType.LEFT_CLICK); // 注:通過測(cè)試,此處得到的坐標(biāo)通過轉(zhuǎn)換成wgs84后,height的為該點(diǎn)的地形高程值。
  • 笛卡爾空間直角坐標(biāo)系轉(zhuǎn)平面坐標(biāo)系
var cartesian2= Cesium.SceneTransforms.wgs84ToWindowCoordinates(viewer.scene,cartesian3)
  • 空間位置變換
    ? ? ? ?經(jīng)緯度轉(zhuǎn)換到笛卡爾坐標(biāo)系后就能運(yùn)用計(jì)算機(jī)圖形學(xué)中的仿射變換知識(shí)進(jìn)行空間位置變換如平移旋轉(zhuǎn)縮放。
    ? ? ? ?Cesium為我們提供了很有用的變換工具類:Cesium.Cartesian3(相當(dāng)于Point3D)Cesium.Matrix3(3×3矩陣,用于描述旋轉(zhuǎn)變換)Cesium.Matrix4(4×4矩陣,用于描述旋轉(zhuǎn)加平移變換),Cesium.Quaternion(四元數(shù),用于描述圍繞某個(gè)向量旋轉(zhuǎn)一定角度的變換)。

總結(jié)

以上是生活随笔為你收集整理的学习【Cesium】第四篇,Cesium的坐标与转换(学不会揍我)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。