给出两点经纬度算距离

 1 <span style="font-size:14px;font-weight: normal;">
 2 private static final  double EARTH_RADIUS = 6378137;//赤道半径(单位m)
 3
 4     /**
 5      * 转化为弧度(rad)
 6      * */
 7     private static double rad(double d)
 8     {
 9        return d * Math.PI / 180.0;
10     }
11
12     /**
13      * 基于余弦定理求两经纬度距离
14      * @param lon1 第一点的精度
15      * @param lat1 第一点的纬度
16      * @param lon2 第二点的精度
17      * @param lat3 第二点的纬度
18      * @return 返回的距离,单位km
19      * */
20     public static double LantitudeLongitudeDist(double lon1, double lat1,double lon2, double lat2) {
21         double radLat1 = rad(lat1);
22         double radLat2 = rad(lat2);
23
24         double radLon1 = rad(lon1);
25         double radLon2 = rad(lon2);
26
27         if (radLat1 < 0)
28             radLat1 = Math.PI / 2 + Math.abs(radLat1);// south
29         if (radLat1 > 0)
30             radLat1 = Math.PI / 2 - Math.abs(radLat1);// north
31         if (radLon1 < 0)
32             radLon1 = Math.PI * 2 - Math.abs(radLon1);// west
33         if (radLat2 < 0)
34             radLat2 = Math.PI / 2 + Math.abs(radLat2);// south
35         if (radLat2 > 0)
36             radLat2 = Math.PI / 2 - Math.abs(radLat2);// north
37         if (radLon2 < 0)
38             radLon2 = Math.PI * 2 - Math.abs(radLon2);// west
39         double x1 = EARTH_RADIUS * Math.cos(radLon1) * Math.sin(radLat1);
40         double y1 = EARTH_RADIUS * Math.sin(radLon1) * Math.sin(radLat1);
41         double z1 = EARTH_RADIUS * Math.cos(radLat1);
42
43         double x2 = EARTH_RADIUS * Math.cos(radLon2) * Math.sin(radLat2);
44         double y2 = EARTH_RADIUS * Math.sin(radLon2) * Math.sin(radLat2);
45         double z2 = EARTH_RADIUS * Math.cos(radLat2);
46
47         double d = Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)+ (z1 - z2) * (z1 - z2));
48         //余弦定理求夹角
49         double theta = Math.acos((EARTH_RADIUS * EARTH_RADIUS + EARTH_RADIUS * EARTH_RADIUS - d * d) / (2 * EARTH_RADIUS * EARTH_RADIUS));
50         double dist = theta * EARTH_RADIUS;
51         return dist;
52 }
53 </span> 
时间: 2024-10-10 23:17:22

给出两点经纬度算距离的相关文章

【转】根据两点经纬度计算距离

原文链接:根据两点经纬度计算距离 这些经纬线是怎样定出来的呢?地球是在不停地绕地轴旋转(地轴是一根通过地球南北两极和地球中心的假想线),在地球中腰画一个与地轴垂直的大圆圈,使圈上的每一点都和南北两极的距离相等,这个圆圈就叫作“赤道”.在赤道的南北两边,画出许多和赤道平行的圆圈,就是“纬圈”:构成这些圆圈的线段,叫做纬线.我们把赤道定为纬度零度,向南向北各为90度,在赤道以南的叫南纬,在赤道以北的叫北纬.北极就是北纬90度,南极就是南纬90度.纬度的高低也标志着气候的冷热,如赤道和低纬度地地区无冬

根据两点经纬度计算距离

这些经纬线是怎样定出来的呢?地球是在不停地绕地轴旋转(地轴是一根通过地球南北两极和地球中心的 假想线),在地球中腰画一个与地轴垂直的大圆圈,使圈上的每一点都和南北两极的距离相等,这个圆圈 就叫作“赤道”.在赤道的南北两边,画出许多和赤道平行的圆圈,就是“纬圈”:构成这些圆圈的线段, 叫做纬线.我们把赤道定为纬度零度,向南向北各为90度,在赤道以南的叫南纬,在赤道以北的叫北纬. 北极就是北纬90度,南极就是南纬90度.纬度的高低也标志着气候的冷热,如赤道和低纬度地地区无冬, 两极和高纬度地区无夏,

[转]根据两点经纬度计算距离

根据两点经纬度计算距离 这些经纬线是怎样定出来的呢?地球是在不停地绕地轴旋转(地轴是一根通过地球南北两极和地球中心的假想线),在地球中腰画一个与地轴垂直的大圆圈,使圈上的每一点都和南北两极的距离相等,这个圆圈就叫作“赤道”.在赤道的南北两边,画出许多和赤道平行的圆圈,就是“纬圈”:构成这些圆圈的线段,叫做纬线.我们把赤道定为纬度零度,向南向北各为90度,在赤道以南的叫南纬,在赤道以北的叫北纬.北极就是北纬90度,南极就是南纬90度.纬度的高低也标志着气候的冷热,如赤道和低纬度地地区无冬,两极和高

根据两点经纬度计算距离【转】

一 经纬度 1 简介 这些经纬线是怎样定出来的呢?地球是在不停地绕地轴旋转(地轴是一根通过地球南北两极和地球中心的假想线),在地球中腰画一个与地轴垂直的大圆圈,使圈上的每一点都和南北两极的距离相等,这个圆圈就叫作“赤道”.在赤道的南北两边,画出许多和赤道平行的圆圈,就是“纬圈”:构成这些圆圈的线段,叫做纬线.我们把赤道定为纬度零度,向南向北各为90度,在赤道以南的叫南纬,在赤道以北的叫北纬.北极就是北纬90度,南极就是南纬90度.纬度的高低也标志着气候的冷热,如赤道和低纬度地地区无冬,两极和高纬

根据经纬度和半径计算经纬度范围,根据两点经纬度计算距离

这些经纬线是怎样定出来的呢?地球是在不停地绕地轴旋转(地轴是一根通过地球南北两极和地球中心的假想线),在地球中腰画一个与地轴垂直的大圆圈,使圈上的每一点都和南北两极的距离相等,这个圆圈就叫作“赤道”.在赤道的南北两边,画出许多和赤道平行的圆圈,就是“纬圈”:构成这些圆圈的线段,叫做纬线.我们把赤道定为纬度零度,向南向北各为90度,在赤道以南的叫南纬,在赤道以北的叫北纬.北极就是北纬90度,南极就是南纬90度.纬度的高低也标志着气候的冷热,如赤道和低纬度地地区无冬,两极和高纬度地区无夏,中纬度地区

【JAVA】两点经纬度直线距离的计算

来自谷歌地图的计算公式: 通过JAVA的Math类各种方法调用.实现上述公式 private static double EARTH_RADIUS = 6378.137;// 单位千米 /** * 角度弧度计算公式 rad:(). <br/> * * 360度=2π π=Math.PI * * x度 = x*π/360 弧度 * * @author chiwei * @param d * @return * @since JDK 1.6 */ private static double get

【转】根据高德地图得出的坐标算出两点之间的距离

摘自 http://blog.csdn.net/u012251421/article/details/41242891 public static string GetDistance(double n1, double e1, double n2, double e2) { double lon1 = (Math.PI / 180) * n1; double lon2 = (Math.PI / 180) * n2; double lat1 = (Math.PI / 180) * e1; dou

两点经纬度之间距离计算

辅助类 GaoDeCoord.cs GaoDeCoord.cs using System; using System.Collections.Generic; using System.Configuration; using System.Linq; using System.Text; namespace RB.Common { #region 高德地图求范围自有数据 /// <summary> /// 经纬度坐标 /// </summary> public class Deg

根据经纬度算距离 | SQL

--计算地球上两个坐标点(经度,纬度)之间距离sql函数 CREATE FUNCTION [dbo].[fnGetDistance](@LatBegin REAL, @LngBegin REAL, @LatEnd REAL, @LngEnd REAL) RETURNS FLOAT AS BEGIN --距离(千米) DECLARE @Distance REAL DECLARE @EARTH_RADIUS REAL SET @EARTH_RADIUS = 6378.137 DECLARE @Rad