php mysql 经纬度_mysql,php和js根据经纬度计算距离

php mysql 经纬度_mysql,php和js根据经纬度计算距离根据经纬度计算距离公式图片来自互联网对上面的公式解释如下:Lung1Lat1表示A点经纬度,Lung2Lat2表示B点经纬度;a=Lat1–Lat2为两点纬度之差b=Lung1-Lung2为两点经度之差;6378.137为地球半径,单位为千米;计算出来的结果单位为千米,若将半径改为米为单位则计算的结果单位为米。计算精度与谷歌地图的距离精度差不多,相差范围在0.2米以下。参数说明…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

根据经纬度计算距离公式

259ab2f76dfe1a4841da9ded2e7fae5f.png

图片来自互联网

对上面的公式解释如下:

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

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

6378.137为地球半径,单位为千米;

计算出来的结果单位为千米,若将半径改为米为单位则计算的结果单位为米。

计算精度与谷歌地图的距离精度差不多,相差范围在0.2米以下。

参数说明

lng:经度

lat:纬度

地球半径:6378.137(千米)

一般地图上显示的坐标顺序为,纬度在前(范围-90 ~ 90),经度在后(范围-180 ~ 180)

各种语言计算距离的代码

这种计算方式一般都是直线距离

sql语句

SELECT

*,

6378.138 * 2 * ASIN(

SQRT(

POW(

SIN(

(

‘.$lat.’ * PI() / 180 – lat * PI() / 180

) / 2

), 2

) + COS(‘.$lat.’ * PI() / 180) * COS(lat * PI() / 180) * POW(

SIN(

(

‘.$lng.’ * PI() / 180 – lng * PI() / 180

) / 2

), 2

)

)

) *1000 AS distance

FROM

distance

ORDER BY

distance ASC

php计算距离

/**

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

* @param $lng1

* @param $lat1

* @param $lng2

* @param $lat2

* @return int

*/

public static 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;

}

js求距离的方法

/**

* 转换弧度

* @param d

* @returns {number}

*/

function getRad(d){

var PI = Math.PI;

return d*PI/180.0;

}

/**

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

* @param lng1

* @param lat1

* @param lng2

* @param lat2

* @returns {number|*}

* @constructor

*/

function CoolWPDistance(lng1,lat1,lng2,lat2){

var f = getRad((lat1 + lat2)/2);

var g = getRad((lat1 – lat2)/2);

var l = getRad((lng1 – lng2)/2);

var sg = Math.sin(g);

var sl = Math.sin(l);

var sf = Math.sin(f);

var s,c,w,r,d,h1,h2;

var a = 6378137.0;//The Radius of eath in meter.

var fl = 1/298.257;

sg = sg*sg;

sl = sl*sl;

sf = sf*sf;

s = sg*(1-sl) + (1-sf)*sl;

c = (1-sg)*(1-sl) + sf*sl;

w = Math.atan(Math.sqrt(s/c));

r = Math.sqrt(s*c)/w;

d = 2*w*a;

h1 = (3*r -1)/2/c;

h2 = (3*r +1)/2/s;

s = d*(1 + fl*(h1*sf*(1-sg) – h2*(1-sf)*sg));

if(s >= 1000 && s <= 99000){

var kilometer = s/1000;

s = kilometer.toFixed(1) + ‘km’;

}else if(s > 99000){

s = ‘>99km’;

}else{

s = Math.round(s) + ‘m’;

}

// s = s/1000;

// s = s.toFixed(2);//指定小数点后的位数。

return s;

}

以上代码大部分来自网上收集,经过验证过的,可以使用

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/190354.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • javaquartz定时任务设置时间,太牛了![通俗易懂]

    javaquartz定时任务设置时间,太牛了![通俗易懂]前言其实前几篇文章已经写了好多有关于Spring源码的文章,事实上,很多同学虽然一直在跟着阅读、学习这些Spring的源码教程,但是一直都很迷茫,这些Spring的源码学习,似乎只是为了面试吹逼用,我大概问过一些同学,很多同学看了很长时间的Spring但是依旧不知道如何将这些学到的知识运用到实际的案例上!其实这个问题很好解决,如果你在开发中很少能够遇见需要Spring扩展时,不妨把目光放到一些依托于Spring的项目,看看它们是如何运用Spring的扩展点的。对于Spring的学习,我认为最终真正学会的

  • 在 CentOS 7.3 上安装 nginx 服务为例,说明在 Linux 实例中如何检查 TCP 80 端口是否正常工作…

    在 CentOS 7.3 上安装 nginx 服务为例,说明在 Linux 实例中如何检查 TCP 80 端口是否正常工作…

    2021年10月18日
  • webservice框架有哪些_webservice框架发布方式

    webservice框架有哪些_webservice框架发布方式毕业了,一直更新技术博客,也跳槽到一家上市的公司,他们产品的主要通讯是通过Webservice,以前对Webservice只是做了大致的了解,今天就在网上找一些开源的知识点,现在市面上主流的夸平台传送有JSON和SOAP两种数据格式,总结一下。以下转自至 http://yulimin.iteye.com/blog/128498新一代的WebServices框架如Axis2、CXF都

  • 位运算符按位取反_计算机基础常见问题讨论

    位运算符按位取反_计算机基础常见问题讨论程序中的所有数在计算机内存中都是以二进制的形式储存的。位操作是程序设计中对位模式或二进制数的一元和二元操作。在许多古老的微处理器上,位运算比加减运算略快,通常位运算比乘除法运算要快很多。在现代架构中,情况并非如此:位运算的运算速度通常与加法运算相同(仍然快于乘法运算)。(摘自维基百科)位运算对CPU很友好,是一种程序优化手段,也是大厂面试中常常会提及的话题。在日常的编程中用到为运算,也是可以实现许…

  • Gridview导出为Excel

    Gridview导出为Excel1.由于gridview的内容可能是分页显示的,因此,这里在每次导出excel时,先将gridview的allowpaging属性设置为false,然后databind()一下,确保搂到所有数据;2.

  • hpStorm 10.0.1 激活码[在线序列号]

    hpStorm 10.0.1 激活码[在线序列号],https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号