http://blog.chinaunix.net/u/6776/showart_694778.html

地球是一个近乎标准的椭球体,它的赤道半径为6378.140千米,极半径为6356.755千米,平均半径6371.004千米。如果我们假设地球是一个完美的球体,那么它的半径就是地球的平均半径,记为R。如果以0度经线为基准,那么根据地球表面任意两点的经纬度就可以计算出这两点间的地表距离(这里忽略地球表面地形对计算带来的误差,仅仅是理论上的估算值)。设第一点A的经纬度为(LonA, LatA),第二点B的经纬度为(LonB, LatB),按照0度经线的基准,东经取经度的正值(Longitude),西经取经度负值(-Longitude),北纬取90-纬度值(90-Latitude),南纬取90+纬度值(90+Latitude),则经过上述处理过后的两点被计为(MLonA, MLatA)和(MLonB, MLatB)。那么根据三角推导,可以得到计算两点距离的如下公式:

C = sin(MLatA)*sin(MLatB)*cos(MLonA-MLonB) + cos(MLatA)*cos(MLatB)

Distance = R*Arccos(C)*Pi/180

这里,R和Distance单位是相同,如果是采用6371.004千米作为半径,那么Distance就是千米为单位,如果要使用其他单位,比如mile,还需要做单位换算,1千米=0.621371192mile
如果仅对经度作正负的处理,而不对纬度作90-Latitude(假设都是北半球,南半球只有澳洲具有应用意义)的处理,那么公式将是:

C = sin(LatA)*sin(LatB) + cos(LatA)*cos(LatB)*cos(MLonA-MLonB)

Distance = R*Arccos(C)*Pi/180

以上通过简单的三角变换就可以推出。
如果三角函数的输入和输出都采用弧度值,那么公式还可以写作:

C = sin(LatA*Pi/180)*sin(LatB*Pi/180) + cos(LatA*Pi/180)*cos(LatB*Pi/180)*cos((MLonA-MLonB)*Pi/180)

Distance = R*Arccos(C)*Pi/180

也就是:

C = sin(LatA/57.2958)*sin(LatB/57.2958) + cos(LatA/57.2958)*cos(LatB/57.2958)*cos((MLonA-MLonB)/57.2958)

Distance = R*Arccos(C) = 6371.004*Arccos(C) kilometer = 0.621371192*6371.004*Arccos(C) mile = 3958.758349716768*Arccos(C) mile

在实际应用当中,一般是通过一个个体的邮政编码来查找该邮政编码对应的地区中心的经纬度,然后再根据这些经纬度来计算彼此的距离,从而估算出某些群体之间的大致距离范围(比如酒店旅客的分布范围-各个旅客的邮政编码对应的经纬度和酒店的经纬度所计算的距离范围-等等),所以,通过邮政编码查询经纬度这样一个数据库是一个很有用的资源。

根据经纬度计算该位置点与附近某一经纬度位置点的位置偏移角
2008-05-18 13:44
如何计算?

设某一城市有一个城市地标,可以视为城市的中心点 ,其经纬度已知。

分散在城市中心分别
   (1)由多层环形交通公路(环线),环城市地标为基准,在不同层的环线上分布着重要的设施。
    (2)分布着多个卫星城、主要居民区和学校、基础设施。

现控制无人机分别自城市地标出发,依次探访和航拍环城公路上的重要设施。

无人机配置有GPS导航和电子罗盘。

自城市中心地标处控制无人机起飞。

1 计算任意经纬度点间的距离

用GPS测出两个点的经纬度后,如何计算这两个点之间的距离呢。用的是便携式GPS,只有经纬度显示,无坐标显示和输出。

设两点A、B的经、纬度分别为(jA,wA)(jB,wB),则半径为R的球面上两点间的最短距离(大圆弧)为:
弧AB=R*arccos[sin(wA)sin(wB)+cos(wA)cos(wB)*cos(jA-jB)]

google maps的脚本里代码。

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;
}

;该函数用IDL语言编写,利用GIS中根据两点经纬度计算距离公式

;计算经纬度两点间的距离
Function Length2LatLon,pts0,pts1
    radius=6378.14d;地球平均半径,单位公里
;    print,pts0,pts1

;    length=radius * acos(sin(pts0[1]*!PI/180.0)*sin(pts1[1]*!PI/180.0)+cos(pts0[1]*!PI/180.0)*cos(pts1[1]*!PI/180.0)*cos(pts0[0]*!PI/180.0-pts1[0]*!PI/180.0))
    length=radius * acos(sin(pts0[1]*!DTOR)*sin(pts1[1]*!DTOR)+cos(pts0[1]*!DTOR)*cos(pts1[1]*!DTOR)*cos(pts0[0]*!DTOR-pts1[0]*!DTOR))
    return,length
end
pro test
pts0=[117.548802d,38.625238d]
pts1=[117.548625d,38.625139d]
print,length2latlon(pts0,pts1)

end

另外在IDL中提供了计算两点距离的方法map_2points可以方便的计算不同单位(Miles,Meters)的距离,还可以通过设置不同的参数来得到不同的距离、角度值,

Syntax:
Result = MAP_2POINTS( lon0, lat0, lon1, lat1 [, DPATH=value | , /METERS | , /MILES | , NPATH=integer{2 or greater} | , /PARAMETERS | , RADIANS=value] [, /RADIUS] [, /RHUMB] )

具体可以参考IDL 的Help里面讲解

如果要算的距离是椭球面的距离,就难些。

因为大地线的方程是一个微分方程,所以大地线长度是对一个微分方程的开方的积分,无法写成简单的公式.通常是直接用差分代替微分,用求和代替积分算出,这是很严格的.

下面是近似地由大地经纬度求椭球面距离的逼近方法:

如两点在同一纬线上,距离为N*cos(phi)*(lambda2-lambda1)。

如两点在同一经线上,距离为M*dphi从phi1到phi2的积分。

其中N=a/sqrt(d), d=1-e*e*sin(phi)*sin(phi),

M=a*(1-e*e)/[d*sqrt(d)],

其中长短轴a,b与扁率偏心率的关系是:a/b=1-f=sqrt(1-e*e).

把积分区域分成等分n小段,积分可以写成求和,既可算出。这也是严格的。

如两点不在同一经纬线上,且两点距离很近,则小区域的椭球面可以视为平面,于是两点的距离近似地是上面算出的距离的平方和的开方。如两点距离较远,把两点间的经纬差分成等分n小段,每小段的距离的和就是所求的距离。

地图基础知识 http://www.51ditu.com

  • 地图应用接口中使用的经纬度单位是NTU,您需要把其它单位的经纬度值转化过来,以下为常用的转换关系:

基本转换:
NTU = 度*100000
度 = NTU/100000
例如:
经度 = 116.21345°
纬度 = 39.445875°
NTU经度:116.21345 * 100000 = 11621345(NTU)
NTU纬度:39.445874*100000=3944587(NTU)

度分转换:
将度分单位数据转换为度单位数据
度=度+分/60
例如:
经度 = 116°20.12’
纬度 = 39°12.34’
经度 = 116 + 20.12 / 60 = 116.33533°
纬度 = 39 + 12.34 / 60 = 39.20567°
NTU经度 = 116.33533 * 100000 = 11633533(NTU)
NTU纬度 = 39.20567 * 100000 = 3920567(NTU)

度分秒转换:
将度分秒单位数据转换为度单位数据
度 = 度 + 分 / 60 + 秒 / 60 / 60
例如:
经度 = 116°20’43”
纬度 = 39°12’37”
经度 = 116 + 20 / 60 + 43 / 60 / 60 = 116.34528°
纬度 = 39 + 12 / 60 + 37 / 60 / 60 = 39.21028°
NTU经度 = 116.34528 * 100000 = 11634528(NTU)
NTU纬度 = 39.21028 * 100000 = 3921028(NTU)
其格式的经纬值先转换度,再采用上面的运算。

与经纬度有关的基础知识:

NTU 相当于十万分之一度。

如何计算经度方向距离

比如: 点A的纬度为3995400,点B的纬度为3995300,则这两个点在沿着纬线的方向相差100米。
点A的经度为11695400,点B的经度为11695300,则这两个点在沿着经线的方向相差大约为77米,
该值的计算方法可以用近似公式:
经度方向距离 = 经度差 * cos(纬度值) = 100 * cos(39) = 77米。

如何计算两点间距离

比如:点A的经度为11695400,纬度为3995400。点B的经度为11695300,纬度为3995300。
公式:两点间距离 = [ (A点经度 - B点经度)^2 + (A点纬度 - B点纬度)^2 ] ^ (1/2) = [ (11695400 - 11695300)^2
+ (3995400 - 3995300)^2 ] ^(1/2) =(10000+10000) ^ (1/2) =141米

公式说明:加法 + ,减法 - ,乘法 *,除法 /,幂运算 ^(1/2)表示平方根 ^2表示平方。

适用范围:未加密经纬度/加密经纬度

返回顶部

使用的比例级别总共有0-12级共13个级别,他们和实际的比例尺的对应关系分别是:

0级 -------------------- 1:5 000
1级 -------------------- 1:10 000
2级 -------------------- 1:20 000
3级 -------------------- 1:40 000
4级 -------------------- 1:80 000
5级 -------------------- 1:160 000
6级 -------------------- 1:320 000
7级 -------------------- 1:640 000
8级 -------------------- 1:1 280 000
9级 -------------------- 1:2 560 000
10级 ------------------- 1:5 120 000
11级 ------------------- 1:10 240 000
12级 ------------------- 1:20 480 000
13级 ------------------- 1:40 960 000
14级 ------------------- 1:81 920 000

简单的说,0级地图最详细,12级地图最简单。

返回顶部

比例级别定义表

城市代码是某个城市的英文简称,标注在城市名称后面,便于用户记忆,点击查看城市代码表:

城市代码表

2 计算偏移角。

完整的列子如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>无标题页</title>
   
    <script type="text/javascript">
   
    function distanceByLnglat(lng1,lat1,lng2,lat2)
{
    var radLat1 = Rad(lat1);
    var radLat2 = Rad(lat2);
    var a = radLat1 - radLat2;
    var b = Rad(lng1) - Rad(lng2);
    var 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 * 6378137.0;// 取WGS84标准参考椭球中的地球长半径(单位:m)
    s = Math.round(s * 10000) / 10000;

alert(s);

// //下面为两点间空间距离(非球面体)
// var value= Math.pow(Math.pow(lng1-lng2,2)+Math.pow(lat1-lat2,2),1/2);
// alert(value);
}

function Rad(d)
{
    return d * Math.PI / 180.0;
}

</script>
</head>
<body>
    <form id="form1" runat="server">
    <div onclick ="distanceByLnglat(116.95400,39.95400,116.95300,39.95300);">
    test me
    </div>
    </form>
</body>
</html>

根据地球上任意两点的经纬度计算两点间的距离相关推荐

  1. 经纬度互换、换算成米、两点的经纬度计算两点间的距离

    经纬度互换 度(DDD):E 108.90593度    N 34.21630度 如何将度(DDD):: 108.90593度换算成度分秒(DMS)东经E 108度54分22.2秒?转换方法是将108 ...

  2. ArcGIS操作系列14- 经纬度互换、换算成米、两点的经纬度计算两点间的距离

    1. 经纬度互换 度(DDD):E 108.90593度    N 34.21630度 1.1  如何将度(DDD):: 108.90593度换算成度分秒(DMS)东经E 108度54分22.2秒? ...

  3. java获取一定距离以内的经纬度值_java 根据经纬度计算两地间的距离

    现在网站上都流行贴出地理坐标位置,可以看出精度纬度,如果再结合GPS, 就可以定位出用户所在地的经纬度,自然可以计算出大概距离,下面是一段小代码,根据经纬度坐标直接计算出两地间的距离package c ...

  4. 给定经纬度计算距离_根据经纬度计算两地间的距离

    import java.util.HashMap; import java.util.Map; public class MapDistance { private static double EAR ...

  5. JAVA 计算地球上任意两点(经纬度)距离

    /*** 计算地球上任意两点(经纬度)距离* * @param long1* 第一点经度* @param lat1* 第一点纬度* @param long2* 第二点经度* @param lat2* ...

  6. 由经纬度计算地球上任意两点的距离

    由经纬度计算地球上任意两点的距离 在地球上,城市的地理位置.GPS定位.一些地标的地理位置等是由经纬度给出的,本文主要根据两个地理位置的经纬度,来计算两个地理位置之间的距离. %计算城市间距离 zb= ...

  7. 地球经纬度计算两点距离

    现在利用--地球经纬度计算两点的距离--的基本原理计算气辉层所对应的经纬度距离. 基本原理如下: 纬度分为60分,每一分再分为60秒以及秒的小数.没错,60进制,纬度线投射在图上看似水平的平行线,但实 ...

  8. Java根据经纬度计算两点之间的距离

    1. 前言   在我们平时使用美团,饿了么等app进行订餐,或者使用猫眼进行订电影票的时候,都有一个距离的排序,表明该家店距离我们当前的位置,这种基于地理位置的服务,统一被称为LBS(Location ...

  9. 地理大圆距离 C语言,通过经纬度计算两点之间的距离

    2019独角兽企业重金招聘Python工程师标准>>> 项目里有一个需求是计算两台机器之间的距离,有了这两台机器的经纬度,距离就很好计算了. 有一个 球面余弦定律 可以用来可以计算球 ...

最新文章

  1. css 垂直居中的几种方式
  2. QT-- MainWindow外的cpp文件调用ui
  3. asp IIS部署An error occurred on the server when processing the URL错误提示解决
  4. java爬取单张图片
  5. 最新版 Enterprise Library 企业库 V4.1 中文学习手册
  6. python if elif else
  7. Word字体修改(罚抄,抄作业专用)
  8. 第一次用AX2009正式版!
  9. 在Linux上配置xampp后远程访问域名报错
  10. 移动端图片上传老失败
  11. 拓端tecdat|在PYTHON中进行主题模型LDA分析
  12. 《别做“正常”的傻瓜(全新第2版)》
  13. 自然语言处理技术发展简史
  14. Ubuntu下WPS中文字体显示问题
  15. SCC计算机控制,计算机控制系统功能之监督控制-电脑自学网
  16. 浏览器 本地html 图片不显示,网页不显示图片怎么解决?
  17. 【HTML——线条雨落】(效果+代码)
  18. 腾讯云LAMP搭建Discuz 域名解析
  19. 夜刃CTF小组招募志同道合的CTFer
  20. repo init 时提示File “/root/....../.repo/repo/main.py“, line 79

热门文章

  1. 如何导出分离step格式装配体中的零件
  2. 【基金量化研究系列】基金绩效归因模型——Brinson多期归因模型
  3. win10系统解决cmd不是默认管理员打开的办法
  4. js 倒计时写法(三种:倒计时发送,倒计时时间,倒计时可用)
  5. SPARK Ada tools(GNAT Studio)
  6. 硬核测评,谷歌翻译被碾压!全球首个翻译引擎进化归来,“细节狂魔”搞定方言文言文...
  7. JAVA安全编码规范
  8. 政务大数据可视化大屏
  9. Unity 接口对接-MD5加密
  10. NL连接一定是小表驱动大表效率高吗