---coding by yuangu(lifulinghan@aol.com)

--用于计算2个pgs之间的距离

function computeDistance(lat1, lon1,

lat2, lon2)

-- Based on http://www.ngs.noaa.gov/PUBS_LIB/inverse.pdf

-- using the "Inverse Formula" (section 4)

local MAXITERS = 20;

-- Convert lat/long to radians

lat1 = math.rad(lat1); -- lat1 * math.pi / 180.0;

lat2 = math.rad(lat2); --lat2 * math.pi / 180.0;

lon1 = math.rad(lon1); --lon1 * math.pi / 180.0;

lon2 = math.rad(lon2); --lon2 * math.pi / 180.0;

local a = 6378137.0; -- WGS84 major axis

local b = 6356752.3142; -- WGS84 semi-major axis

local f = (a - b) / a;

local aSqMinusBSqOverBSq = (a * a - b * b) / (b * b);

local L = lon2 - lon1;

local A = 0.0;

local U1 = math.atan((1.0 - f) * math.tan(lat1));

local U2 = math.atan((1.0 - f) * math.tan(lat2));

local cosU1 = math.cos(U1);

local cosU2 = math.cos(U2);

local sinU1 = math.sin(U1);

local sinU2 = math.sin(U2);

local cosU1cosU2 = cosU1 * cosU2;

local sinU1sinU2 = sinU1 * sinU2;

local sigma = 0.0;

local deltaSigma = 0.0;

local cosSqAlpha = 0.0;

local cos2SM = 0.0;

local cosSigma = 0.0;

local sinSigma = 0.0;

local cosLambda = 0.0;

local sinLambda = 0.0;

local lambda = L; -- initial guess

for iter = 0, MAXITERS - 1 do

local lambdaOrig = lambda;

cosLambda = math.cos(lambda);

sinLambda = math.sin(lambda);

local t1 = cosU2 * sinLambda;

local t2 = cosU1 * sinU2 - sinU1 * cosU2 * cosLambda;

local sinSqSigma = t1 * t1 + t2 * t2;

sinSigma = math.sqrt(sinSqSigma);

cosSigma = sinU1sinU2 + cosU1cosU2 * cosLambda;

sigma = math.atan2(sinSigma, cosSigma);

local sinAlpha = 0.0

if (sinSigma ~= 0) then

sinAlpha = cosU1cosU2 * sinLambda / sinSigma

end

cosSqAlpha = 1.0 - sinAlpha * sinAlpha;

cos2SM = 0.0

if cosSqAlpha ~= 0 then

cos2SM = cosSigma - 2.0 * sinU1sinU2 / cosSqAlpha;

end

local uSquared = cosSqAlpha * aSqMinusBSqOverBSq;

A = 1 + (uSquared / 16384.0) *

(4096.0 + uSquared *

(-768 + uSquared * (320.0 - 175.0 * uSquared)));

local B = (uSquared / 1024.0) *

(256.0 + uSquared *

(-128.0 + uSquared * (74.0 - 47.0 * uSquared)));

local C = (f / 16.0) *

cosSqAlpha *

(4.0 + f * (4.0 - 3.0 * cosSqAlpha));

local cos2SMSq = cos2SM * cos2SM;

deltaSigma = B * sinSigma *

(cos2SM + (B / 4.0) *

(cosSigma * (-1.0 + 2.0 * cos2SMSq) -

(B / 6.0) * cos2SM *

(-3.0 + 4.0 * sinSigma * sinSigma) *

(-3.0 + 4.0 * cos2SMSq)));

lambda = L +

(1.0 - C) * f * sinAlpha *

(sigma + C * sinSigma *

(cos2SM + C * cosSigma *

(-1.0 + 2.0 * cos2SM * cos2SM)));

local delta = (lambda - lambdaOrig) / lambda;

if (math.abs(delta) < 1.0e-12) then

break;

end

end

return b * A * (sigma - deltaSigma);

end

--for test

print(computeDistance(34.8082342, 113.6125439, 34.8002478, 113.659779))

android计算距离顶部的距离,(lua版)计算距离的逻辑是从Android的提供的接口(Location.distanceBetween)中拔来的,应该是最精确的方法了...相关推荐

  1. 深入理解Android音视频同步机制(二)ExoPlayer的avsync逻辑

    深入理解Android音视频同步机制(一)概述 深入理解Android音视频同步机制(二)ExoPlayer的avsync逻辑 深入理解Android音视频同步机制(三)NuPlayer的avsync ...

  2. matlab计算fft旋转因子表,一种用于FFT中旋转因子乘运算的操作数地址生成方法与流程...

    本发明属于计算机技术领域,涉及一种用于FFT中旋转因子乘运算的操作数地址生成方法. 背景技术: 离散傅里叶变换(DFT)是数理方程.线性系统分析.信号处理与仿真等领域中的一种常见方法,特别是快速傅里叶 ...

  3. vue获取元素距离页面顶部的距离_VUE实时监听元素距离顶部高度的操作

    效果图如下所示 .html 今日热门 今日热销 .js mounted(){ window.addEventListener('scroll',this.handleScrollx,true) }, ...

  4. javascript 计算两个坐标的距离 米_土方全面应用计算

    各种土方量的计算方法汇总 8.2.1  DTM法土方计算 由DTM模型来计算土方量是根据实地测定的地面点坐标(X,Y,Z)和设计高程,通过生成三角网来计算每一个三棱锥的填挖方量,最后累计得到指定范围内 ...

  5. DialogFragment 顶部弹出 设置距离顶部的距离

    自定义dialog 默认的显示位置是window 的位置  我们可以通过dialog或者窗口对象 window 然后通过window 去设置dialog的上下中的位置  例如 dialog.getWi ...

  6. EXCEL中批量计算“已知一点坐标、方位角、距离,求坐标点”

    前言 日常工作中有时需要计算已知点.正本方位角.距离计算坐标点.如下图 已知:蓝点坐标.正本方向夹角为方位角,蓝点与未知点(红色)之间的距离,求红色点坐标. 小O地图Excel插件版提供在excel表 ...

  7. 图片头顶距离顶部百分比怎么修改_「推荐」绘画中的头部怎么画?超详细教你如何正确绘画头部技巧...

    头部怎么画?怎样才能画好头部?如何最正确绘画头部?学习绘画难吗?绘画初学者怎么学习?想必这些都是绘画初学者们经常在想的问题,人物的头部无疑是身体最关键的一个部位,在绘画中也是非常重要,他可以用来确定人 ...

  8. gps两点距离 php,PHP应用:PHP计算百度地图两个GPS坐标之间距离的方法

    <PHP应用:PHP计算百度地图两个GPS坐标之间距离的方法>要点: 本文介绍了PHP应用:PHP计算百度地图两个GPS坐标之间距离的方法,希望对您有用.如果有疑问,可以联系我们. 本文实 ...

  9. R语言计算曼哈顿距离(Manhattan Distance)实战:计算两个向量的曼哈顿距离、dist函数计算矩阵中两两元素的曼哈顿距离

    R语言计算曼哈顿距离(Manhattan Distance)实战:计算两个向量的曼哈顿距离.dist函数计算矩阵中两两元素的曼哈顿距离 目录 R语言计算曼哈顿距离(Manhattan Distance ...

最新文章

  1. 太任性!17 岁少年买不到回国机票,因“泄愤”攻击航司系统,被判刑 4 年
  2. 全程360°4K!CNN将VR直播美国超级日全食
  3. Winform中实现将照片剪贴到系统剪切板中(附代码下载)
  4. Sqlserver2014怎样配置远程连接
  5. 解决vs2005打开vs2008应用程序方法
  6. 2019-5-30-websocket下readyState常量
  7. 本地更新github项目_GitHub开源项目2019-03-29更新精选
  8. 算法之路——插入排序篇3:希尔排序
  9. Listener监听器已经Listener的小案例
  10. vscode 下载加速方法
  11. 通过js脚本处理剪切板(简单而强大的效率工具)
  12. 消除input标签的自动填充 白色背景,及更改字体颜色
  13. 410c 上安装中文版本的答题器游戏demo
  14. foxmail怎么群发邮件
  15. 按关键词搜索淘宝商品接口调用展示
  16. 抖音域名防封,抖音网址免拦截提示,抖音网站防红,域名报毒解决处理生成方法
  17. C++编写布尔表达式
  18. 1.2命题公式及其赋值
  19. 最牛掰得冒泡排序,不接受任何反驳
  20. Linux系列——自动化批量安装软件

热门文章

  1. python自动汇总excel_RPA手把手:Python轻松实现EXCEL自动化
  2. Navicat连接mysql8.0.1版本出现1251--Client
  3. Apache JMeter 背景颜色修改
  4. IDEA Cannot access alimaven (http://maven.aliyun.com/nexus/content/groups/public/)
  5. linux 动态传参执行shell脚本
  6. maven打包时跳过测试
  7. asp.net + ajax + sqlserver 自动补全功能,asp.net+ajax+sqlserver自动补全功能实现解析
  8. C语言 文件读写 fseek 函数 - C语言零基础入门教程
  9. Linux java 生效不了,linux jdk 不生效怎么办
  10. 蓝牙小电池图标_提高MacBook电池寿命的15个技巧