d3.js 获取当前像素坐标_Cesium开发入门篇 | 06坐标系及坐标变换
Cesium中常用的坐標
1.屏幕坐標(像素)
即二維笛卡爾平面坐標,我們通過鼠標點擊直接獲取的坐標就是屏幕坐標了,單位是像素值,也可以通過new Cesium.Cartesian2(x, y)創建。
2.笛卡爾空間直角坐標
笛卡爾空間直角坐標又稱為世界坐標,Cesium中用Cartesian3變量表示,可通過new Cesium.Cartesian3(x, y, z)創建,主要是用來做空間位置的變化如平移、旋轉和縮放等等,它的坐標原點在橢球的中心,如下圖所示:
3.地理坐標(弧度)
Cesium中的地理坐標單位默認是弧度制,用Cartographic變量表示,可通過new Cesium.Cartographic(longitude, latitude, height)創建,其中這里的參數是用弧度表示的經緯度,即經度和緯度。弧度即角度對應弧長是半徑的倍數。角度轉弧度 π/180×角度弧度變角度 180/π×弧度
4.經緯度坐標
即測繪中的地理經緯度坐標,默認是WGS84坐標系,坐標原點在橢球的質心。
經度:參考橢球面上某點的大地子午面與本初子午面間的兩面角,東正西負。
緯度 :參考橢球面上某點的法線與赤道平面的夾角,北正南負。
Cesuim中沒有具體的經緯度對象,要得到經緯度首先需要計算為弧度,再進行轉換。Cesium提供了如下對應的轉換方法:
Cesium中常用的坐標變換
1.經緯度坐標轉世界坐標
Cesium提供了兩種方式將經緯度坐標轉成世界坐標。
// 方法1:直接轉換 // var cartesian3 = Cesium.Cartesian3.fromDegrees(lng, lat, height); // 方法2:借助ellipsoid對象,先轉換成弧度再轉換 var cartographic = Cesium.Cartographic.fromDegrees(lng, lat, height); //單位:度,度,米 var cartesian3 = ellipsoid.cartographicToCartesian(cartographic);2.世界坐標轉經緯度
// 3.笛卡爾空間直角坐標系轉為地理坐標(弧度制) // var cartographic = Cesium.Cartographic.fromCartesian(cartesian3); // 方法1 // var cartographic = ellipsoid.cartesianToCartographic(cartesian3); // 方法2 // 4.地理坐標(弧度制)轉為經緯度坐標 var lat = Cesium.Math.toDegrees(cartographic.latitude); var lng = Cesium.Math.toDegrees(cartographic.longitude); var height = cartographic.height;3.弧度和經緯度互轉
經緯度轉弧度:
Cesium.Math.toRadians(degrees)弧度轉經緯度:
Cesium.Math.toDegrees(radians)4.屏幕坐標和世界坐標互轉
屏幕轉世界坐標:
// 2.二維屏幕坐標轉為三維笛卡爾空間直角坐標(世界坐標) var cartesian3 = scene.globe.pick( viewer.camera.getPickRay(windowPostion), scene );注意這里屏幕坐標一定要在球上,否則生成出的cartesian對象是undefined。
世界坐標轉屏幕坐標:
// 三維笛卡爾空間直角坐標(世界坐標)轉為二維屏幕坐標 // 結果是Cartesian2對象,取出X,Y即為屏幕坐標。 windowPostion = Cesium.SceneTransforms.wgs84ToWindowCoordinates(scene, cartesian3);坐標變換工具
只有轉換到笛卡爾坐標系后才能運用計算機圖形學中的仿射變換知識進行空間位置變換如平移旋轉縮放。Cesium為我們提供了如下幾種很有用的變換工具類:
- Cesium.Cartesian3(相當于Point3D)
- Cesium.Matrix3(3x3矩陣,用于描述旋轉變換)
- Cesium.Matrix4(4x4矩陣,用于描述旋轉加平移變換)
- Cesium.Quaternion(四元數,用于描述圍繞某個向量旋轉一定角度的變換)
- Cesium.Transforms(包含將位置轉換為各種參考系的功能)
總結
以上是生活随笔為你收集整理的d3.js 获取当前像素坐标_Cesium开发入门篇 | 06坐标系及坐标变换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android之自定义广播
- 下一篇: Spark分布式集群的搭建和运行