PHP+Mysql通过计算经纬度查询附近商家

MengDe2年前PHP1938

直接贴方法:

/**
 * @param $model [表名称]
 * @param $lat [用户纬度]
 * @param $lng [用户经度]
 * @param string $where
 * @param int $distance [用户周边范围距离,单位:千米]
 * @param string $latSql [商家的纬度在数据表中的字段名]
 * @param string $lngSql [商家的经度在数据表中的字段名]
 * @return mixed[返回一个数组,包含了查询到的商家信息]
 * 查询附近商家信息
 */
protected static function getLatAndLng($model, $lat, $lng, $where = '', $distance = 5, $latSql = 'merchant_latitude_lat', $lngSql = 'merchant_latitude_lng')
{

    $sql = "SELECT *, ROUND(6378.138*2*ASIN(SQRT(POW(SIN(($lat*PI()/180-$latSql*PI()/180)/2),2)+COS($lat*PI()/180)*COS($latSql*PI()/180)*POW(SIN(($lng*PI()/180-$lngSql*PI()/180)/2),2)))) AS juli  
FROM $model where $where HAVING juli <= $distance";
    $query = Db::query($sql);
    return $query;
}

因为我这里使用的是tp框架所以,直接使用的Db类的query方法

调用方法:

$business = self::getLatAndLng('d_user', $slat, $slng, 'is_merchant =2 AND status = 2');


相关文章

PHP快速将文档转成PDF并获取页数

去年有个功能是实现html转成pdf,这个功能解决办法在:    PHP利用wkhtmltopdf操作今年是打印小程序,用户问别人都能做到?你们怎么做不到?那不...

关于无限极分类另一种操作方式

因为公司需求,需要做一个分销类的商城,需要用到无限极分类,刚开始查找了想用递归但是递归太消耗性能所以听从公司前辈的方法    在用户表分别建立pid字段和pid...

PHP面向对象之多态

PHP面向对象之多态

何为面向对象之多态,且听我细细道来。在PHP开发中,可能对于多态的了解不是很深,但是JAVA不一样,下面是案例,代码注释仔细的讲解了何为多态。<?php /**  * @...

PHP魔术方法简介

<?php namespace Nphp; class Object {     //1.__get/__se...

PHP学习之建立属于自己的PSR规范框架(一)

PHP学习之建立属于自己的PSR规范框架(一)

目录结构:文明名称和目录名称首写字母大写入口文件index的内容:<?php define('APP_PATH',__DIR__); include APP_PAT...

PHP算法之快排算法

快速排序:快速排序(Quicksort)是对冒泡排序的一种改进。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部...