当前位置:网站首页>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) };
}
边栏推荐
- Did login metamask
- Navicat运行sql文件导入数据不全或导入失败
- Error lnk2019: unresolved external symbol
- Parameter keywords final, flags, internal, mapping keywords internal
- Ikvm of toolbox Net project new progress
- 2022-7-7 Leetcode 844.比较含退格的字符串
- Flink | 多流转换
- 属性关键字Aliases,Calculated,Cardinality,ClientName
- Laravel Form-builder使用
- Split screen bug notes
猜你喜欢

2022-7-6 Leetcode 977.有序数组的平方

Battle Atlas: 12 scenarios detailing the requirements for container safety construction

Talk about pseudo sharing

Flask session forged hctf admin

Evolution of customer service hotline of dewu

Help tenants

社会责任·价值共创,中关村网络安全与信息化产业联盟对话网信企业家海泰方圆董事长姜海舟先生

Esp32 ① compilation environment

Advanced Mathematics - Chapter 8 differential calculus of multivariate functions 1

高等数学---第八章多元函数微分学1
随机推荐
Navicat运行sql文件导入数据不全或导入失败
内存溢出和内存泄漏的区别
.net core 关于redis的pipeline以及事务
566. 重塑矩阵
Deep understanding of array related problems in C language
The difference between memory overflow and memory leak
Laravel5 call to undefined function OpenSSL cipher IV length() error php7 failed to open OpenSSL extension
Custom thread pool rejection policy
Ikvm of toolbox Net project new progress
The reason why data truncated for column 'xxx' at row 1 appears in the MySQL import file
Show the mathematical formula in El table
Vmware共享主机的有线网络IP地址
Realize the IP address home display function and number home query
Navicat run SQL file import data incomplete or import failed
Best practice | using Tencent cloud AI willingness to audit as the escort of telephone compliance
Use of polarscatter function in MATLAB
Battle Atlas: 12 scenarios detailing the requirements for container safety construction
Clickhouse (03) how to install and deploy Clickhouse
Social responsibility · value co creation, Zhongguancun network security and Information Industry Alliance dialogue, wechat entrepreneur Haitai Fangyuan, chairman Mr. Jiang Haizhou
Beginner XML