根据两个坐标点,计算出两点之间的角度

最常用的场景:地图上的标记点需要动态的改变角度

例子如下:

假如地图上有一条路线轨迹,你的标记点是一辆车的图标,你的车(标记点)在轨迹上运行的时候,如果不动态更改旋转角度的话,就会如下图所示,显然这用户体验是很差的。

所以标记点移动的时候,就要算出两点之间的一个角度,然后动态的赋值给地图中标记点的旋转角度参数。

真正的效果应该是这样的

废话不多说直接上代码

// 坐标1let position1 = {lng: 118.109673,lat: 24.580435,}// 坐标2let position2 = {lng: 118.10961,lat: 24.580648,}let valLng = position1.lng - position2.lng;let valLat = position1.lat - position2.lat;// 返回一个绝对值let absoluteLng = Math.abs(valLng);let absoluteLat = Math.abs(valLat);// 取得三角形的斜边let hypotenuse = Math.hypot(absoluteLng, absoluteLat);// 计算弧度let radina = Math.acos(absoluteLng / hypotenuse);// 计算角度let angle = Math.floor(radina * 180 / Math.PI);console.log("两坐标点计算出的角度为:", angle)

两点之间的角度算出来了,其实还存在一个问题,就是y轴对称的点,他们计算出的角度是一样的,仔细看下面图中标识的点

坐标点1与坐标点2-A的角度 = 坐标1与坐标点2-B的角度

小提示:

坐标点2 越接近X轴,计算出的角度就越小;

坐标点2 越接近Y轴,计算出的角度就越大;

解决问题:那么就需要用到坐标系中的象限了,如下图

注意看下面的两个例子,看是如何计算的

/*** 例子1* 旋转角度区间: 0~360度* 标记点的方向: 由东向西 */// 计算出标记点真正旋转的角度if (valLng > 0) {if (valLat > 0) {// 第三象限angle = 360 - angle;} else {// 第二象限angle = angle;}} else {if (valLat > 0) {//第四象限angle = 180 + angle;} else {// 第一象限angle = 180 - angle;}}console.log("坐标点真正旋转的角度:", angle)/*** 例子2* 旋转角度区间: 0~360度* 标记点的方向: 由西向东 */// 计算出标记点真正旋转的角度if (valLng > 0) {if (valLat > 0) {// 第三象限angle = 180 - angle;} else {// 第二象限angle = 180 + angle;}} else {if (valLat > 0) {//第四象限angle = angle;} else {// 第一象限angle = 360 - angle;}}console.log("坐标点真正旋转的角度:", angle)

注意:坐标点方向不同、角度区间不同、旋转的角度(上述计算是默认顺时针),象限中计算也不同,具体根据自己的需求来。

下面是整个计算的完整代码示例:

// 坐标1let position1 = {lng: 118.112193,lat: 24.580612,}// 坐标2let position2 = {lng: 118.112494,lat: 24.580883}let valLng = position1.lng - position2.lng;let valLat = position1.lat - position2.lat;// 返回一个绝对值let absoluteLng = Math.abs(valLng);let absoluteLat = Math.abs(valLat);// 取得三角形的斜边let hypotenuse = Math.hypot(absoluteLng, absoluteLat);// 计算弧度let radina = Math.acos(absoluteLng / hypotenuse);// 计算角度let angle = Math.floor(radina * 180 / Math.PI);console.log("两坐标点计算出的角度为:", angle)// 计算出标记点真正旋转的角度if (valLng > 0) {if (valLat > 0) {// 第三象限angle = 360 - angle;} else {// 第二象限angle = angle;}} else {if (valLat > 0) {//第四象限angle = 180 + angle;} else {// 第一象限angle = 180 - angle;}}console.log("坐标点真正旋转的角度:", angle)

好了,看不懂的我建议多看几次,仔细慢慢理解一下,其实你会发现很简单,有什么问题或者有更好的方法,欢迎留言指出 ~ / ~

地图上的两点,计算出两点之间的角度相关推荐

  1. 用计算python两点之间的距离math_自学生信Python(第二天)|计算出两点之间的距离...

    计算出两点之间的距离 日常旁白:本人是一枚生物学的学生,由于对生物信息学特别感兴趣,于是想自学生物信息学(新手莫怪).了解到生物信息学要有编程基础,尤其是要会一门编程语言,例如:R语言.Python. ...

  2. 使用Matlab在地图上根据经纬度画出轨迹的简单方法

    工作中收集到一些经纬度信息,需要在地图上画出来以便识别运行路线.对比了不少方法,觉得直接用Matlab内置的函数调用在线地图,并且在在线地图上绘图,是最简单的.具体代码如下,其中XY是自己新建的矩阵, ...

  3. 如何用python画钝角三角形_使用math.atan2计算线段(Python)之间的角度

    我正在研究空间分析问题,该工作流程的一部分是计算连接线段之间的角度. 每个线段仅由两个点组成,每个点都有一对XY坐标(笛卡尔坐标).这是GeoGebra的图像.我总是对在0到180范围内获得正角度感兴 ...

  4. 根据高德地图得出的坐标算出两点之间的距离 java

    高德地图现在使用比较多了,但是高德地图计算两点之间的距离有些问题.下面提供一个很好的解决方案. 代码如下: public class Distribution {// 经度double longitu ...

  5. 高德地图获取坐标距离_【转】根据高德地图得出的坐标算出两点之间的距离

    摘自 http://blog.csdn.net/u012251421/article/details/41242891 public static string GetDistance(double ...

  6. java获得百度地图驾车距离_如何根据百度地图计算出两地之间的驾驶距离(两种语言js和C#)...

    以下是使用js代码实现百度地图计算两地距离,代码如下所示: 出发城市 name="Area"> -省份- -城市- -县- setup(document.getElement ...

  7. 如何计算已知坐标之间的角度?

    如何计算已知坐标之间的角度? 在二维平面坐标系中,我们经常需要计算两个点之间的角度.本文将介绍如何使用Python程序,根据已知的坐标计算两点间的夹角. 首先,我们需要了解一些数学知识.如果我们已知两 ...

  8. php 地图两点距离计算,计算地图上两点间的距离PHP类

    计算地图上两点间的距离,使用的是谷歌地图 class GeoHelper { /** * @param int $lat1 * @param int $lon1 * @param int $lat2 ...

  9. Unity中判断地图上两点之间相对于正北方向的角度 c#实现

    由于最近项目需要一些关于地理位置展示方面的需要,需要牵涉到地理位置方面与角度之间的计算.文章中参考了大神的代码,但是其是java代码实现的,无法在unity中直接使用.有兴趣的可以直接阅读原文http ...

最新文章

  1. Python打包程序
  2. Hp linux tar 解压,tar命令的用法(百度)(HP_UX)
  3. Facebook开源Torchnet,加速AI研究
  4. ClickHouse到底是什么?凭啥这么牛逼!
  5. 腾讯AI Lab发布「电竞虚拟人」,视频版本一次看!
  6. SPOJ 962 Intergalactic Map (从A到B再到C的路线)
  7. Linux 环境变量启动过程/配置文件的读取过程
  8. Java calendar加减时间
  9. 国盾量子等参与中国量子通信行业首批标准编制 量子通信商用再加速
  10. MATLAB学习笔记(七)——MATLAB解方程与函数极值
  11. 64 位系统 vs2013 配置 OpenCV-3.1.0
  12. 什么是哑终端,终端模拟器
  13. pillow软件 Android,Pillow app
  14. Aras Innovator: Catagoy, Itemtype, Item, Relationship的视图
  15. (转)it界的大师手笔
  16. 【matlab 官方刷题网站cody】题目解答积累
  17. 考研跨考计算机推荐学校,跨考计算机有哪些院校推荐
  18. Vue的Excel文件下载
  19. Python-Numpy库中的invert()函数的用法
  20. 如何在windows 7系统下使用XP系统开发工具----超级终端

热门文章

  1. Hugo作者、Go核心团队成员Steve Francia谈诞生13年的Go语言:生态系统、演化与未来[译]...
  2. unity表情动画与动态捕捉表情
  3. 李宏毅2020机器学习课程笔记(一)
  4. 竞品分析—抖音PK快手
  5. Vijos1889 天真的因数分解
  6. Maya---操作工具
  7. 在所有样式为“标题 1”的段落前插入分页型分节符
  8. Unity3D教程:手游开发常用排序算法 -下
  9. Linux常用命令——jwhois命令
  10. 用html5 Canvas制作一个简单的游戏 英雄抓小怪物(上)