地图上的两点,计算出两点之间的角度
根据两个坐标点,计算出两点之间的角度
最常用的场景:地图上的标记点需要动态的改变角度
例子如下:
假如地图上有一条路线轨迹,你的标记点是一辆车的图标,你的车(标记点)在轨迹上运行的时候,如果不动态更改旋转角度的话,就会如下图所示,显然这用户体验是很差的。
所以标记点移动的时候,就要算出两点之间的一个角度,然后动态的赋值给地图中标记点的旋转角度参数。
真正的效果应该是这样的
废话不多说直接上代码
// 坐标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)
好了,看不懂的我建议多看几次,仔细慢慢理解一下,其实你会发现很简单,有什么问题或者有更好的方法,欢迎留言指出 ~ / ~
地图上的两点,计算出两点之间的角度相关推荐
- 用计算python两点之间的距离math_自学生信Python(第二天)|计算出两点之间的距离...
计算出两点之间的距离 日常旁白:本人是一枚生物学的学生,由于对生物信息学特别感兴趣,于是想自学生物信息学(新手莫怪).了解到生物信息学要有编程基础,尤其是要会一门编程语言,例如:R语言.Python. ...
- 使用Matlab在地图上根据经纬度画出轨迹的简单方法
工作中收集到一些经纬度信息,需要在地图上画出来以便识别运行路线.对比了不少方法,觉得直接用Matlab内置的函数调用在线地图,并且在在线地图上绘图,是最简单的.具体代码如下,其中XY是自己新建的矩阵, ...
- 如何用python画钝角三角形_使用math.atan2计算线段(Python)之间的角度
我正在研究空间分析问题,该工作流程的一部分是计算连接线段之间的角度. 每个线段仅由两个点组成,每个点都有一对XY坐标(笛卡尔坐标).这是GeoGebra的图像.我总是对在0到180范围内获得正角度感兴 ...
- 根据高德地图得出的坐标算出两点之间的距离 java
高德地图现在使用比较多了,但是高德地图计算两点之间的距离有些问题.下面提供一个很好的解决方案. 代码如下: public class Distribution {// 经度double longitu ...
- 高德地图获取坐标距离_【转】根据高德地图得出的坐标算出两点之间的距离
摘自 http://blog.csdn.net/u012251421/article/details/41242891 public static string GetDistance(double ...
- java获得百度地图驾车距离_如何根据百度地图计算出两地之间的驾驶距离(两种语言js和C#)...
以下是使用js代码实现百度地图计算两地距离,代码如下所示: 出发城市 name="Area"> -省份- -城市- -县- setup(document.getElement ...
- 如何计算已知坐标之间的角度?
如何计算已知坐标之间的角度? 在二维平面坐标系中,我们经常需要计算两个点之间的角度.本文将介绍如何使用Python程序,根据已知的坐标计算两点间的夹角. 首先,我们需要了解一些数学知识.如果我们已知两 ...
- php 地图两点距离计算,计算地图上两点间的距离PHP类
计算地图上两点间的距离,使用的是谷歌地图 class GeoHelper { /** * @param int $lat1 * @param int $lon1 * @param int $lat2 ...
- Unity中判断地图上两点之间相对于正北方向的角度 c#实现
由于最近项目需要一些关于地理位置展示方面的需要,需要牵涉到地理位置方面与角度之间的计算.文章中参考了大神的代码,但是其是java代码实现的,无法在unity中直接使用.有兴趣的可以直接阅读原文http ...
最新文章
- Python打包程序
- Hp linux tar 解压,tar命令的用法(百度)(HP_UX)
- Facebook开源Torchnet,加速AI研究
- ClickHouse到底是什么?凭啥这么牛逼!
- 腾讯AI Lab发布「电竞虚拟人」,视频版本一次看!
- SPOJ 962 Intergalactic Map (从A到B再到C的路线)
- Linux 环境变量启动过程/配置文件的读取过程
- Java calendar加减时间
- 国盾量子等参与中国量子通信行业首批标准编制 量子通信商用再加速
- MATLAB学习笔记(七)——MATLAB解方程与函数极值
- 64 位系统 vs2013 配置 OpenCV-3.1.0
- 什么是哑终端,终端模拟器
- pillow软件 Android,Pillow app
- Aras Innovator: Catagoy, Itemtype, Item, Relationship的视图
- (转)it界的大师手笔
- 【matlab 官方刷题网站cody】题目解答积累
- 考研跨考计算机推荐学校,跨考计算机有哪些院校推荐
- Vue的Excel文件下载
- Python-Numpy库中的invert()函数的用法
- 如何在windows 7系统下使用XP系统开发工具----超级终端