当前位置:网站首页>Cesium knows the longitude and latitude of one point and the distance to find the longitude and latitude of another point
Cesium knows the longitude and latitude of one point and the distance to find the longitude and latitude of another point
2022-07-07 14:04:00 【The most ferocious little seal】
The whole article refers to :GIS Algorithm – Know a little latitude and longitude , azimuth , Find another point from distance
The algorithm used by the great God :
Great circle algorithm :http://www.movable-type.co.uk/scripts/latlong.html
Usage method : Direct value transfer , What you return is the longitude and latitude of another point .
explain : Elevation is not considered in this method .
/** * * @param {*} lon longitude * @param {*} lat latitude * @param {*} angle angle (0~360 degree ) * @param {*} distance distance ( rice ) * */
function get_another_point(lon, lat, angle, distance) {
// WGS84 Coordinate system
var a = 6378137; // Equatorial radius
var b = 6356752.3142; // Short radius
var f = 1 / 298.257223563; // Oblateness
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) };
}
边栏推荐
- 《厌女:日本的女性嫌恶》摘录
- 作战图鉴:12大场景详述容器安全建设要求
- TPG x AIDU | AI leading talent recruitment plan in progress!
- Milkdown control icon
- Details of redis core data structure & new features of redis 6
- Help tenants
- MySQL error 28 and solution
- Navicat run SQL file import data incomplete or import failed
- Realization of search box effect [daily question]
- Thread pool reject policy best practices
猜你喜欢
AI talent cultivation new ideas, this live broadcast has what you care about
2022-7-6 Leetcode 977.有序数组的平方
Ogre introduction
Vmware 与主机之间传输文件
2022-7-6 beginner redis (I) download, install and run redis under Linux
Custom thread pool rejection policy
最佳实践 | 用腾讯云AI意愿核身为电话合规保驾护航
Leecode3. Longest substring without repeated characters
Wired network IP address of VMware shared host
Navicat run SQL file import data incomplete or import failed
随机推荐
Huawei image address
How does MySQL control the number of replace?
2022-7-6 Leetcode 977.有序数组的平方
Cargo placement problem
2022-7-6 beginner redis (I) download, install and run redis under Linux
"Song of ice and fire" in the eleventh issue of "open source Roundtable" -- how to balance the natural contradiction between open source and security?
Leecode3. Longest substring without repeated characters
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)
2022-7-7 Leetcode 34.在排序数组中查找元素的第一个和最后一个位置
Data refresh of recyclerview
2022-7-6 Leetcode27.移除元素——太久没有做题了,为双指针如此狼狈的一天
Redis 核心数据结构 & Redis 6 新特性详
THINKPHP框架的优秀开源系统推荐
Custom thread pool rejection policy
内存溢出和内存泄漏的区别
566. 重塑矩阵
postgresql array类型,每一项拼接
Enregistrement de la navigation et de la mise en service du robot ROS intérieur (expérience de sélection du rayon de dilatation)
请问,如图,pyhon云函数提示使用了 pymysql模块,这个是怎么回事?
Milkdown control icon