/**

* 获取两个经纬度坐标正北方向夹角

* @param {Array} o_latlngs 原点经纬度坐标 [经度, 纬度]

* @param {Array} latlngs 经纬度坐标

* @return {Number} 返回角度

*/

function getTwoPointAngle(o_latlngs, latlngs) {

let A = new MyLatLng(o_latlngs[0], o_latlngs[1]);

let B = new MyLatLng(latlngs[0], latlngs[1]);

// console.log(getAngle(B, A));

return getAngle(B, A);

}

/**

* 求B点经纬度

* @param A 已知点的经纬度,

* @param distance   AB两地的距离  单位km

* @param angle  AB连线与正北方向的夹角(0~360)

* @return  B点的经纬度

*/

function getMyLatLng(A, distance, angle) {

let dx = distance * 1000 * Math.sin(Math.toRadians(angle));

let dy = distance * 1000 * Math.cos(Math.toRadians(angle));

let bjd = ((dx / A.Ed + A.m_RadLo) * 180.0) / Math.PI;

let bwd = ((dy / A.Ec + A.m_RadLa) * 180.0) / Math.PI;

return new MyLatLng(bjd, bwd);

}

/**

* 获取AB连线与正北方向的角度

* @param A  A点的经纬度

* @param B  B点的经纬度

* @return  AB连线与正北方向的角度(0~360)

*/

function getAngle(A, B) {

let dx = (B.m_RadLo - A.m_RadLo) * A.Ed;

let dy = (B.m_RadLa - A.m_RadLa) * A.Ec;

let angle = 0.0;

angle = (Math.atan(Math.abs(dx / dy)) * 180.0) / Math.PI;

let dLo = B.m_Longitude - A.m_Longitude;

let dLa = B.m_Latitude - A.m_Latitude;

if (dLo > 0 && dLa <= 0) {

angle = 90.0 - angle + 90;

} else if (dLo <= 0 && dLa < 0) {

angle = angle + 180.0;

} else if (dLo < 0 && dLa >= 0) {

angle = 90.0 - angle + 270;

}

return angle;

}

class MyLatLng {

constructor(lng, lat) {

const Rc = 6378137; // 赤道半径

const Rj = 6356725; // 极半径

// 经度转为度分秒

this.m_LoDeg = lng;

this.m_LoMin = (lng - this.m_LoDeg) * 60;

this.m_LoSec = (lng - this.m_LoDeg - this.m_LoMin / 60.0) * 3600;

// 纬度转为度分秒

this.m_LaDeg = lat;

this.m_LaMin = (lat - this.m_LaDeg) * 60;

this.m_LaSec = (lat - this.m_LaDeg - this.m_LaMin / 60.0) * 3600;

this.m_Longitude = lng;

this.m_Latitude = lat;

this.m_RadLo = (lng * Math.PI) / 180.0; // 经度弧度

this.m_RadLa = (lat * Math.PI) / 180.0; // 纬度弧度

this.Ec = Rj + ((Rc - Rj) * (90.0 - this.m_Latitude)) / 90.0;

this.Ed = this.Ec * Math.cos(this.m_RadLa);

}

}

function getrst(sPoint, ePoint) {

let rst = getTwoPointAngle(ePoint, sPoint);

return rst;

}

JS计算两个经纬度坐标与正北方向夹角相关推荐

  1. 两个经纬度偏角_计算两个经纬度坐标与正北方向夹角

    /** * 获取两个经纬度坐标正北方向夹角 * @param {Array} o_latlngs 原点经纬度坐标 [经度, 纬度] * @param {Array} latlngs 经纬度坐标 * @ ...

  2. Hive计算两个经纬度坐标的直线距离

    -- Hive计算两个经纬度坐标直线距离(单位:公里) -- 公式 -- ASIN( -- SQRT( -- POWER(SIN((lat1-lat2)*ACOS(-1)/360),2) + -- C ...

  3. 计算两个经纬度坐标点之间的距离

    /*** 计算两个经纬度坐标点之间的距离* @param {Point} pointA 起点坐标点* @param {Point} pointB 终点坐标点* @return {Number} 计算后 ...

  4. 计算两个经纬度坐标点之间的角度

    /*** 计算两个坐标点的角度* @param {Object} firstPoint 第一个经纬度坐标点* @param {Object} nextPoint 下一个经纬度坐标点* @returns ...

  5. js计算两个经纬度点之间距离

    问题 已知两个经纬度点,求两点之间距离 代码 // 计算两点之间直线距离 const algorithm = (point1, point2)=> {let [x1, y1] = point1; ...

  6. js计算两个经纬度之间的直线距离

    function getRad(d){ var PI = Math.PI; return d*PI/180.0; }/*** 获取两个经纬度之间的距离* @param lat1 第一点的纬度* @pa ...

  7. js计算两个经纬度之间的距离

    function getRad(d){ var PI = Math.PI; return d*PI/180.0; }/*** 获取两个经纬度之间的距离* @param lat1 第一点的纬度* @pa ...

  8. JS 计算两个点(经纬度)的距离;判断某一点是否在某一区域范围内

    JS 计算两个点(经纬度)的距离 经度相同,纬度不同 纬度每隔0.00001度,距离相差约1.1米. 纬度每隔0.0001度,距离相差约11米. 纬度每隔0.001度,距离相差约111米. 纬度每隔0 ...

  9. Java:计算地球上两个经纬度坐标之间的距离-geodesy和geotools实现

    目录 方式一:自定义公式计算 方式二:geodesy计算距离 方式三:geotools计算距离 两个点的经纬度 latitude纬度 longitude经度 地点 22.678611 113.8056 ...

最新文章

  1. jenkins+findbugs+checkstyle+PMD静态代码检查(二)
  2. [密码学] 强力攻击
  3. leetcode第72题:编辑距离
  4. 一入爬虫深似海,反爬技术你知多少?
  5. ActiveRecord多表查询
  6. (iOS开发总结)MVC模式
  7. commit是直接提交到远程吗 svn_xcode 把项目代码提交到远程SVN服务器
  8. 条件编译指令:#if,#endif
  9. vc udp 广播接收和发送_udp聊天?使用udp+python实现多人聊天室
  10. iframe 自适应内容高度
  11. build.xml:391: javac doesn‘t support the “nativeheaderdir“ attribute
  12. Verilog(2):与或非运算
  13. mysql neq_ecshop中smarty比较操作符(eq,ne,neq)含义
  14. 联想一体机计算机桌面不显示,联想一体机关闭屏幕_联想一体机怎么关屏幕
  15. ofo 共享单车的问题
  16. STM32开发实例 基于STM32单片机的生鲜仓库系统
  17. Android AppOpsService服务实践贴
  18. php 电台pls 怎么播放,怎样给Linux音乐播放器添加电台列表
  19. 小白备考计算机一级,小白如何备考全国计算机二级考试?
  20. android今日资讯代码,今日资讯app下载_今日资讯新闻弹窗最新消息软件下载安装 安卓版 V1.4 - 罐头安卓网...

热门文章

  1. Item 4: Know how to view deduced types.
  2. 2023年律师事务所研究报告
  3. 金九银十准备季:Java IO流面试题(含答案)
  4. linux bg和fg命令
  5. Servlet API 详解(HttpServlet、HttpServletRequest、HttpServletResponse)
  6. Battlehub 2021使用 报错error CS0619: ‘XRDevice.isPresent‘ is obsolete
  7. Web性能的几个常见瓶颈
  8. 月光宝盒(vivo流量录制回放平台)正式对外开源
  9. 怎么给图片加滤镜?你可以试试这样做
  10. 《三国演义》与“项目管理”——八卦阵和诸葛弩引出的思考