#1.两点距离(1.4142135623730951)
select st_distance(point(0,0),point(1,1));
select st_distance(point (120.10591, 30.30163),point(120.13026,30.25961)) as distance HAVING distance>0 ORDER BY distance;
mysql 5.6 添加 #2.两点球面距离(157249.0357231545m)
select st_distance_sphere(point(0,0),point(1,1)) as distance HAVING distance>0 ORDER BY distance;
select st_distance_sphere(point (120.10591, 30.30163),point(120.13026,30.25961)) as distance HAVING distance>0 ORDER BY distance;
This function was added in MySQL 5.7.6.

第一个函数是计算平面坐标系下,两点的距离,就是

如果用于计算地球两点的距离,带入的参数是角度(经纬度),则计算的单位也是相差的角度,用此角度计算距离不准。纬度距离约111km每度,经度距离在赤道平面上是111km每度,随纬度的升高逐渐降低为0。

第二个函数是计算球面距离的公式,传入的参数是经纬度(经度-180~180,纬度-90~90),返回的值以m为单位的距离。

ST_Distance_Sphere(g1g2 [, radius])

如果mysql版本不支持上述函数怎么办?自己实现喽!下面是我自己写的球面距离函数

delimiter //
drop function if exists Spherical_Distance;
create function Spherical_Distance(jin1 double,wei1 double,jin2 double,wei2 double) returns double
NO SQL
BEGIN
declare j1 double;
declare w1 double;
declare j2 double;
declare w2 double;
declare R double;
set j1 = jin1*PI()/;
set w1 = wei1*PI()/;
set j2 = jin2*PI()/;
set w2 = wei2*PI()/;
set R = ;
return R*acos(cos(w1)*cos(w2)*cos(j1-j2)+sin(w1)*sin(w2));
END
//
delimiter ;

调用方式

select Spherical_Distance(120.10591,30.30163,120.13026,30.25961);

计算出的值和st_distance_sphere函数计算结果相差不大。

另外的求经纬度距离方法:

  $lat = trim($_POST['lat']);
$lng = trim($_POST['lng']);
$distance = "
ROUND(
6378.138 * * ASIN(
SQRT(
POW(
SIN(
(
'$lat' * PI() / - lat * PI() /
) /
), ) + COS(40.0497810000 * PI() / ) * COS(lat * PI() / ) * POW(
SIN(
(
'$lng' * PI() / - lng * PI() /
) /
), )
)
) * ) AS distance ";
// 内容
$sql = <<<doc
select id,title as shop_name,create_at,master_title,lng,lat,reg_address,province,city,area,address,start_at,end_at,phone,business_name,business_phone,pics,club_id,{$distance}
from jiazhen_shop_info as jsi
where = order by distance ASC,id desc
doc;

php mysql 根据经纬度计算距离和排序的更多相关文章

  1. PHP,Mysql根据经纬度计算距离并排序

    网上给出的计算公式是这样的: Lng1表示A点纬度和经度,Lat2 Lng2 表示B点纬度和经度 a = Lat1 – Lat2为两点纬度之差 b = Lng1 -Lng2 为两点经度之差 6378. ...

  2. MySQL创建根据经纬度计算距离的函数

    按照经纬度计算距离 日常开发中,特别是做微信项目时,经常会遇到根据用户地理位置来展示附近商家的功能,通常解决这种问题的思路是,后台设置商家的经纬度,然后再根据前台传的经纬度进行计算,具体经纬度转换以及 ...

  3. iOS根据2个经纬度计算距离

    #pragma mark - calculate distance 根据2个经纬度计算距离 #define PI 3.14159265358979323 +(double) CalculationDi ...

  4. java工具类(六)根据经纬度计算距离

    Java实现根据经纬度计算距离 在项目开发过程中,需要根据两地经纬度坐标计算两地间距离,所用的工具类如下: Demo1: public static double getDistatce(double ...

  5. python的N个小功能(文本字段对应数值,经纬度计算距离,两个时间点计算时间间隔)

    案例1 >>> import pandas as pd >>> df=pd.DataFrame({'A':[1,2,3],'B':[1,2,3],'C':[1,2, ...

  6. php有经纬度计算距离

    /** *  @desc 根据两点间的经纬度计算距离 *  @param float $lat 纬度值 *  @param float $lng 经度值 */  function getDistanc ...

  7. PHP根据两点间的经纬度计算距离,php两点经纬度计算(转)

    这是一个不错的示例,直接贴代码,首先要知道纬度值.经度值 /** * @desc 根据两点间的经纬度计算距离 * @param float $lat 纬度值 * @param float $lng 经 ...

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

    /** * 说明: 根据两点间的经纬度计算距离 * @param float $lat 纬度值 * @param float $lng 经度值 */ function getDistance($lat ...

  9. cesium根据经纬度计算距离

    var startLatitude = 36;var startLongitude = 120; var endLatitude=34; var endLongitude=121; var start ...

随机推荐

  1. 【解决】挂载NFS服务时,不同共享客户端间的数据不同步

    问题现象 当您用台 ECS 挂载同一个 NFS 文件系统,在 ECS-A 上 append 写文件,在 ECS-B 用 tail -f 观察文件内容的变化.在 ECS-A 写完之后,在 ECS-B 看 ...

  2. 【转】大众点评Cat--架构分析

    https://blog.csdn.net/szwandcj/article/details/51025669 Cat功能强大且多,光日志的报表和图表分析就有十几种,但文档却很少,寥寥无几找到一些粒度 ...

  3. 201671030114 马秀丽 实验十四 团队项目评审&课程学习总结

    项目 内容 作业所属课程 所属课程 作业要求 作业要求 课程学习目标 (1)掌握软件项目评审会流程:(2)反思总结课程学习内容 任务一:团队项目审核已完成.项目验收过程意见表已上交. 任务二:课程学习 ...

  4. php解析xml的几种方式

    php提供几种解析xml的类或方法,包括:Xml parser. SimpleXML,.XMLReader,.DOMDocument. XML Expat Parser: XML Parser使用Ex ...

  5. git 学习记录—— git 中的仓库、文件状态、修改和提交操作等

    最近开始学习使用版本控制工具  git .学习方式主要通过阅读 git 网站上的 Pro git 和动手实践,使用的系统为 Ubuntu16.04LTS,以及 Windows 8.1. 本文主要关注 ...

  6. SparkStreaming运行原理

    Spark Streaming应用也是Spark应用,Spark Streaming生成的DStream最终也是会转化成RDD,然后进行RDD的计算,所以Spark Streaming最终的计算是RD ...

  7. 将表格转化为Latex代码的在线工具

    这个在线工具的网址为:http://www.tablesgenerator.com/latex_tables,好用.

  8. c语言位域的使用注意事项——数据溢出

    c语言可以使用位域来节省变量的空间,例如开关只有通电和断电两种状态,用 0 和 1 表示足以,也就是用一个二进位.位域的取值范围非常有限,数据稍微大些就会发生溢出,这个字使用keil的使用,keil提 ...

  9. MongoDB的安装、基本操作

    此说明文档针对的community版本是v4.2.0(1)下载下载官网,此时的community版本是v4.2.0https://www.mongodb.com/download-center/com ...

  10. ent 基本使用十九 事务处理

    ent 生成的代码中client 提供了比较全的事务处理 启动单个事务进行处理 // GenTx generates group of entities in a transaction. func ...