当前位置:网站首页>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) };
}
边栏推荐
猜你喜欢
.net core 关于redis的pipeline以及事务
Custom thread pool rejection policy
Help tenants
Did login metamask
Advanced Mathematics - Chapter 8 differential calculus of multivariate functions 1
Navicat运行sql文件导入数据不全或导入失败
最佳实践 | 用腾讯云AI意愿核身为电话合规保驾护航
Help tenants
TPG x AIDU | AI leading talent recruitment plan in progress!
Final review notes of single chip microcomputer principle
随机推荐
How far can it go to adopt a cow by selling the concept to the market?
Enregistrement de la navigation et de la mise en service du robot ROS intérieur (expérience de sélection du rayon de dilatation)
. Net core about redis pipeline and transactions
The delivery efficiency is increased by 52 times, and the operation efficiency is increased by 10 times. See the compilation of practical cases of financial cloud native technology (with download)
手里的闲钱是炒股票还是买理财产品好?
toRaw和markRaw
Ways to improve the performance of raspberry pie
Huawei image address
What are the principles for distinguishing the security objectives and implementation methods that cloud computing security expansion requires to focus on?
DID登陆-MetaMask
交付效率提升52倍,运营效率提升10倍,看《金融云原生技术实践案例汇编》(附下载)
2022-7-6 Leetcode 977.有序数组的平方
[fortress machine] what is the difference between cloud fortress machine and ordinary fortress machine?
Laravel form builder uses
Vmware 与主机之间传输文件
PC端页面如何调用QQ进行在线聊天?
Move base parameter analysis and experience summary
Social responsibility · value co creation, Zhongguancun network security and Information Industry Alliance dialogue, wechat entrepreneur Haitai Fangyuan, chairman Mr. Jiang Haizhou
高等數學---第八章多元函數微分學1
MySQL error 28 and solution