经纬度算距离

下面以54坐标系为例,介绍具体的计算方法。

完成经纬度BL 到平面直角坐标XY 的换算。在EXCEL 中,选择输入公式的起始单元格,例如:第2行第1列(A2格)为起始单元格,各单元格的格式如下: 单元格;单元格内容;说明

A2;输入中央子午线,以度. 分秒形式输入,如115度30分则输入115.30;起算数据L0

B2;=INT(A2)+(INT(A2*100)-INT(A2)*100)/60+(A2*10000-INT(A2*100)*100)/3600;把L0化成度

C2;以度小数形式输入纬度值,如38°14′20″则输入38.1420;起算数据B D2;以度小数形式输入经度值;起算数据L

E2;=INT(C2)+(INT(C2*100)-INT(C2)*100)/60+(C2*10000-INT(C2*100)*100)/3600;把B 化成度

F2;=INT(D2)+(INT(D2*100)-INT(D2)*100)/60+(D2*10000-INT(D2*100)*100)/3600;把L 化成度

G2;=F2-B2;L-L0

H2;=G2/57.[1**********]23;化作弧度

I2;=TAN(RADIANS(E2));Tan(B)

J2;=COS(RADIANS(E2));COS(B)

K2;=0.[1**********]5*J2*J2

L2;=I2*I2

M2;=1+K2

N2;=6399698.9018/SQRT(M2)

O2;=H2*H2*J2*J2

P2;=I2*J2

Q2;=P2*P2

R2;=(32005.78006+Q2*(133.92133+Q2*0.7031))

S2;=6367558.49686*E2/57.[1**********]-P2*J2*R2+((((L2-58)*L2+61)*

O2/30+(4*K2+5)*M2-L2)*O2/12+1)*N2*I2*O2/2

计算结果X

T2;=((((L2-18)*L2-(58*L2-14)*K2+5)*O2/20+M2-L2)*O2/6+1)*N2*(H2*J2) 计算结果Y

按上面表格中的公式输入到相应单元格后,就可方便地由经纬度求得平面直角坐标。当输入完所有的经纬度后,用鼠标下拉即可得到所有的计算结果。 经纬度算距离的算法两个:

设地球上某点的经度为lambda, 纬度为phi ,

则这点的空间坐标是

x=cos(phi)*cos(lambda)

y=cos(phi)*sin(lambda)

z=sin(phi)

设地球上两点的空间坐标分别为(x1,y1,z1),(x2,y2,z2)

则它们的夹角为

A=acos(x1*x2+y1*y2+z1*z2),A 是角度

则两地距离为

A/180*pi*R,其中R 为地球平均半径6371

误差不超过1%

CREATE OR REPLACE FUNCTION Get_Distance(

bw1 IN NUMBER, dj1 IN NUMBER,

bw2 IN NUMBER, dj2 IN NUMBER) RETURN NUMBER

AS

n_size NUMBER;

BEGIN

SELECT 3.1415926 * (12756/2) / 180 * ACOS( SIN(bw1)*SIN(bw2) +

COS(bw1)*COS(bw2)*COS(dj1-dj2)) INTO n_size

FROM dual;

RETURN n_size;

EXCEPTION

WHEN NO_DATA_FOUND THEN

RETURN 0;

END;

/

private const double EARTH_RADIUS = 6378.137;

private static double rad(double d)

{

return d * Math.PI / 180.0;

}

public static double GetDistance(double lat1, double lng1, double lat2, double lng2) {

double radLat1 = rad(lat1);

double radLat2 = rad(lat2);

double a = radLat1 - radLat2;

double b = rad(lng1) - rad(lng2);

double s = 2 * Math.Asin(Math.Sqrt(Math.Pow(Math.Sin(a/2),2) +

Math.Cos(radLat1)*Math.Cos(radLat2)*Math.Pow(Math.Sin(b/2),2)));

s = s * EARTH_RADIUS;

s = Math.Round(s * 10000) / 10000;

return s;

}据说是google maps的代码

下面以54坐标系为例,介绍具体的计算方法。

完成经纬度BL 到平面直角坐标XY 的换算。在EXCEL 中,选择输入公式的起始单元格,例如:第2行第1列(A2格)为起始单元格,各单元格的格式如下: 单元格;单元格内容;说明

A2;输入中央子午线,以度. 分秒形式输入,如115度30分则输入115.30;起算数据L0

B2;=INT(A2)+(INT(A2*100)-INT(A2)*100)/60+(A2*10000-INT(A2*100)*100)/3600;把L0化成度

C2;以度小数形式输入纬度值,如38°14′20″则输入38.1420;起算数据B D2;以度小数形式输入经度值;起算数据L

E2;=INT(C2)+(INT(C2*100)-INT(C2)*100)/60+(C2*10000-INT(C2*100)*100)/3600;把B 化成度

F2;=INT(D2)+(INT(D2*100)-INT(D2)*100)/60+(D2*10000-INT(D2*100)*100)/3600;把L 化成度

G2;=F2-B2;L-L0

H2;=G2/57.[1**********]23;化作弧度

I2;=TAN(RADIANS(E2));Tan(B)

J2;=COS(RADIANS(E2));COS(B)

K2;=0.[1**********]5*J2*J2

L2;=I2*I2

M2;=1+K2

N2;=6399698.9018/SQRT(M2)

O2;=H2*H2*J2*J2

P2;=I2*J2

Q2;=P2*P2

R2;=(32005.78006+Q2*(133.92133+Q2*0.7031))

S2;=6367558.49686*E2/57.[1**********]-P2*J2*R2+((((L2-58)*L2+61)*

O2/30+(4*K2+5)*M2-L2)*O2/12+1)*N2*I2*O2/2

计算结果X

T2;=((((L2-18)*L2-(58*L2-14)*K2+5)*O2/20+M2-L2)*O2/6+1)*N2*(H2*J2) 计算结果Y

按上面表格中的公式输入到相应单元格后,就可方便地由经纬度求得平面直角坐标。当输入完所有的经纬度后,用鼠标下拉即可得到所有的计算结果。 经纬度算距离的算法两个:

设地球上某点的经度为lambda, 纬度为phi ,

则这点的空间坐标是

x=cos(phi)*cos(lambda)

y=cos(phi)*sin(lambda)

z=sin(phi)

设地球上两点的空间坐标分别为(x1,y1,z1),(x2,y2,z2)

则它们的夹角为

A=acos(x1*x2+y1*y2+z1*z2),A 是角度

则两地距离为

A/180*pi*R,其中R 为地球平均半径6371

误差不超过1%

CREATE OR REPLACE FUNCTION Get_Distance(

bw1 IN NUMBER, dj1 IN NUMBER,

bw2 IN NUMBER, dj2 IN NUMBER) RETURN NUMBER

AS

n_size NUMBER;

BEGIN

SELECT 3.1415926 * (12756/2) / 180 * ACOS( SIN(bw1)*SIN(bw2) +

COS(bw1)*COS(bw2)*COS(dj1-dj2)) INTO n_size

FROM dual;

RETURN n_size;

EXCEPTION

WHEN NO_DATA_FOUND THEN

RETURN 0;

END;

/

private const double EARTH_RADIUS = 6378.137;

private static double rad(double d)

{

return d * Math.PI / 180.0;

}

public static double GetDistance(double lat1, double lng1, double lat2, double lng2) {

double radLat1 = rad(lat1);

double radLat2 = rad(lat2);

double a = radLat1 - radLat2;

double b = rad(lng1) - rad(lng2);

double s = 2 * Math.Asin(Math.Sqrt(Math.Pow(Math.Sin(a/2),2) +

Math.Cos(radLat1)*Math.Cos(radLat2)*Math.Pow(Math.Sin(b/2),2)));

s = s * EARTH_RADIUS;

s = Math.Round(s * 10000) / 10000;

return s;

}据说是google maps的代码


相关内容

  • 常用经纬度转换
  • 度分转换: 将度分单位数据转换为度单位数据 度=度+分/60 例如: 经度 = 116°20.12' 纬度 = 39°12.34' 经度 = 116 + 20.12 / 60 = 116.33533° 纬度 = 39 + 12.34 / 60 = 39.20567° NTU经度 = 116.3353 ...

  • 地球仪与经纬网
  • 第一单元 基础知识 第一章 地球仪和经纬网 [教学目的] 1.了解地球的形状.大小,掌握地球的基本参数. 2.了解经纬线的特点和经纬度的划分方法,明确经纬线的重要作用,能运用经纬 线知识解决一些实际问题. [重点.难点]1 经纬线的特点及作用:经度的划分 [教学过程] 一.地球的形状和大小 在人类对 ...

  • GPS经纬度坐标转平面坐标的简化计算方法及精度分析_肖体琼
  • 中国农业工程学会2005年学术年会论文集 49 GPS 经纬度坐标转平面坐标的简化计算方法及精度分析 肖体琼,陈怡群,常春 (1.农业部南京农业机械化研究所,南京 210014) 摘 要:GPS 技术应用于农机作业定位时需要将经纬度坐标转换为地平面上的直角平面坐标,通常用于坐标转换的公式十分复杂,由 ...

  • 经纬度和距离的换算
  • 已知地图上两点的经纬度如何计算距离 地球赤道上环绕地球一周走一圈共 40075.04公里 而一圈分成360° 而每1°(度)有60' 每一度一秒在赤道上的长度计算如下: 40075.04km/360°=111.31955km 111.31955km/60'=1.8553258km=1855.3m 而 ...

  • 已知一点的经纬度和该点到另一点的距离,求另一点的经纬度
  • 以下是将距离换算成经纬度,有误差. //将相对于起点的距离转换为经纬度,distance代表到点的距离,angle代表方位角度 private string ConvertDistanceToLogLat(float distance, string logLatPtStr, double angl ...

  • 如何计算1纬度和1经度间的距离
  • 如何计算1纬度和1经度间的距离 由于地球是一个类圆的球体,不同地区 1 纬度的纵向间距离是一样的,但经度间的横向距离是和所处的纬度相关.在北极或南极点上,所有的经线都汇聚于一点,所以所有经度间的距离都为0,在赤道上,所有的经线都分散得最开,每条经线间的距离也最大. 明白了以上的原理,就容易理解怎样计 ...

  • 高一地理导学(经纬网)
  • 经纬网的导学案 e 点在f 点的西北方. ③图丙是以南极为中心的经纬网图,那么顺着"顺时针方向"便是正东方,所以g 点在i 点的正西方, i 点在h 点的正北方. 图甲 图乙 一.经纬度的判断 判断方法:一般来说经度数值向东递增的为东经, 经度数值向东递减的为西经:纬度数值向北递 ...

  • 地球仪和经纬网(练习题)
  • 第一部分 基础地理 第一章 地球与地球仪(专题训练) 北京奥运会火炬于2008年3月25日在雅典采集火种,4月1日从北京出发在全球传递,5月传回国内.读图1,完成1--2题. 1.在火炬经过的城市①-④中,伦敦最有可能是其中的: A.①城 B.②城 C.③城 D.④城 2.图中所示火炬传递经过的城市 ...

  • 关于用经纬度计算距离
  • 关于用经纬度计算距离: 40075.04km/360°=111.31955km 111.31955km/60'=1.8553258km=1855.3m 而每一分又有60秒, 每一秒就代表 1855.3m/60=30.92m 任意两点距离计算公式为 d =111.12cos{1/[sinΦAsinΦB ...

  • 地球基础知识-经纬网导学案
  • 地球基础知识-经纬网学案 第一章<地球知识--经纬网>导学案 一.学习目标 1.掌握地球的形状和大小. 2.理解经线与经度.纬线与纬度.东西和南北半球的划分.经纬网的地理意义. 1.教材导读: 一:地球 1:形状:两极_______,赤道________的__________. 2:大小 ...