zoukankan      html  css  js  c++  java
  • MySQL创建根据经纬度计算距离的函数

    按照经纬度计算距离

           日常开发中,特别是做微信项目时,经常会遇到根据用户地理位置来展示附近商家的功能,通常解决这种问题的思路是,后台设置商家的经纬度,然后再根据前台传的经纬度进行计算,具体经纬度转换以及前台如何获取,本篇不做详细介绍,可以使用php类方法计算,也可以通过sql语句来计算,在此,主要是介绍利用MySQL创建一个函数,然后在sql语句中使用

     

    创建函数:lat_lng_distance(),单位:km,并已截取小数点2位

    1 CREATE FUNCTION `lat_lng_distance` (lat1 FLOAT, lon1 FLOAT, lat2 FLOAT, lon2 FLOAT)
    2 RETURNS FLOAT
    3 DETERMINISTIC
    4 BEGIN
    5     RETURN ROUND(6378.138 * 2 * ASIN(SQRT(POW(SIN((lat1 * PI() / 180 - lat2 * PI() / 180) / 2), 2)
    6            + COS(lat1 * PI() / 180) * COS(lat2 * PI() / 180)
    7            * POW(SIN(( lon1 * PI() / 180 - lon2 * PI() / 180 ) / 2),2))),2);
    8 END

     

    创建完成,然后再在sql语句中调用即可,下面是截图

    1 $shops = Db::name('user')
    2   ->field('id,shop_name,shop_address,avatar,average_consume,discount,lat_lng_distance('.$lat.','.$lon.',lat,lon) as distance,get_shop_avg_star(id) as star')
    4   ->where($where)
    5   ->page($page,10)
    6   ->order('distance asc')
    7   ->select()->toArray();

    其中,$lat,$lon是前台传过来的参数;

    多学、 多记、 多练、
  • 相关阅读:
    numpy数组(一)
    Iterator和Iterable区别:
    jupyter notebook安装相关问题
    Selenium+Headless Firefox配置
    最长不重复子串
    deprecated conversion from string constant to 'char*
    c++求字符串
    原型模式(Prototype)
    工厂方法模式(Factory Method)
    素数序列的生成及其应用(采用了自研的高效算法)
  • 原文地址:https://www.cnblogs.com/cyfblogs/p/9525026.html
Copyright © 2011-2022 走看看