Cesium开发:简单箭头画法

在mapbox-gl上,可以借助turf.js实现简单箭头的画法,Cesium调用本身的api,同样能够实现箭头的画法。
实现的方式,也是先计算两个点相对于北向的角度,再根据角度计算一定距离的点坐标,从而达到实现箭头的效果。
Cesium计算相对于北向的角度,是根据矩阵来进行计算的,这里参考了网上了一篇博客。
具体的实现代码函数:
原文链接:

https://blog.csdn.net/zy123698745/article/details/102798042
/**
 * 计算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是相对于当前坐标的偏移米数
//返回值可以是Cartesian3 坐标,也可以是经纬度坐标
  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方向的偏移距离,调用函数,就能计算出新的点位置,将点连接成线,就能实现简单箭头的效果。
详细的步骤可以参照文章开头的mapbox-gl中箭头的画法。

参考文章:

https://blog.csdn.net/zy123698745/article/details/102798042
更多文章,请关注公众号查看!
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CESIUM EPSG::900913 是指Cesium中常用的投影坐标系,也被称为Web墨卡托投影(Web Mercator)。该投影使用了EPSG:3857的代码。它是一种等距投影,用于在Web地图中显示经纬度坐标。Web墨卡托投影将地球表面投影到一个平面上,使得在地图上的距离与实际距离近似相等,从而方便进行地理数据的可视化和分析。 要在Cesium中使用EPSG::900913投影,您可以在代码中使用相应的坐标系转换库(例如proj4)来将其他坐标系转换为EPSG::900913。您还可以查找提供的地理数据文件(如geojson或json文件)中的"crs"字段,查找与EPSG::900913或EPSG::3857相关的字段名称。 请注意,虽然EPSG::900913常用于Web地图应用程序中,但它实际上是一个非正式的投影代码,因此更推荐使用EPSG::3857来表示Web墨卡托投影。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Cesium出现Unknown crs name: urn:ogc:def:crs:EPSG:xxxx](https://blog.csdn.net/weixin_43972992/article/details/127066824)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [ol-cesium:OpenLayers-Cesium集成](https://download.csdn.net/download/weixin_42121086/14949890)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值