1.基于cesium计算方位角

/*
 版权: http://www.cesiumlab.com 免费的cesium基础数据处理平台
*/

function caculHeading(p0, p1) {

//计算p0位置的enu位置矩阵的旋转部分
    var defrotmat = Cesium.Matrix4.getRotation(Cesium.Transforms.eastNorthUpToFixedFrame(p0), new Cesium.Matrix3());

//获取矩阵的三个坐标轴
    var xaxis = Cesium.Matrix3.getColumn(defrotmat, 0, new Cesium.Cartesian3());
    var yaxis = Cesium.Matrix3.getColumn(defrotmat, 1, new Cesium.Cartesian3());
    var zaxis = Cesium.Matrix3.getColumn(defrotmat, 2, new Cesium.Cartesian3());

//两个位置点的射线方向
    var dir = Cesium.Cartesian3.subtract(p1, p0,new Cesium.Cartesian3());

//计算在 enu 旋转矩阵上的 x y 平面上的投影向量
    dir = Cesium.Cartesian3.cross(dir, zaxis, dir);
    dir = Cesium.Cartesian3.cross(zaxis, dir, dir);

//归一化
    dir = Cesium.Cartesian3.normalize(dir, dir);

//计算和x轴夹角  0 ~  pi
    var heading = Cesium.Cartesian3.angleBetween(xaxis, dir);

//和y轴夹角 判定在y轴的正方向还是负方向
    var ay = Cesium.Cartesian3.angleBetween(yaxis, dir);

// 保证处于0~2PI
    if (ay > Math.PI * 0.5) {
        heading = 2 * Math.PI - heading;
    }

console.log("heading:" + Cesium.Math.toDegrees(heading).toFixed(5));
    return heading;
}

//测试

var p0 = Cesium.Cartesian3.fromDegrees(112.1, 30, 0);
var p1 = Cesium.Cartesian3.fromDegrees(112.1, 29, 0);

caculHeading(p0, p1);

2. 根据测量学计算公式计算

/// <summary>
        /// 在已知经纬度的点上,沿bearing方向角,延长L距离。获得点
        /// </summary>
        /// <param name="lng"></param>
        /// <param name="lat"></param>
        /// <param name="L"></param>
        /// <param name="bearing"></param>
        /// <returns></returns>
        public static PointLatLng GetSecondPointLatlng(double lng, double lat, double L, double bearing)
        {
            double num = L / Axis;
            double num2 = Math.Acos(Math.Cos(1.5707963267948966 - DegreesToRadians(lat)) * Math.Cos(num) + Math.Sin(1.5707963267948966 - DegreesToRadians(lat)) * Math.Sin(num) * Math.Cos(DegreesToRadians(bearing)));
            double rad = Math.Asin(Math.Sin(num) * Math.Sin(DegreesToRadians(bearing)) / Math.Sin(num2));
            double lng2 = lng + RadiansToDegrees(rad);
            double lat2 = 90.0 - RadiansToDegrees(num2);
            return new PointLatLng(lng2, lat2);
        }
        /// <summary>
        /// 计算方位角,P1P2
        /// </summary>
        /// <param name="p1"></param>
        /// <param name="p2"></param>
        /// <returns></returns>
        public static double GetBearing(PointLatLng p1, PointLatLng p2)
        {
            double num = DegreesToRadians(p1.Lat);
            double num2 = DegreesToRadians(p2.Lat);
            double num3 = DegreesToRadians(p2.Lng - p1.Lng);
            double y = Math.Sin(num3) * Math.Cos(num2);
            double x = Math.Cos(num) * Math.Sin(num2) - Math.Sin(num) * Math.Cos(num2) * Math.Cos(num3);
            return (RadiansToDegrees(Math.Atan2(y, x)) + 360.0) % 360.0;
        }

public static double RadiansToDegrees(double rad)
        {
            return 57.295779513082323 * rad;
        }

如何计算两个坐标点的方位角相关推荐

  1. 根据经纬度计算地球两个坐标之间的方位角

    近年来随着人工智能机器人.无人机.自动驾驶等领域技术的不断发展,卫星精准定位,自动导航成为了这些领域中的核心关键.随着人造卫星和互联网的发展,我们很容易就能通过卫星或基站信号获取个人设备在地球上所在的 ...

  2. 用三角函数计算两个坐标点距离

    问题:已知地球上两个坐标点A,B的坐标,坐标分别为A(α,α₁),B(β,β₁),已知地球半径为R,如何计算两个坐标点的距离? 解答: 设A的纬度为α,B的纬度为β,设AB两点的经度差为φ,三角形AO ...

  3. php过滤两个坐标,php判断两个坐标的方位角

    php判断两个坐标的方位角 时间 :2019-1-20  评论: [ 0 ] 条  浏览: [ 758 ] 次 protected function getAngle($lat1, $lng1, $l ...

  4. 如何计算地球球面上两个坐标点之间的弧度

    如何计算地球球面上两个坐标点之间的弧度 首先,请确认你已经阅读过博主的如下文章: [Google Map]怎么根据经维度计算两点之间的距离,怎么根据经纬度与距离计算目标地点的经纬度 http://bl ...

  5. 已知物体的两个坐标 计算移动方向 - python

    1.已知条件 在直角平面坐标中,我们已知两个坐标点的位置,即物体的上一时刻位置(x1,y1) 和 此时位置(x2,y2) , 想要知道 该物体的移动方向(直角坐标系的360°角),该如何计算? 2.解 ...

  6. 地理计算 | 计算两个坐标点射线的交点(前方交会)

    1 前言 前方交会--- 又称为测角交会,是指从相邻两个已知点向待定点观测两个水平角,用以计算待定点的坐标. 如图所示,点 A.B 的坐标已知. 通过观测角 A 和角 B 求出点 P 坐标的定位方法被 ...

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

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

  8. 如何利用计算机计算天数,计算机如何计算两个日期之间的天数

    计算机是如何计算两个日期之间的天数的,这个问题看起来好像很简单,但是仔细一想,好像还没那么简单,月与月之间天数不一样,平年和闰年也会影响天数. 举个例子: 2017年2月1日-2017年6月1日中间有 ...

  9. 如何计算两个文档的相似度(一)

    下面的内容转自我爱自然语言处理博客,感谢博主,学到很多东西. 原文链接:http://www.52nlp.cn/%E5%A6%82%E4%BD%95%E8%AE%A1%E7%AE%97%E4%B8%A ...

最新文章

  1. 每日一皮:程序员距离人生目标只有一个沟
  2. java xmpp_Java XMPP负载测试工具
  3. avs 中国音视频标准DRA 中音频标准及应用
  4. ado mysql 读写_C#使用Ado.Net读写数据库
  5. centos php71,CentOS 71编译安装PHP7
  6. 在后台运行程序/软件的Linux命令
  7. laravel按月/时间区间查询数据
  8. cf B. Internet Address
  9. Android 之HierarchyViewer - 4939
  10. 【翻译】Qt撤销/回撤框架概述
  11. mdk ac6 CLANG
  12. 微信公众号如何和Salesforce集成,然后后台给公众号的关注者推送模板消息?
  13. WPS文字怎么设置页面如分隔符、背景、页面边框等等
  14. 文科类文献综述怎么写?
  15. springmvc考研交流平台 java ssm mysql
  16. https温故而知新
  17. python获取gps数据_Python GPS模块:读取最新的GPS数据
  18. 云中漫步-旅行到宇宙边缘
  19. 计算机高级工考试题库2018,080720 自考软件工程:07163高级数据库技术历年真题及答案 2018年 2017年 2019年真题和答案...
  20. 小米二手手机回收价格表

热门文章

  1. Docker在Linux下载安装及部署
  2. 小程序如何实时音视频聊天
  3. 某互联网银行 区块链技术暑假实习生在线笔试 回忆
  4. 哒哒哒哒哒哒,哒哒哒哒哒哒哒哒
  5. Java程序员必备的几款开发工具,高效才是硬道理!
  6. 矩阵存储 oracle表,矩阵存储方案 - Oracle® Developer Studio 12.5:性能库用户指南
  7. GPS模块和北斗的区别
  8. 罗振宇 知识就是力量之 怎样重新获得别人的信任
  9. 微信小程序从后台拿数据并成功展示到前台——demo
  10. 蓝桥杯-K好数(详解易懂)java