最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

Cesium開(kāi)發(fā):簡(jiǎn)單箭頭畫(huà)法

2022-06-13 09:26 作者:地理信息技術(shù)雜談  | 我要投稿

在mapbox-gl上,可以借助turf.js實(shí)現(xiàn)簡(jiǎn)單箭頭的畫(huà)法,Cesium調(diào)用本身的api,同樣能夠?qū)崿F(xiàn)箭頭的畫(huà)法。

實(shí)現(xiàn)的方式,也是先計(jì)算兩個(gè)點(diǎn)相對(duì)于北向的角度,再根據(jù)角度計(jì)算一定距離的點(diǎn)坐標(biāo),從而達(dá)到實(shí)現(xiàn)箭頭的效果。

Cesium計(jì)算相對(duì)于北向的角度,是根據(jù)矩陣來(lái)進(jìn)行計(jì)算的,這里參考了網(wǎng)上了一篇博客。

具體的實(shí)現(xiàn)代碼函數(shù):

原文鏈接:

https://blog.csdn.net/zy123698745/article/details/102798042

/**

?* 計(jì)算a點(diǎn)和b點(diǎn)的角度(偏轉(zhuǎn)角)

?* @param lng_a? a點(diǎn)經(jīng)度

?* @param lat_a? a點(diǎn)維度

?* @param lng_b? b點(diǎn)經(jīng)度

?* @param lat_b? b點(diǎn)維度

?* @returns 角度

?*/

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

//以a點(diǎn)為原點(diǎn)建立局部坐標(biāo)系(東方向?yàn)閤軸,北方向?yàn)閥軸,垂直于地面為z軸),得到一個(gè)局部坐標(biāo)到世界坐標(biāo)轉(zhuǎn)換的變換矩陣

var localToWorld_Matrix =?

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

//求世界坐標(biāo)到局部坐標(biāo)的變換矩陣

var worldToLocal_Matrix =?

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

//a點(diǎn)在局部坐標(biāo)的位置,其實(shí)就是局部坐標(biāo)原點(diǎn)

? var localPosition_A =?

Cesium.Matrix4.multiplyByPoint(worldToLocal_Matrix,

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

new Cesium.Cartesian3());

?//B點(diǎn)在以A點(diǎn)為原點(diǎn)的局部的坐標(biāo)位置

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;

}

不過(guò),上邊計(jì)算的是對(duì)應(yīng)于x軸的角度,也就是相對(duì)于東邊方向的角度,換算成相對(duì)偏北的角度,需要減去90度。
已知點(diǎn),根據(jù)角度和距離,計(jì)算另一個(gè)點(diǎn),同樣是參照官方的矩陣計(jì)算方式。//_ca_coord是Cesium? Cartesian3 坐標(biāo)//local_coord是相對(duì)于當(dāng)前坐標(biāo)的偏移米數(shù)//返回值可以是Cartesian3?坐標(biāo),也可以是經(jīng)緯度坐標(biāo)

? function?ComputeLngLat(_ca_coord,?local_coord)?{

? ? ?//同樣是建立局部坐標(biāo)系

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

//根據(jù)偏移的三個(gè)方向距離,計(jì)算新的坐標(biāo)點(diǎn)

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

? ??//返回不同的坐標(biāo)類型,自由控制

????return?_new_ca;

????return?Cesium.Cartographic.fromCartesian(_new_ca);

? ? ?}

計(jì)算出兩個(gè)點(diǎn)的北向偏移角,根據(jù)箭頭所要偏移的角度和米數(shù),通過(guò)三角函數(shù)sin和cos,計(jì)算出x方向和y方向的偏移距離,調(diào)用函數(shù),就能計(jì)算出新的點(diǎn)位置,將點(diǎn)連接成線,就能實(shí)現(xiàn)簡(jiǎn)單箭頭的效果。

Cesium開(kāi)發(fā):簡(jiǎn)單箭頭畫(huà)法的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
温宿县| 霍林郭勒市| 即墨市| 嘉禾县| 东明县| 龙南县| 望城县| 汪清县| 绍兴市| 白水县| 冷水江市| 石景山区| 台州市| 潮安县| 茌平县| 肥西县| 阳新县| 丰台区| 沧源| 苏尼特右旗| 靖州| 葵青区| 蚌埠市| 深圳市| 博野县| 达拉特旗| 开封市| 澄城县| 定南县| 张掖市| 徐州市| 鸡西市| 中超| 阿荣旗| 汤阴县| 武威市| 阿尔山市| 南漳县| 本溪市| 南京市| 佛坪县|