五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(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ó)家法律
南江县| 武鸣县| 博兴县| 修文县| 嫩江县| 长乐市| 沙河市| 遵义市| 夏津县| 嘉善县| 孟连| 景洪市| 阳江市| 安远县| 盐山县| 长丰县| 木里| 临武县| 安国市| 凤阳县| 达尔| 尤溪县| 芮城县| 呼伦贝尔市| 呼和浩特市| 裕民县| 邢台县| 淳化县| 连城县| 忻城县| 教育| 长白| 农安县| 邢台市| 新竹市| 洪泽县| 湘潭市| 巴塘县| 肃南| 永昌县| 合水县|