php 经纬度 距离排序,php mysql 根据经纬度计算距离和排序

#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.

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

L3Byb3h5L2h0dHBzL3NzMC5iYWlkdS5jb20vNk9OV3NqaXAwUUlaOHR5aG5xL2l0L3U9Mjk3NzUwNTY4OCwyNjg5MjE1NTQmYW1wO2ZtPTU4.jpg

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

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

如果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 = <<

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根据经纬度计算距离并排序

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

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

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

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

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

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

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

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

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

php有经纬度计算距离

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

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

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

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

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

cesium根据经纬度计算距离

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

随机推荐

MariaDB 主从复制的配置

一.安装MariaDB 安装过程省略. 二.主从配置 环境     Master/Slave     系统 IP 数据库版本 Master     CentOS6.7         10.10.3. ...

weui 问题

1.阻止checkbox 被 checked 方法1: $('.weui-check').on('click', function(e){ $(this).attr('disabled', true) ...

使用Linux系统中的SSH服务

使用Linux系统中的SSH服务 1.SSH服务应用场景 ① 可以实现对文件的上传与下载 ② 实现远程管理Linux 2.安装SSH服务器 服 务:sshd 位 置:光盘2 软 件:openssh-s ...

javascript 路线整理

前端开发很重要,编写脚本也不容易. 总结我以前的前端学习经历,基本是一团乱麻:css+javascript是在大三自学的,当时自己做课程设计,逼着自己在一个月之内,写了一个半成品的j2ee网站.当时, ...

(转)MySQL join语法解析与性能分析

文章转载的:http://www.cnblogs.com/BeginMan/p/3754322.html 一.join语法概述 join用于多表中字段之间的联系,语法如下: ... FROM tabl ...

maven多模块依赖源码调试

Maven多模块项目中,通常存在摸个模块同时依赖其他多个基础模块的情况.在eclipse中使用run-jetty-run插件调试时,常常会出现找不到被依赖模块对应源码的错误提示.举个例子,模块A同时依 ...

apiCloud 双击事件

apiCloud 双击事件只能使用纯js去写 var app = new Vue({ el: "#app", data: function() { return { token: ...

javamail模拟邮箱功能--邮件回复-中级实战篇【邮件回复方法】(javamail API电子邮件实例)

引言: JavaMai下载地址l jar包:http://java.sun.com/products/javamail/downloads/index.html 此篇是紧随上篇文章而封装出来的,阅读本 ...

如何修改织梦dedecms文章标题的最大长度

织梦dedecms默认的文章标题的最大长度为60字节,如果文章标题超过60字节将会自动截断,导致标题显示不全,这并非是我们所希望的.那么如何将标题长度改成我们想要的?只需简单两步即可解决问题. 1.进 ...

你可能感兴趣的:(php,经纬度,距离排序)