d3.js 获取当前像素坐标_Cesium开发入门篇 | 06坐标系及坐标变换
Cesium中常用的坐標(biāo)
1.屏幕坐標(biāo)(像素)
即二維笛卡爾平面坐標(biāo),我們通過(guò)鼠標(biāo)點(diǎn)擊直接獲取的坐標(biāo)就是屏幕坐標(biāo)了,單位是像素值,也可以通過(guò)new Cesium.Cartesian2(x, y)創(chuàng)建。
2.笛卡爾空間直角坐標(biāo)
笛卡爾空間直角坐標(biāo)又稱(chēng)為世界坐標(biāo),Cesium中用Cartesian3變量表示,可通過(guò)new Cesium.Cartesian3(x, y, z)創(chuàng)建,主要是用來(lái)做空間位置的變化如平移、旋轉(zhuǎn)和縮放等等,它的坐標(biāo)原點(diǎn)在橢球的中心,如下圖所示:
3.地理坐標(biāo)(弧度)
Cesium中的地理坐標(biāo)單位默認(rèn)是弧度制,用Cartographic變量表示,可通過(guò)new Cesium.Cartographic(longitude, latitude, height)創(chuàng)建,其中這里的參數(shù)是用弧度表示的經(jīng)緯度,即經(jīng)度和緯度。弧度即角度對(duì)應(yīng)弧長(zhǎng)是半徑的倍數(shù)。角度轉(zhuǎn)弧度 π/180×角度弧度變角度 180/π×弧度
4.經(jīng)緯度坐標(biāo)
即測(cè)繪中的地理經(jīng)緯度坐標(biāo),默認(rèn)是WGS84坐標(biāo)系,坐標(biāo)原點(diǎn)在橢球的質(zhì)心。
經(jīng)度:參考橢球面上某點(diǎn)的大地子午面與本初子午面間的兩面角,東正西負(fù)。
緯度 :參考橢球面上某點(diǎn)的法線與赤道平面的夾角,北正南負(fù)。
Cesuim中沒(méi)有具體的經(jīng)緯度對(duì)象,要得到經(jīng)緯度首先需要計(jì)算為弧度,再進(jìn)行轉(zhuǎn)換。Cesium提供了如下對(duì)應(yīng)的轉(zhuǎn)換方法:
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對(duì)象,先轉(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對(duì)象是undefined。
世界坐標(biāo)轉(zhuǎn)屏幕坐標(biāo):
// 三維笛卡爾空間直角坐標(biāo)(世界坐標(biāo))轉(zhuǎn)為二維屏幕坐標(biāo) // 結(jié)果是Cartesian2對(duì)象,取出X,Y即為屏幕坐標(biāo)。 windowPostion = Cesium.SceneTransforms.wgs84ToWindowCoordinates(scene, cartesian3);坐標(biāo)變換工具
只有轉(zhuǎn)換到笛卡爾坐標(biāo)系后才能運(yùn)用計(jì)算機(jī)圖形學(xué)中的仿射變換知識(shí)進(jìn)行空間位置變換如平移旋轉(zhuǎn)縮放。Cesium為我們提供了如下幾種很有用的變換工具類(lèi):
- Cesium.Cartesian3(相當(dāng)于Point3D)
- Cesium.Matrix3(3x3矩陣,用于描述旋轉(zhuǎn)變換)
- Cesium.Matrix4(4x4矩陣,用于描述旋轉(zhuǎn)加平移變換)
- Cesium.Quaternion(四元數(shù),用于描述圍繞某個(gè)向量旋轉(zhuǎn)一定角度的變換)
- Cesium.Transforms(包含將位置轉(zhuǎn)換為各種參考系的功能)
總結(jié)
以上是生活随笔為你收集整理的d3.js 获取当前像素坐标_Cesium开发入门篇 | 06坐标系及坐标变换的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: android之自定义广播
- 下一篇: Spark分布式集群的搭建和运行