亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Cesium怎么實現簡單的箭頭效果

發布時間:2021-12-30 14:38:53 來源:億速云 閱讀:540 作者:iii 欄目:大數據

本篇內容介紹了“Cesium怎么實現簡單的箭頭效果”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

在mapbox-gl上,可以借助turf.js實現簡單箭頭的畫法,Cesium調用本身的api,同樣能夠實現箭頭的畫法。  
實現的方式,也是先計算兩個點相對于北向的角度,再根據角度計算一定距離的點坐標,從而達到實現箭頭的效果。  
Cesium計算相對于北向的角度,是根據矩陣來進行計算的。  
具體的實現代碼函數:

/**

 * 計算a點和b點的角度(偏轉角)

 * @param lng_a  a點經度

 * @param lat_a  a點維度

 * @param lng_b  b點經度

 * @param lat_b  b點維度

 * @returns 角度

 */

function courseAngle(lng_a, lat_a, lng_b, lat_b) {

//以a點為原點建立局部坐標系(東方向為x軸,北方向為y軸,垂直于地面為z軸),得到一個局部坐標到世界坐標轉換的變換矩陣

var localToWorld_Matrix = 

Cesium.Transforms.eastNorthUpToFixedFrame(new Cesium.Cartesian3.fromDegrees(lng_a, lat_a));

//求世界坐標到局部坐標的變換矩陣

var worldToLocal_Matrix = 

Cesium.Matrix4.inverse(localToWorld_Matrix, new Cesium.Matrix4());   

//a點在局部坐標的位置,其實就是局部坐標原點

  var localPosition_A = 

Cesium.Matrix4.multiplyByPoint(worldToLocal_Matrix,

new Cesium.Cartesian3.fromDegrees(lng_a, lat_a),

new Cesium.Cartesian3());

 //B點在以A點為原點的局部的坐標位置

var localPosition_B = 

Cesium.Matrix4.multiplyByPoint(worldToLocal_Matrix,

new Cesium.Cartesian3.fromDegrees(lng_b, lat_b),

new Cesium.Cartesian3());

  //弧度

var angle =

Math.atan2((localPosition_B.y-localPosition_A.y), 

(localPosition_B.x-localPosition_A.x))

 //角度

 var theta = angle*(180/Math.PI);

 if (theta < 0) {

     theta = theta + 360;

  }

return theta;

}

不過,上邊計算的是對應于x軸的角度,也就是相對于東邊方向的角度,換算成相對偏北的角度,需要減去90度。  
已知點,根據角度和距離,計算另一個點,同樣是參照官方的矩陣計算方式。
//_ca_coord是Cesium  Cartesian3 坐標
//local_coord是相對于當前坐標的偏移米數
//返回值可以是  Carte  sian3 坐標,也可以是經緯度坐標

  function ComputeLngLat(_ca_coord, local_coord) {

     //同樣是建立局部坐標系

    const _localToWorld_Matrix = Cesium.Transforms.eastNorthUpToFixedFrame(_ca_coord);

//根據偏移的三個方向距離,計算新的坐標點

    const _new_ca = Cesium.Matrix4.multiplyByPoint(_localToWorld_Ma trix, Cesium.Cartesian3.fromElements(local_coord[1], local_coord[0], local_coord[2]), new Cesium.Cartesian3());

    //返回不同的坐標類型,自由控制

    return _new_ca;

    return Cesium.Cartographic.fromCartesian(_new_ca);

     }

計算出兩個點的北向偏移角,根據箭頭所要偏移的角度和米數,通過三角函數sin和cos,計算出x方向和y方向的偏移距離,調用函數,就能計算出新的點位置,將點連接成線,就能實現簡單箭頭的效果。    

“Cesium怎么實現簡單的箭頭效果”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

峨眉山市| 卢龙县| 黄平县| 沙河市| 武清区| 泗洪县| 玉环县| 札达县| 开封县| 张掖市| 松阳县| 商洛市| 辽阳市| 平远县| 班戈县| 西乌珠穆沁旗| 澄江县| 怀来县| 东明县| 潮安县| 轮台县| 科技| 嘉义县| 崇礼县| 双江| 桃园市| 彭阳县| 临西县| 东乡族自治县| 东宁县| 贵溪市| 黔西| 津市市| 泰宁县| 清原| 武穴市| 安徽省| 城步| 浦城县| 囊谦县| 东台市|