惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
Last Week in AI
Last Week in AI
T
Tailwind CSS Blog
WordPress大学
WordPress大学
B
Blog RSS Feed
T
The Blog of Author Tim Ferriss
F
Fortinet All Blogs
aimingoo的专栏
aimingoo的专栏
MongoDB | Blog
MongoDB | Blog
博客园 - Franky
C
Check Point Blog
P
Proofpoint News Feed
H
Help Net Security
月光博客
月光博客
博客园_首页
Stack Overflow Blog
Stack Overflow Blog
博客园 - 三生石上(FineUI控件)
Martin Fowler
Martin Fowler
Recent Announcements
Recent Announcements
人人都是产品经理
人人都是产品经理
U
Unit 42
美团技术团队
I
InfoQ
A
About on SuperTechFans

博客园 - 卓如

混合使用Jquery Deferred和Angularjs的$timeout(转) AngularJs应用页面切换优化方案(转) 在IE7下使用angularjs(转) AngularJS 中的 Promise 和 设计模式(转) Installing Oracle and ArcSDE on separate servers 修改oracle内存占用 在设置窗体身份验证时设置个别页面不需要进行验证[转] 解决ASP.NET在IE10中Session丢失问题【转】 心理课堂:对付拖延症(转) Ado方式导入excel混用数据类型引起数据缺失问题解决方法 深入分析 Java 中的中文编码问题(转) 轻松实现坐标转换(转) WIN2003系统远程桌面多连接数设置终极大法 GIS理论(墨卡托投影、地理坐标系、地面分辨率、地图比例尺、Bing Maps Tile System)【转载】 [转]判断一个点是否落在多边形内 wpf \silverlight 保存控件为图片 - 卓如 WPF 自定义快捷键命令(Command)(转) SelectNodes 表达式 - 卓如 - 博客园 获得excel的sheet名字
两点坐标间距离的算法以及验证【转】
卓如 · 2011-07-21 · via 博客园 - 卓如

看了通过两个点的经纬度计算距离这篇,据说是Google里扒来的算法,于是决定验证一下。
东改西改改成了个VB的代码,通过计算发现非常正确。
用30,120和31,121两个坐标点进行验证,同Mapinfo中计算的结果非常的相近。
后来又把坐标系直接当成直角坐标系来计算,发现误差很大。
于是仍然用直角坐标系方法来计算,给纬度加上了个0.86的参数,这样计算下来和结果相近。
不上传文件了,直接贴代码了。代码如下:(五个TEXT,三个Button)


Const EARTH_RADIUS = 6378.137
Const Pi = 3.1415926535898

Function rad(ByVal d As DoubleAs Double
rad 
= d * Pi / 180
End Function

Function GetDistance(lat1 As Double, lng1 As Double, lat2 As Double, lng2 As DoubleAs Double
Dim radlat1 As Double, radlat2 As Double
Dim a As Double, b As Double, s As Double, Temp As Double
radlat1 
= rad(lat1)
radlat2 
= rad(lat2)
= radlat1 - radlat2
= rad(lng1) - rad(lng2)
Temp 
= Sqr(Sin(a / 2^ 2 + Cos(radlat1) * Cos(radlat2) * Sin(b / 2^ 2)
= 2 * Atn(Temp / Sqr(-Temp * Temp + 1))     '没有反正弦函数,网上找了个
= s * EARTH_RADIUS
GetDistance 
= s
End Function

Private Sub Command1_Click()
Text5.Text 
= Str(GetDistance(Val(Text1.Text), Val(Text2.Text), Val(Text3.Text), Val(Text4.Text)))
End Sub

Private Sub Command2_Click()
Text5.Text 
= Str((Sqr((Val(Text3.Text) - Val(Text1.Text)) ^ 2 + (Val(Text4.Text) - Val(Text2.Text)) ^ 2)) * 111.3199338)
End Sub

Private Sub Command3_Click()
Text5.Text 
= Str((Sqr((Val(Text3.Text) * 0.86 - Val(Text1.Text) * 0.86^ 2 + (Val(Text4.Text) - Val(Text2.Text)) ^ 2)) * 111.3199338)
End Sub