zoukankan      html  css  js  c++  java
  • 从数据库读取某经纬度附近5km的地点, 根据经纬度查询附近景点及排序(示例代码)


    网络上有经纬度计算工具代码,但考虑到数据量大一个一个遍历计算,导致效率低
    1:直接sql查询 参考②
    2:使用用Redis的GEO功能,实现位置查询,详情@

    --------------------------------------------------------------

    $slat = $banner_content['jd'];
    $slng = $banner_content['wd'];

    $sql = "select *, acos(
    sin(($slng*3.1415)/180) * sin((wd*3.1415)/180) +
    cos(($slng*3.1415)/180) * cos((wd*3.1415)/180) * cos(($slat*3.1415)/180 - (jd*3.1415)/180)
    )*6370.996 AS juli FROM {$this->model->pre}post where status=1 and cid=29 HAVING juli <= 5";

    $list = $this->model->query($sql);


    数据库字段 jd 经度 wd 纬度

    某点的坐标
    $slat 经度
    $slng 纬度

    -------------------------------------------------------------

    SELECT
    id,
    name,
    ROUND(
    6378.138 * 2 * ASIN(
    SQRT(
    POW(
    SIN(
    (
    #{lat} * PI() / 180 - latitude * PI() / 180
    ) / 2
    ),
    2
    ) + COS(#{lat} * PI() / 180) * COS(latitude * PI() / 180) * POW(
    SIN(
    (
    #{lon} * PI() / 180 - longitude * PI() / 180
    ) / 2
    ),
    2
    )
    )
    ) * 1000
    ) AS
    distance
    FROM scenic
    -- HAVING distance <= #{juli} ORDER BY distance
    limit 0,5

    其中latitude和longitude分别是数据库中对象的一个属性,lat和long则是手机端传来的经纬度,计算出的数值单位是米.

    当然还要考虑分页及其他因素,以及可以用函数调用,这里只记录下距离算法.

     
  • 相关阅读:
    struts2 文件上传
    struts2 前端显示错误信息
    struts2
    struts2 针对类型转换出错的处理
    Beats:使用filebeat传送多行日志multiline
    logstash的output插件
    logstash的mutate插件
    logstash中date的时间处理方式总结
    logstash更新gem源
    logstash的Multiline插件
  • 原文地址:https://www.cnblogs.com/yangsanluo/p/14884716.html
Copyright © 2011-2022 走看看