cesium 用turf计算夹角角度

@TOC Cesium运用turf.js计算夹角角度

Cesium计算两条线的夹角角度

之前的一个需求,就是实时计算两条线之间的夹角角度,看了一下Turf库,只看到了计算两点之间的方位角,想了一下,似乎也能完成此需求。
在这里插入图片描述

下面我们来完成此需求

`.

function angle(e){//这里我是每整个点数组传进来let points = e.graphic.points; let start; //第一个点 let end_o; //往后推一个点	  let end_s; //当点多于两个的起始点let distance_o;//前两个点的距离let distance_s;//当前点到起点的距离let bear,bear_o,bear_s;//角度if (points.length>1){start = new Cesium.Cartesian3.fromDegrees(points[points.length-1].lng,points[points.length-1].lat);end_o = new Cesium.Cartesian3.fromDegrees(points[points.length-2].lng,points[points.length-2].lat);distance_o = Cesium.Cartesian3.distance(start,end_o).toFixed(2);distance_o > 1000 ? (distance_o / 1000).toFixed(2) + "公里" : distance_o = distance_o + "米";if (points.length > 2) {end_s = new Cesium.cartesian3.fromDegrees(points[0].lng,points[0].lat);distance_s = Cesium.Cartesian3.distance(start,end_s).toFixed(2);//到此计算每条线段的距离 不是角度 如不需要请忽略if (e.index===0) {bear_o = turf.rhumbBearing([points[1].lng,points[1].lat],[points[0].lng,points[0].lat]);bear_s = turf.rhumbBearing([points[1].lng,points[1].lat],[points[2].lng,points[2].lat]);//按照turf正常计算角度即可,但需要注意是以中间的点为基准} else if (e.index === points.length - 1) {bear_o = turf.rhumbBearing([points[points.length - 2].lng,points[points.length - 2].lat],[points[points.length - 3].lng,points[points.length - 3].lat]);bear_s = turf.rhumbBearing([points[points.length - 2].lng,points[points.length - 2].lat],[points[points.length - 1].lng,points[points.length - 1].lat]);} else {bear_o = turf.rhumbBearing([points[e.index].lng,points[e.index].lat],[points[e.index - 1].lng,points[e.index - 1].lat]);bear_s = turf.rhumbBearing([points[e.index].lng,points[e.index].lat],[points[e.index + 1].lng,points[e.index + 1].lat]);}//到此计算得到bear _o _s 两个角度if (bear_o < 0 && bear_s <0) {if (bear_o < bear_s) bear = (-bear_s) - (-bear_o);if (bear_o > bear_s) bear = (-bear_o) - (-bear_s);}else if (bear_o > 0 && bear_s < 0){bear = bear_o + (-bear_s);} else if (bear_s > 0 && bear_o < 0) {bear = bear_s + (-bear_o);} else if (bear_o > 0 && bear_s > 0) {if (bear_o > bear_s) bear = bear_o - bear_s;if (bear_s > bear_o) bear = bear_s - bear_o}if (bear > 180) bear = 360 -b; if (bear < 0) bear = -bear;bear = parseFloat(bear).toFixed(1) + "度"}}
}

我是感觉还有可优化的地方,如有意见或建议,请多多指教。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部