精华内容
下载资源
问答
  • 经纬度计算距离,经纬度计算距离公式,matlab源码
  • 根据经纬度计算地球上任意两点间的距离,精度高,GUI界面操作简单,小白可直接使用。
  • 实现了根据输入两点经纬度计算这两点距离的函数,但是在实际操作过程中,出现了报错: ValueError: math domain error 下面是测试数据,这部分是正确的数据 print cal_dis(39.762146, -104.98248,...
    #coding: utf-8
    #封装函数
    import math
    def cal_dis(latitude1, longitude1,latitude2, longitude2):
    	latitude1 = (Math.PI/180)*latitude1
    	latitude2 = (Math.PI/180)*latitude2
    	longitude1 = (Math.PI/180)*longitude1
    	longitude2= (Math.PI/180)*longitude2
    	#因此AB两点的球面距离为:{arccos[sinb*siny+cosb*cosy*cos(a-x)]}*R
    	#地球半径
    	global R = 6378.1;
    	d =  math.acos(math.sin(latitude1)*math.sin(latitude2)+\
    		 math.cos(latitude1)*math.cos(latitude2)*math.cos(longitude2-longitude1))*R
    	return d;
    	}

    实现了根据输入两点经纬度,计算这两点距离的函数,但是在实际操作过程中,出现了报错:

    ValueError: math domain error

    下面是测试数据,这部分是正确的数据

    print cal_dis(39.762146, -104.98248,39.758066, -104.902431)
    print cal_dis(39.77455175, -105.01426466666665,39.76241472, -104.90343176000002)
    print "横向一个纬度的距离:",cal_dis(39, -104,40, -104)
    print "纵向一个经度的距离:",cal_dis(39, -105,39, -104)
    print cal_dis(39.772779500000006, -104,39.762146, -104)
    下面是会报错的数据集:

    print "error"
    print cal_dis(-6.174444, 106.829444, -6.174444, 106.82944400000001)
    print cal_dis(59.439339, 24.74682, 59.439339, 24.74682)
    print cal_dis(59.439339, 24.74682, 59.439339, 24.74682)
    print cal_dis(59.439339, 24.74682, 59.439339, 24.74682)
    print cal_dis(37.647464, -77.624973, 37.647464, -77.624973)
    经过搜索相关文章,最终发现是由于acos(x)中的x越界引起的。

    语法

    以下是acos()方法的语法:

    ?
    1
    acos(x)

    注意:此函数是无法直接访问的,所以我们需要导入math模块,然后需要用math的静态对象来调用这个函数。
    参数

    •     x -- 这必须是在范围内的数字值-1到1,如果x大于1,则它会产生一个错误。

    返回值

    此方法返回的X反余弦,以弧度表示。

    解决方案:

    查看越界代码,使用repr将数字转化为字符串显示、查看

    temp = math.sin(latitude1)*math.sin(latitude2)+\
    		 math.cos(latitude1)*math.cos(latitude2)*math.cos(longitude2-longitude1)
    <pre name="code" class="python">temp=math.sin(latitude1)*math.sin(latitude2)+\
    		 math.cos(latitude1)*math.cos(latitude2)*\
    		 math.cos(longitude2-longitude1)
    	print temp,repr(temp)

     发现打印结果是:1.0
     1.0000000000000002 
    

    也就是实际的acos()函数的自变量是1.0000000000000002, 已经超出1的范围,由于精度问题只显示了1.0

    	if temp>1.0:
    		print format(temp,".19e")

    可看出在科学计数法下的输出

    >>1.0000000000000002220e+00

    推导公式本身出问题的机率很小,但计算机中的浮点数舍入误差会放大、缩小数据,从而溢出。因此代码改为:

    #coding: utf-8
    #封装函数
    import math
    def cal_dis(latitude1, longitude1,latitude2, longitude2):
    	latitude1 = (math.pi/180.0)*latitude1
    	latitude2 = (math.pi/180.0)*latitude2
    	longitude1 = (math.pi/180.0)*longitude1
    	longitude2= (math.pi/180.0)*longitude2
    	#因此AB两点的球面距离为:{arccos[sina*sinx+cosb*cosx*cos(b-y)]}*R  (a,b,x,y)
    	#地球半径
    	R = 6378.1
    	temp=math.sin(latitude1)*math.sin(latitude2)+\
    		 math.cos(latitude1)*math.cos(latitude2)*math.cos(longitude2-longitude1)
    	if repr(temp)>1.0:
    		 temp = 1.0
    	d = math.acos(temp)*R
    	return d;	

    展开全文
  • 通过经纬度计算距离公式

    千次阅读 2013-04-02 18:07:58
    原文地址:http://www.storyday.com/html/y2009/2212_according-to-latitude-and-longitude-distance-calculation-formula.html 在去年cosbeta...,这个作用就是根据地球上两点之间的经纬度计算两点之间的直线距离...

    原文地址:http://www.storyday.com/html/y2009/2212_according-to-latitude-and-longitude-distance-calculation-formula.html

    在去年cosbeta曾经发布了一个网页计算工具,这个作用就是根据地球上两点之间的经纬度计算两点之间的直线距离。经纬度到距离的计算在通信工程中应用比较广泛,所以cosbeta通过搜索找到了一个js的计算脚本(其实是google map的计算脚本,应该算是比较准确了),做成了这个经纬度算距离的工具

    今天有人给cosbeta发邮件,询问计算的公式是什么样的。其实,若是把地球当作一个正常的球体(其实它是椭球)来说,球面两点之间的距离计算并不复杂,运用球坐标很容易就能计算出两点之间的弧长。当然这都是高中的知识,我和你一样,也没有那个耐心来将其推导,所以我就利用google map的经纬度到距离计算的js脚本,将球面弧长的公式给还原出来(估计这个公式是经过部分修正的),还原出来的公式如下:

    对上面的公式解释如下:

    公式中经纬度均用弧度表示,角度到弧度的转化应该是很简单的了吧,若不会,依然请参考这个这个经纬度算距离的工具

    Lat1 Lung1 表示A点经纬度,Lat2 Lung2 表示B点经纬度;

    a=Lat1 – Lat2 为两点纬度之差  b=Lung1 -Lung2 为两点经度之差;

    6378.137为地球半径,单位为公里;

    计算出来的结果单位为公里;

    哪位朋友若发现公式错误,请一定要留言指正哦!

    展开全文
  • 根据经纬度计算距离 /** * 根据两点间经纬度坐标,计算两点间距离,单位:千米 * @param lng1 * @param lat1 * @param lng2 * @param lat2 */ function getdistance($lng1,$lat1,$lng2,$lat2){ //...

    根据经纬度计算距离

    1.   
    2.     /** 
    3.      * 根据两点间经纬度坐标,计算两点间距离,单位:千米 

    4.      * @param lng1 
    5.      * @param lat1 
    6.      * @param lng2
    7.    * @param lat2
    8.      */  
    9. function getdistance($lng1,$lat1,$lng2,$lat2){  
          //将角度转为狐度  
          $radLat1=deg2rad($lat1);//deg2rad()函数将角度转换为弧度  
          $radLat2=deg2rad($lat2);  
          $radLng1=deg2rad($lng1);  
          $radLng2=deg2rad($lng2);  
          $a=$radLat1-$radLat2;  
          $b=$radLng1-$radLng2;  
          $s=2*asin(sqrt(pow(sin($a/2),2)+cos($radLat1)*cos($radLat2)*pow(sin($b/2),2)))*6378.137*1000;  
          return $s;  

     

    sql   查询

     

    1. SELECT  
    2.     es_name,  
    3.     es_lon,  
    4.     es_lat,  
    5.     ROUND(  
    6.         6378.138 * 2 * ASIN(  
    7.             SQRT(  
    8.                 POW(  
    9.                     SIN(  
    10.                         (  
    11.                             30.611842 * PI() / 180 - es_lat * PI() / 180  
    12.                         ) / 2  
    13.                     ),  
    14.                     2  
    15.                 ) + COS(30.611842 * PI() / 180) * COS(es_lat * PI() / 180) * POW(  
    16.                     SIN(  
    17.                         (  
    18.                             104.074666 * PI() / 180 - es_lon * PI() / 180  
    19.                         ) / 2  
    20.                     ),  
    21.                     2  
    22.                 )  
    23.             )  
    24.         ) * 1000  
    25.     ) AS distance_um  
    26. FROM  
    27.     c_ershuai  
    28. ORDER BY  
    29.     distance_um ASC  

     

    展开全文
  • SQL SERVER 根据地图经纬度计算距离及其公式如下,需要的朋友可以参考下
  • 经纬度计算距离

    2015-06-08 15:26:16
    公式法将经纬度换算成距离,批量输出点与点之间的球面距离
  • select 12756274*asin(Sqrt(power(sin((36.793-domlat)*0.008726646),2) + Cos(36.793*0.0174533)*Cos(domlat*0.0174533)*power(sin((118.041-domlon)*0.008726646),2))) as distance from dominfo order by ...
    select 12756274*asin(Sqrt(power(sin((36.793-domlat)*0.008726646),2) + Cos(36.793*0.0174533)*Cos(domlat*0.0174533)*power(sin((118.041-domlon)*0.008726646),2))) as distance
     from dominfo 
    order by distance;

    展开全文
  • 在去年cosbeta曾经发布了一个网页计算工具,这个作用就是根据地球上两点之间的经纬度计算两点之间的直线距离。经纬度到距离的计算在通信工程中应用比较广泛,所以cosbeta通过搜索找到了一个js的计算脚本(其实是...
  • 在E2单元格输入公式=6371004*ACOS(1-(POWER((SIN((90-B2)*PI()/180)*COS(A2*PI()/180)-SIN((90-D2)*PI()/180)*COS(C2*PI()/180)),2)+POWER((SIN((90-B2)*PI()/180)*SIN(A2*PI()/180)-SIN((90-D2)*PI()/180)*SIN(C2*...
  • 经纬度计算距离公式: 其中: 1、Lung1 Lat1表示A点经纬度, Lung2 Lat2表示B点经纬度; 2、a=Lat1 – Lat2 为两点纬度之差 b=Lung1 -Lung2 为两点经度之差; 3、6378.137为地球半径,单位为千米; 4、计算出来的...
  • 原文地址:http://www.storyday.com/html/y2009/2212_according-to-latitude-and-longitude-distance-calculation-formula.html 在去年cosbeta...,这个作用就是根据地球上两点之间的经纬度计算两点之间的直线距离...
  • 应用于计算两个经纬度点之间的直线距离公式计算经度在30米以内
  • 原文地址:http://blog.chinaunix.net/space.php?uid=22363424&do=blog&cuid=2108521 2009-02-13 11:14:40 发表于电子技术 本文链接: 通过经纬度计算距离公式 在去年cosbeta曾经发布了一个网页计算工具,这个作用...
  • 根据经纬度计算距离公式 图片来自互联网 对上面的公式解释如下: Lung1 Lat1表示A点经纬度, Lung2 Lat2表示B点经纬度; a=Lat1 – Lat2 为两点纬度之差 b=Lung1 -Lung2 为两点经度之差; 6378.137为地球半径,...
  • 已知两点经纬度,自动计算距离。在表格分别输入两点的经度、纬度,即可计算出这两个点之间的距离长度。已知两点经纬度,自动计算距离。在表格分别输入两点的经度、纬度,即可计算出这两个点之间的距离长度。
  • Java根据位置获取经纬度计算距离1. 业务概述2. 原理分析3. 实现验证3.1 高德地理位置信息 GeoLocation3.2 通过经纬度计算距DistanceUtils3.3 根据位置计算距离GeoDistance 1. 业务概述 平时我们在使用美团,饿了么,...
  • cuid=2108521 2009-02-13 11:14:40 发表于电子技术 本文链接: 通过经纬度计算距离公式 在去年cosbeta曾经发布了一个网页计算工具,这个作用就是根据地球上两点之间的经纬度计算两点之间的直线距离。经纬度到距离的...
  • 今天在使用PostgreSQL的PostGIS功能来实现根据经纬度计算距离和计算某一经纬度附近X米之内的地点,实现SQL语句如下: 计算两经纬度之间距离: select ST_Distance(ST_GeomFromEWKT('SRID=4326;POINT(lng1 lat1)'),ST...
  • 根据两点经纬度计算距离

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,550
精华内容 1,420
关键字:

经纬度计算距离公式