当前位置:网站首页>Cesium 已知一点经纬度和距离求另一个点的经纬度
Cesium 已知一点经纬度和距离求另一个点的经纬度
2022-07-07 11:59:00 【最凶残的小海豹】
整篇参考了:GIS算法–已知一点经纬度,方位角,距离求另一点
大神用的算法:
大圆算法:http://www.movable-type.co.uk/scripts/latlong.html
使用方法:直接传值,返回的就是另一个点的经纬度。
说明:本方法没有考虑高程问题。
/** * * @param {*} lon 经度 * @param {*} lat 纬度 * @param {*} angle 角度 (0~360度) * @param {*} distance 距离 (米) * */
function get_another_point(lon, lat, angle, distance) {
// WGS84坐标系
var a = 6378137; // 赤道半径
var b = 6356752.3142; // 短半径
var f = 1 / 298.257223563; // 扁率
var alpha1 = angle * (Math.PI / 180)
var sinAlpha1 = Math.sin(alpha1);
var cosAlpha1 = Math.cos(alpha1);
var tanU1 = (1 - f) * Math.tan(lat * (Math.PI / 180));
var cosU1 = 1 / Math.sqrt((1 + tanU1 * tanU1)), sinU1 = tanU1 * cosU1;
var sigma1 = Math.atan2(tanU1, cosAlpha1);
var sinAlpha = cosU1 * sinAlpha1;
var cosSqAlpha = 1 - sinAlpha * sinAlpha;
var uSq = cosSqAlpha * (a * a - b * b) / (b * b);
var A = 1 + uSq / 16384 * (4096 + uSq * (-768 + uSq * (320 - 175 * uSq)));
var B = uSq / 1024 * (256 + uSq * (-128 + uSq * (74 - 47 * uSq)));
var sigma = distance / (b * A), sigmaP = 2 * Math.PI;
while (Math.abs(sigma - sigmaP) > 1e-12) {
var cos2SigmaM = Math.cos(2 * sigma1 + sigma);
var sinSigma = Math.sin(sigma);
var cosSigma = Math.cos(sigma);
var deltaSigma = B * sinSigma * (cos2SigmaM + B / 4 * (cosSigma * (-1 + 2 * cos2SigmaM * cos2SigmaM) -
B / 6 * cos2SigmaM * (-3 + 4 * sinSigma * sinSigma) * (-3 + 4 * cos2SigmaM * cos2SigmaM)));
sigmaP = sigma;
sigma = distance / (b * A) + deltaSigma;
}
var tmp = sinU1 * sinSigma - cosU1 * cosSigma * cosAlpha1;
var lat2 = Math.atan2(sinU1 * cosSigma + cosU1 * sinSigma * cosAlpha1,
(1 - f) * Math.sqrt(sinAlpha * sinAlpha + tmp * tmp));
var lambda = Math.atan2(sinSigma * sinAlpha1, cosU1 * cosSigma - sinU1 * sinSigma * cosAlpha1);
var C = f / 16 * cosSqAlpha * (4 + f * (4 - 3 * cosSqAlpha));
var L = lambda - (1 - C) * f * sinAlpha *
(sigma + C * sinSigma * (cos2SigmaM + C * cosSigma * (-1 + 2 * cos2SigmaM * cos2SigmaM)));
var revAz = Math.atan2(sinAlpha, -tmp); // final bearing
return {
lon: Number(lon) + L * (180 / Math.PI), lat: lat2 * (180 / Math.PI) };
}
边栏推荐
- PC端页面如何调用QQ进行在线聊天?
- call undefined function openssl_ cipher_ iv_ length
- Clickhouse (03) how to install and deploy Clickhouse
- DID登陆-MetaMask
- Help tenants
- What parameters need to be reconfigured to replace the new radar of ROS robot
- Help tenants
- AI人才培育新思路,这场直播有你关心的
- 室内ROS机器人导航调试记录(膨胀半径的选取经验)
- Fast development board pinctrl and GPIO subsystem experiment for itop-imx6ull - modify the device tree file
猜你喜欢
Milkdown control icon
室内ROS机器人导航调试记录(膨胀半径的选取经验)
2022-7-6 beginner redis (I) download, install and run redis under Linux
Xshell connection server changes key login to password login
Getting started with cinnamon applet
AI人才培育新思路,这场直播有你关心的
Take you to master the three-tier architecture (recommended Collection)
Co create a collaborative ecosystem of software and hardware: the "Joint submission" of graphcore IPU and Baidu PaddlePaddle appeared in mlperf
Navicat运行sql文件导入数据不全或导入失败
Enregistrement de la navigation et de la mise en service du robot ROS intérieur (expérience de sélection du rayon de dilatation)
随机推荐
Xshell connection server changes key login to password login
. Net core about redis pipeline and transactions
THINKPHP框架的优秀开源系统推荐
2022-7-7 Leetcode 34. Find the first and last positions of elements in a sorted array
云计算安全扩展要求关注的安全目标和实现方式区分原则有哪些?
.net core 关于redis的pipeline以及事务
LeetCode_ Binary search_ Medium_ 153. Find the minimum value in the rotation sort array
Solve the cache breakdown problem
MySQL "invalid use of null value" solution
ROS机器人更换新雷达需要重新配置哪些参数
Data refresh of recyclerview
3D detection: fast visualization of 3D box and point cloud
AI人才培育新思路,这场直播有你关心的
Leetcode simple question sharing (20)
Problems that cannot be accessed in MySQL LAN
Huawei image address
Attribute keywords aliases, calculated, cardinality, ClientName
《厌女:日本的女性嫌恶》摘录
2022-7-6 Leetcode 977.有序数组的平方
Redis只能做缓存?太out了!