`

mysql 下 计算 两点 经纬度 之间的距离 计算结果排序

 
阅读更多
  1. 第一点经纬度:lng1 lat1  
  2.   
  3. 第二点经纬度:lng2 lat2  
  4.   
  5. round(6378.138*2*asin(sqrt(pow(sin( (lat1*pi()/180-lat2*pi()/180)/2),2)+cos(lat1*pi()/180)*cos(lat2*pi()/180)* pow(sin( (lng1*pi()/180-lng2*pi()/180)/2),2)))*1000)  
  6.   
  7.   
  8. 例如:  
  9.   
  10. SELECT store_id,lng,lat, ROUND(6378.138*2*ASIN(SQRT(POW(SIN((22.299439*PI()/180-lat*PI()/180)/2),2)+COS(22.299439*PI()/180)*COS(lat*PI()/180)*POW(SIN((114.173881*PI()/180-lng*PI()/180)/2),2)))*1000) AS juli  
  11. FROM store_info  
  12. ORDER BY juli DESC  
  13. LIMIT 316  
  14.   
  15.   
  16.    
  17.   
  18. 参考资料如下:  
  19.   
  20. http://www.cnblogs.com/ycsfwhh/archive/2010/12/20/1911232.html  
  21.   
  22.    
  23. 根据两点经纬度计算距离  
  24.   
  25. 这些经纬线是怎样定出来的呢?地球是在不停地绕地轴旋转(地轴是一根通过地球南北两极和地球中心的  
  26. 假想线),在地球中腰画一个与地轴垂直的大圆圈,使圈上的每一点都和南北两极的距离相等,这个圆圈  
  27. 就叫作“赤道”。在赤道的南北两边,画出许多和赤道平行的圆圈,就是“纬圈”;构成这些圆圈的线段,  
  28. 叫做纬线。我们把赤道定为纬度零度,向南向北各为90度,在赤道以南的叫南纬,在赤道以北的叫北纬。  
  29. 北极就是北纬90度,南极就是南纬90度。纬度的高低也标志着气候的冷热,如赤道和低纬度地地区无冬,  
  30. 两极和高纬度地区无夏,中纬度地区四季分明。   
  31. 其次,从北极点到南极点,可以画出许多南北方向的与地球赤道垂直的大圆圈,这叫作“经圈”;构成这  
  32. 些圆圈的线段,就叫经线。公元1884平面坐标图年,国际上规定以通过英国伦敦近郊的格林尼治天文台的  
  33. 经线作为计算经度的起点,即经度零度零分零秒,也称“本初子午线”。在它东面的为东经,共180度;  
  34. 在它西面的为西经,共180度。因为地球是圆的,所以东经180度和西经180度的经线是同一条经线。各国  
  35. 公定180度经线为“国际日期变更线”。为了避免同一地区使用两个不同的日期,国际日期变线在遇陆地时  
  36. 略有偏离。   
  37.   每一经度和纬度还可以再细分为60分,每一分再分为60秒以及秒的小数。利用经纬线,我们就可以确定  
  38. 地球上每一个地方的具体位置,并且把它在地图或地球仪上表示出来。例如问北京的经纬度是多少?我们  
  39. 很容易从地图上查出来是东经116度24分,北纬39度54分。在大海中航行的船只,只要把所在地的经度测  
  40. 出来,就可以确定船在海洋中的位置和前进方向。 纬度共有90度。赤道为0度,向两极排列,圈子越小,  
  41. 度数越大。  
  42. 横线是纬度,竖线是经度。   
  43. 当然可以计算,四元二次方程。   
  44. 经度和纬度都是一种角度。经度是个两面角,是两个经线平面的夹角。因所有经线都是一样长,为了度量  
  45. 经度选取一个起点面,经1884年国际会议协商,决定以通过英国伦敦近郊、泰晤士河南岸的格林尼治皇家  
  46. 天文台(旧址)的一台主要子午仪十字丝的那条经线为起始经线,称为本初子午线。本初子午线平面是起  
  47. 点面,终点面是本地经线平面。某一点的经度,就是该点所在的经线平面与本初子午线平面间的夹角。在  
  48. 赤道上度量,自本初子午线平面作为起点面,分别往东往西度量,往东量值称为东经度,往西量值称为西  
  49. 经度。由此可见,一地的经度是该地对于本初子午线的方向和角距离。本初子午线是0°经度,东经度的最  
  50. 大值为180°,西经度的最大值为180°,东、西经180°经线是同一根经线,因此不分东经或西经,而统称  
  51. 180°经线。   
  52.   纬度是个线面角。起点面是赤道平面,线是本地的地面法线。所谓法线,即垂直于参考扁球体表面的线。  
  53. 某地的纬度就是该地的法线与赤道平面之间的夹角。纬度在本地经线上度量,由赤道向南、北度量,向北  
  54. 量值称为北纬度,向南量值称为南纬度。由此可见,一地的纬度是该地对于赤道的方向和角距离。赤道是  
  55. 0°纬线,北纬度的最大值为90°,即北极点;南纬度的最大值为90°,即南极点。  
  56.   
  57. 经纬度互换  
  58.   
  59. 度(DDD):E 108.90593度    N 34.21630度  
  60.   
  61.     如何将度(DDD):: 108.90593度换算成度分秒(DMS)东经E 108度54分22.2秒?转换方法是将108.90593整数位不变取108(度),用0.90593*60=54.3558,取整数位54(分),0.3558*60=21.348再取整数位21(秒),故转化为108度54分21秒.  
  62.   
  63.    同样将度分秒(DMS):东经E 108度54分22.2秒 换算成度(DDD)的方法如下:108度54分22.2秒=108+(54/60)+(22.2/3600)=108.90616度  
  64.   
  65. 因为计算时小数位保留的原因,导致正反计算存在一定误差,但误差影响不是很大。1秒的误差就是几米的样子。GPS车友可以用上述方法换算成自己需要的单位坐标。  
  66.   
  67.    
  68.   
  69.    
  70.   
  71. 经纬度换算成米  
  72.   
  73. 纬度分为60分,每一分再分为60秒以及秒的小数。  
  74.   
  75. 纬度线投射在图上看似水平的平行线,但实际上是不同半径的圆。有相同特定纬度的所有位置都在同一个纬线上。   
  76. 赤道的纬度为0°,将行星平分为南半球和北半球。   
  77. 纬度是指某点与地球球心的连线和地球赤道面所成的线面角,其数值在0至90度之间。位于赤道以北的点的纬度叫北纬,记为N,位于赤道以南的点的纬度称南纬,记为S。  
  78. 纬度数值在0至30度之间的地区称为低纬地区,纬度数值在30至60度之间的地区称为中纬地区,纬度数值在60至90度之间的地区称为高纬地区。  
  79. 赤道、南回归线、北回归线、南极圈和北极圈是特殊的纬线。  
  80. 纬度1秒的长度  
  81. 地球的子午线总长度大约40008km。平均:  
  82. 纬度1度 = 大约111km   
  83. 纬度1分 = 大约1.85km   
  84. 纬度1秒 = 大约30.9m   
  85.   
  86. 根据地球上任意两点的经纬度计算两点间的距离  
  87.   
  88. 地球是一个近乎标准的椭球体,它的赤道半径为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)。那么根据三角推导,可以得到计算两点距离的如下公式:  
  89.   
  90. C = sin(MLatA)*sin(MLatB)*cos(MLonA-MLonB) + cos(MLatA)*cos(MLatB)  
  91.   
  92. Distance = R*Arccos(C)*Pi/180  
  93.   
  94. 这里,R和Distance单位是相同,如果是采用6371.004千米作为半径,那么Distance就是千米为单位,如果要使用其他单位,比如mile,还需要做单位换算,1千米=0.621371192mile  
  95.   
  96. 如果仅对经度作正负的处理,而不对纬度作90-Latitude(假设都是北半球,南半球只有澳洲具有应用意义)的处理,那么公式将是:  
  97.   
  98. C = sin(LatA)*sin(LatB) + cos(LatA)*cos(LatB)*cos(MLonA-MLonB)  
  99.   
  100. Distance = R*Arccos(C)*Pi/180  
  101.   
  102. 以上通过简单的三角变换就可以推出。  
  103.   
  104. 如果三角函数的输入和输出都采用弧度值,那么公式还可以写作:  
  105.   
  106. C = sin(LatA*Pi/180)*sin(LatB*Pi/180) + cos(LatA*Pi/180)*cos(LatB*Pi/180)*cos((MLonA-MLonB)*Pi/180)  
  107.   
  108. Distance = R*Arccos(C)*Pi/180  
  109.   
  110. 也就是:  
  111.   
  112. C = sin(LatA/57.2958)*sin(LatB/57.2958) + cos(LatA/57.2958)*cos(LatB/57.2958)*cos((MLonA-MLonB)/57.2958)  
  113.   
  114. Distance = R*Arccos(C) = 6371.004*Arccos(C) kilometer = 0.621371192*6371.004*Arccos(C) mile = 3958.758349716768*Arccos(C) mile  
  115.   
  116. 在实际应用当中,一般是通过一个个体的邮政编码来查找该邮政编码对应的地区中心的经纬度,然 后再根据这些经纬度来计算彼此的距离,从而估算出某些群体之间的大致距离范围(比如酒店旅客的分布范围-各个旅客的邮政编码对应的经纬度和酒店的经纬度所 计算的距离范围-等等),所以,通过邮政编码查询经纬度这样一个数据库是一个很有用的资源。  
  117. 附:C#代码:  
  118.   
  119. private const double EARTH_RADIUS = 6378.137;//地球半径  
  120. private static double rad(double d)  
  121. {  
  122.    return d * Math.PI / 180.0;  
  123. }  
  124.   
  125. public static double GetDistance(double lat1, double lng1, double lat2, double lng2)  
  126. {  
  127.    double radLat1 = rad(lat1);  
  128.    double radLat2 = rad(lat2);  
  129.    double a = radLat1 - radLat2;  
  130.    double b = rad(lng1) - rad(lng2);  
  131.   
  132.    double s = 2 * Math.Asin(Math.Sqrt(Math.Pow(Math.Sin(a/2),2) +  
  133.     Math.Cos(radLat1)*Math.Cos(radLat2)*Math.Pow(Math.Sin(b/2),2)));  
  134.    s = s * EARTH_RADIUS;  
  135.    s = Math.Round(s * 10000) / 10000;  
  136.    return s;  
  137. }  
分享到:
评论

相关推荐

    MYSQL 关于两个经纬度之间的距离由近及远排序

    为了计算两点之间的球面距离,我们可以使用大圆距离公式,这涉及到三角函数和地球半径的计算。 上述代码中使用了一个近似的计算方法,即Haversine公式。Haversine公式可以计算地球上两点之间的大圆距离,公式如下:...

    腾讯地图行政区域经纬度转Mysql国内地区数据库

    同时,`latitude` 和 `longitude` 字段使得我们可以利用Haversine公式或其他空间距离计算方法,快速估算两个地点之间的直线距离。 其次,`说明.txt` 文件可能是对数据转换过程的详细指南,包括如何导入SQL脚本到...

    使用MySQL的geometry类型处理经纬度距离问题的方法

    2. 计算两点之间的距离(使用地球表面的大圆距离,单位为米): ```sql SELECT ST_Distance_Sphere(POINT(121.590347, 31.388094), location) AS distant FROM map; ``` `ST_Distance_Sphere`函数计算了地球上两点...

    高德mysql信息表:区域名称、城市编码、邮政编码、经纬度、名称拼音

    高德的这个信息表中包含经纬度,意味着可以结合GPS或其他定位系统进行地图展示、距离计算和位置搜索等功能。 “名称拼音”对于中文地址尤其重要,因为许多系统可能无法识别汉字。将地名转换为拼音,有助于非中文...

    全国地铁经纬度

    - **距离查询**:通过计算两点间的距离,找出与某一特定点最近的地铁站。这通常需要用到`Spherical Law of Cosines`或`Haversine Formula`。例如,在MySQL中: ```sql SELECT *, 6371 * acos(cos(radians(目标...

    最新中国行政区划,城市代码,sql文件(含省市区行政编码,邮编,区号,拼音,经纬度坐标)

    在地理信息系统(GIS)中,经纬度坐标用于精确表示地点,是进行地图定位、距离计算和空间分析的基础。本资源中包含的经纬度信息对于开发地图应用、导航系统或进行地理数据分析尤为关键。 6. **层级关系**:中国的...

    PHP查询附近的人及其距离的实现方法

    4. **计算两点之间的距离**: - `getDistanceBetweenPointsNew` 函数实现了根据Haversine公式计算两个经纬度坐标之间的距离。 - 公式利用三角函数和地球半径计算两点间的弧长,再转换为常用的单位(英里、英尺、码...

    全球200多个国家及主要城市,中英文名称,对应关系,经纬度

    在IT中,这些坐标可以与GIS技术结合,用于地图绘制、路径规划、距离计算等功能。例如,它们可以用于在Google Maps或其他在线地图服务上标记出每个城市的位置。 4. **Excel文件格式**:文件名为“国家.xls”和“城市...

    查找城市信息+给出城市名返回其坐标+返回所有距离小于d的城市名

    4. **距离计算**:在二维平面上,两点之间的距离通常使用欧几里得距离公式计算,即 `d = sqrt((x2-x1)^2 + (y2-y1)^2)`,其中(x1, y1)和(x2, y2)分别是两个点的经纬度坐标。在地球表面,由于地球是曲面,实际的距离...

    java实现附近的人功能.zip

    获取到用户的位置后,还需要将其转换为可计算的距离形式,例如使用Haversine公式来计算两个经纬度之间的距离。 2. **数据存储与结构**:用户的位置信息需要存储在数据库中,以便于后续的查询和计算。可以选择关系型...

    J2EE spring mvc mybatis bootstrap HTML5 后台框架 控制台 mysql版本_spring3.0

    【源码】mysql版本_spring3.0 系统模块 1. 组织管理:角色管理,分角色组和成员,有组权限和成员权限。 2. 系统用户:对各个基本的组会员增删改查,单发、群发邮件短信...地图选点获取经纬度坐标,根据俩经纬度计算距离

    利用Java+MySQL实现附近功能实例

    当需要查找附近的地铁站时,我们可以使用球面距离公式来计算两点之间的距离。在Java中,我们可以定义一个`getDistance2`方法来实现这个计算: ```java public static double getDistance2(double long1, double lat...

    全国省市县、邮编、经度纬度.zip

    例如,你可以通过邮编查询对应的行政区域,或者根据经纬度计算两点之间的距离。对于开发地图应用、物流路线规划或进行人口统计分析的应用来说,这些数据是非常宝贵的。 在处理这两个SQL文件时,如果你的环境是MySQL...

    DistanceSearch

    在计算两点之间的距离时,通常会用到Haversine公式或者Vincenty公式,这两个公式可以考虑地球的曲率,从而给出更精确的结果。 PHP实现距离搜索涉及的关键技术包括: 1. 数据库设计:项目可能会利用关系型数据库...

    sqlserver中将varchar类型转换为int型再进行排序的方法

    还有关于SQL多条件多字段排序、根据数字型字段对字符型字段排序、基于经纬度的距离排序、以及MySQL的排序规则utf8_unicode_ci和utf8_general_ci的区别,这些都是数据库管理和查询优化中非常重要的知识点。...

    基于地理位置的大数据分析.pptx

    1. **基础方法**:最直接的方法是计算每个POI(兴趣点)与用户位置之间的球面距离。这涉及到在数据库中执行大量复杂的距离计算,例如使用MySQL的存储过程`distance`。然而,这种方法的复杂度非常高,因为它对所有40...

    JAVA实现空间索引编码——GeoHash的示例

    例如,查找与给定点距离2km内的位置,只需要匹配GeoHash的前8位(在这种情况下,精度约为19米)。 3. **精度与长度**: - GeoHash的长度决定了其精度。更长的字符串意味着更高的精度,更短的字符串则意味着更大的...

    万能后台管理模板javaweb

    15. 地图工具:打开地图, 鼠标点击地图某位置获取经纬度坐标,根据经纬度计算两点距离 16. 打印测试:页面打印预览测试 17. 图片管理:对批量上传的图片统一管理 ,点击放大,可打开多个,自由切换,绚丽预览效果 18...

Global site tag (gtag.js) - Google Analytics