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

推荐订阅源

The Hacker News
The Hacker News
博客园_首页
人人都是产品经理
人人都是产品经理
博客园 - 聂微东
J
Java Code Geeks
Stack Overflow Blog
Stack Overflow Blog
Blog — PlanetScale
Blog — PlanetScale
博客园 - 三生石上(FineUI控件)
A
About on SuperTechFans
V
Visual Studio Blog
小众软件
小众软件
MyScale Blog
MyScale Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
F
Full Disclosure
酷 壳 – CoolShell
酷 壳 – CoolShell
T
The Exploit Database - CXSecurity.com
C
CERT Recently Published Vulnerability Notes
T
Threat Research - Cisco Blogs
AWS News Blog
AWS News Blog
T
Tor Project blog
Jina AI
Jina AI
GbyAI
GbyAI
C
Comments on: Blog
IT之家
IT之家
Apple Machine Learning Research
Apple Machine Learning Research
A
Arctic Wolf
有赞技术团队
有赞技术团队
SecWiki News
SecWiki News
L
Lohrmann on Cybersecurity
Security Latest
Security Latest
Webroot Blog
Webroot Blog
C
Cisco Blogs
雷峰网
雷峰网
云风的 BLOG
云风的 BLOG
博客园 - 叶小钗
K
Kaspersky official blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
宝玉的分享
宝玉的分享
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
O
OpenAI News
H
Hacker News: Front Page
D
Darknet – Hacking Tools, Hacker News & Cyber Security
D
Docker
P
Palo Alto Networks Blog
The Register - Security
The Register - Security
B
Blog RSS Feed
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
WordPress大学
WordPress大学
阮一峰的网络日志
阮一峰的网络日志

博客园 - 3echo

物联网笔记四:物联网网络及协议 物联网学习笔记三:物联网网关协议比较:MQTT 和 Modbus 物联网学习笔记二:物联网网关 物联网学习笔记一:物联网入门的必备 7 大概念和技能 使用Python 将shapefile导入mongodb ArcGIS支持MongoDB数据源 做事要趁早 产品介绍汇报模板 软件企业利润率知多少 项目管理经验谈之意外事件处理 文件数据库和关系数据库的比较 实时/历史数据库和关系型数据库的区别 ArcGIS中如何实现地图缩编(转载) 浙江省地理空间数据交换和共享管理办法 ORA-06413:连接未打开错误 - 3echo - 博客园 如何使用Nhibernate动态连接Oracle数据库 中国房市之痛 3S新闻周刊很好很专业 NET生成下面的模块时,启用了优化或没有调试信息
获取两点(经纬度表示)间距离
3echo · 2010-04-28 · via 博客园 - 3echo
 

获取两点(经纬度表示)间距离

/3echo 2010-4-28

经常有朋友或同事征询有关如何获取两点(经纬度表示)间距离的问题,现将解决方法写出来,以供自己和朋友查询、学习。

解决此问题的关键是要理解空间几何模型,在理解空间几何模型的基础上再利用数学公式求取两点之间的值。其解决步骤如下:

1、设两点分别为P1P2,如果其值是用度分秒形式表示,则需将其转换成十进制度的形式,如P1点纬度为2330分,则其纬度值转换成十进制度的形式为23.5度。如果值为十进制度的形式,则直接进入第二步。

2、分别将两点的经度、纬度值转换成弧度制形式,如P1纬度为23.5度,转换成弧度制则为:23.5*PI / 180。分别用 P1latInRadP1LongInRadP2latInRadP2LongInRad表示。

3、分别求取两点间的纬度差(dlat)与经度差(dlon);

4、求取两点间的正弦与余弦值,公式如下:

A=sin2(dlat/2) + cos(P1LatInRad)*cos(P2LatInRad)*Sin2(dlon/2)       (1)

5、求取两点的正切值,公式如下:

C=2*Math.Atan2(Math.Sqrt(A), Math.Sqrt(1-A))                     (2)

6、返回两点间的距离:公式如下:

D=EarthRadiusKm * C                                          (3)

C#源代码:

获取两点间距离

 1       /// <summary>
 2       /// 获取两点(经纬度表示)间的距离
 3       /// </summary>
 4       /// <param name="p1Lat">第一点纬度值</param>
 5       /// <param name="p1Lng">第一点经度值</param>
 6       /// <param name="p2Lat">第二点纬度值</param>
 7       /// <param name="p2Lng">第二点经度值</param>
 8       /// <returns>返回两点间距离</returns>
 9       public double GetDistance(double p1Lat, double p1Lng, double p2Lat, double p2Lng)
10       {
11          double dLat1InRad = p1Lat * (Math.PI / 180);
12          double dLong1InRad = p1Lng * (Math.PI / 180);
13          double dLat2InRad = p2Lat * (Math.PI / 180);
14          double dLong2InRad = p2Lng * (Math.PI / 180);
15          double dLongitude = dLong2InRad - dLong1InRad;
16          double dLatitude = dLat2InRad - dLat1InRad;
17          double a = Math.Pow(Math.Sin(dLatitude / 2), 2+ Math.Cos(dLat1InRad) * Math.Cos(dLat2InRad) * Math.Pow(Math.Sin(dLongitude / 2), 2);
18          double c = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1 - a));
19          double dDistance = EarthRadiusKm * c;
20          return dDistance;
21       }
22 
23       /// <summary>
24       /// Radius of the Earth
25       /// </summary>
26       public double EarthRadiusKm = 6378.137// WGS-84