Cesium 滑鼠拾取橢球、地形、模型座標點(經度+緯度+高程)
學習過程中遇到的坑,搜尋了半天沒找到好的解決辦法,最後翻API找到了方法,共享出來大家討論借鑑。
首先,Cesium 中的座標可分為兩種情況:二維和三維,三維又有地形和模型之分;
1、二維座標,獲取橢球體表面的經緯度座標:
var handler = new Cesium.ScreenSpaceEventHandler(scene.canvas);
handler.setInputAction(function(evt) {
var cartesian=viewer.camera.pickEllipsoid(evt.position,viewer.scene.globe.ellipsoid);
var cartographic=Cesium.Cartographic.fromCartesian(cartesian);
var lng=Cesium.Math.toDegrees(cartographic.longitude);//經度值
var lat=Cesium.Math.toDegrees(cartographic.latitude);//緯度值
var mapPosition={x:lng,y:lat,z:cartographic.height};//cartographic.height的值始終為零。
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
2、三維座標,獲取地形表面的經緯度高程座標:
方法一
var handler = new Cesium.ScreenSpaceEventHandler(scene.canvas);
handler.setInputAction(function(evt) {
var ray=viewer.camera.getPickRay(evt.position);
var cartesian=viewer.scene.globe.pick(ray,viewer.scene);
var cartographic=Cesium.Cartographic.fromCartesian(cartesian);
var lng=Cesium.Math.toDegrees(cartographic.longitude);//經度值
var lat=Cesium.Math.toDegrees(cartographic.latitude);//緯度值
var mapPosition={x:lng,y:lat,z:cartographic.height};//cartographic.height的值為地形高度。
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
方法二
var handler = new Cesium.ScreenSpaceEventHandler(scene.canvas);
handler.setInputAction(function(evt) {
var ray=viewer.camera.getPickRay(evt.position);
var cartesian=viewer.scene.globe.pick(ray,viewer.scene);
var cartographic=Cesium.Cartographic.fromCartesian(cartesian);
var lng=Cesium.Math.toDegrees(cartographic.longitude);//經度值
var lat=Cesium.Math.toDegrees(cartographic.latitude);//緯度值
//height結果與cartographic.height相差無幾,注意:cartographic.height可以為0,也就是說,可以根據經緯度計算出高程。
var height=viewer.scene.globe.getHeight(cartographic);
var mapPosition={x:lng,y:lat,z:height.height};//height的值為地形高度。
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
3、三維座標,獲取模型表面的經緯度高程座標(此方法借鑑於官方示例):
var handler = new Cesium.ScreenSpaceEventHandler(scene.canvas);
handler.setInputAction(function(evt) {
var scene = viewer.scene;
if (scene.mode !== Cesium.SceneMode.MORPHING) {
var pickedObject = scene.pick(evt.position);
if (scene.pickPositionSupported && Cesium.defined(pickedObject) && pickedObject.node) {
var cartesian = viewer.scene.pickPosition(evt.position);
if (Cesium.defined(cartesian)) {
var cartographic = Cesium.Cartographic.fromCartesian(cartesian);
var lng = Cesium.Math.toDegrees(cartographic.longitude);
var lat = Cesium.Math.toDegrees(cartographic.latitude);
var height = cartographic.height;//模型高度
mapPosition={x:lng,y:lat,z:height}
}
}
}
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
相關文章
- iOS中地圖經緯度座標轉換iOS地圖
- 如何快速將地址解析為經緯度座標?
- ArcEngine下投影座標和經緯度座標的相互轉換
- 根據經緯度座標查詢最近的門店
- iOS根據兩點經緯度座標計算指南針方位角iOS
- 常用經緯度轉換為ntu經緯度
- 獲取資料庫中到指定經緯度距離的座標資料庫
- 根據時間經緯度高程計算天頂角
- 勾勒產業緯度與時代經度:座標杜拜,UBBF2021“聯接+新增長”產業
- 經緯度轉換
- java 根據GPS經緯度座標計算兩點的直線距離的演算法Java演算法
- 根據經緯度繪製座標點相對位置(分別用php和html5實現)PHPHTML
- Web墨卡託座標與WGS84經緯度互轉 java程式碼WebJava
- springboot + mongodb 通過經緯度座標匹配平面區域的方法YWKSSpring BootMongoDB
- 米轉換經緯度
- Python視覺化-縣市按經緯度座標在地圖示記數值Python視覺化地圖
- 如何使用Python經緯座標模組?Python
- 全國城市經緯度資料
- asp.net系統中根據經緯度座標,直接呼叫google地圖,顯示位置ASP.NETGo地圖
- Qt/C++路徑軌跡回放/回放每個點訊號/回放結束訊號/拿到移動的座標點經緯度QTC++
- 百度地圖框選標註座標點功能地圖
- 百度地圖拾取座標工具-toolfk程式設計師線上工具地圖程式設計師
- 簡單計算給定兩個給定經緯度座標的距離
- 智慧手環WIFI熱點和經緯度API獲取WiFiAPI
- 騰訊地圖拾取座標地圖
- java百度地圖介面呼叫獲取經緯度Java地圖
- 微信小程式-如何在map上根據經緯度新增標記點(附原始碼)微信小程式原始碼
- sql 計算兩個經緯度點之間的距離SQL
- java 根據兩個位置的經緯度,來計算兩地的距離 經緯度處理Java
- .NET程式獲取當前IP經緯度,並透過經緯度實現天氣查詢功能
- Cube 緯度分析
- Qt 求圓和橢圓上任意角度點的座標QT
- 中國所有省市區的ip經緯度介面
- java 根據經緯度計算圓周Java
- 經緯度互換和計算距離
- 百度地圖根據經緯度計算瓦片行列號地圖
- Python將經緯度資料轉換成浮點資料Python
- 百度座標轉換API使用API