如何计算两个坐标点的方位角
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;
}
如何计算两个坐标点的方位角相关推荐
- 根据经纬度计算地球两个坐标之间的方位角
近年来随着人工智能机器人.无人机.自动驾驶等领域技术的不断发展,卫星精准定位,自动导航成为了这些领域中的核心关键.随着人造卫星和互联网的发展,我们很容易就能通过卫星或基站信号获取个人设备在地球上所在的 ...
- 用三角函数计算两个坐标点距离
问题:已知地球上两个坐标点A,B的坐标,坐标分别为A(α,α₁),B(β,β₁),已知地球半径为R,如何计算两个坐标点的距离? 解答: 设A的纬度为α,B的纬度为β,设AB两点的经度差为φ,三角形AO ...
- php过滤两个坐标,php判断两个坐标的方位角
php判断两个坐标的方位角 时间 :2019-1-20 评论: [ 0 ] 条 浏览: [ 758 ] 次 protected function getAngle($lat1, $lng1, $l ...
- 如何计算地球球面上两个坐标点之间的弧度
如何计算地球球面上两个坐标点之间的弧度 首先,请确认你已经阅读过博主的如下文章: [Google Map]怎么根据经维度计算两点之间的距离,怎么根据经纬度与距离计算目标地点的经纬度 http://bl ...
- 已知物体的两个坐标 计算移动方向 - python
1.已知条件 在直角平面坐标中,我们已知两个坐标点的位置,即物体的上一时刻位置(x1,y1) 和 此时位置(x2,y2) , 想要知道 该物体的移动方向(直角坐标系的360°角),该如何计算? 2.解 ...
- 地理计算 | 计算两个坐标点射线的交点(前方交会)
1 前言 前方交会--- 又称为测角交会,是指从相邻两个已知点向待定点观测两个水平角,用以计算待定点的坐标. 如图所示,点 A.B 的坐标已知. 通过观测角 A 和角 B 求出点 P 坐标的定位方法被 ...
- 如何计算已知坐标之间的角度?
如何计算已知坐标之间的角度? 在二维平面坐标系中,我们经常需要计算两个点之间的角度.本文将介绍如何使用Python程序,根据已知的坐标计算两点间的夹角. 首先,我们需要了解一些数学知识.如果我们已知两 ...
- 如何利用计算机计算天数,计算机如何计算两个日期之间的天数
计算机是如何计算两个日期之间的天数的,这个问题看起来好像很简单,但是仔细一想,好像还没那么简单,月与月之间天数不一样,平年和闰年也会影响天数. 举个例子: 2017年2月1日-2017年6月1日中间有 ...
- 如何计算两个文档的相似度(一)
下面的内容转自我爱自然语言处理博客,感谢博主,学到很多东西. 原文链接:http://www.52nlp.cn/%E5%A6%82%E4%BD%95%E8%AE%A1%E7%AE%97%E4%B8%A ...
最新文章
- 每日一皮:程序员距离人生目标只有一个沟
- java xmpp_Java XMPP负载测试工具
- avs 中国音视频标准DRA 中音频标准及应用
- ado mysql 读写_C#使用Ado.Net读写数据库
- centos php71,CentOS 71编译安装PHP7
- 在后台运行程序/软件的Linux命令
- laravel按月/时间区间查询数据
- cf B. Internet Address
- Android 之HierarchyViewer - 4939
- 【翻译】Qt撤销/回撤框架概述
- mdk ac6 CLANG
- 微信公众号如何和Salesforce集成,然后后台给公众号的关注者推送模板消息?
- WPS文字怎么设置页面如分隔符、背景、页面边框等等
- 文科类文献综述怎么写?
- springmvc考研交流平台 java ssm mysql
- https温故而知新
- python获取gps数据_Python GPS模块:读取最新的GPS数据
- 云中漫步-旅行到宇宙边缘
- 计算机高级工考试题库2018,080720 自考软件工程:07163高级数据库技术历年真题及答案 2018年 2017年 2019年真题和答案...
- 小米二手手机回收价格表