首页 > 解决方案 > 如何使用Haversine公式使用sql语句计算距离内

问题描述

$sql = "SELECT *, ( 6371 * acos( cos( radians(37) ) * cos( radians( ".$_GET["lat"]." ) ) * cos( radians( ".$_GET["lng"]." ) - radians(-122) ) + sin( radians(37) ) * sin( radians( ".$_GET["lat"]." ) ) ) ) AS distance FROM markers HAVING distance < 0.5 ORDER BY distance LIMIT 0 , 1";

根据我对死亡的快速浏览,我意识到我的 $_GET 对于它在做什么没有意义。原来的公式是这样的

SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) ) AS distance FROM markers HAVING distance < 25 ORDER BY distance LIMIT 0 , 20;

我找不到任何关于如何实现这一点的好教程。我只需要知道把它放在哪里!我的纬度和经度..在sql语句中,因此它可以计算彼此周围的IF以组合在一起。

这是我从中获得代码的谷歌教程。

一个成员回答了这个问题..我觉得几乎没有关于如何在sql中使用这个公式的解释..

更新

我不是要抨击。我知道他们解释得很清楚,我只是由于某种原因缺乏理解它的能力。很多道歉链接。

更新

还是有烦恼。我尝试这样调整代码。这样做是否正确?因为我插入了两个相同的地理位置坐标,它们应该组合在一起,但不是。

<?php
    $lat1=$_GET["lat"];
    $lng1=$_GET["lng"];
    $lat2=$grouping[$counter][1];
    $lng2=$grouping[$counter][2];
    $sql = "SELECT id, status, ( 6371 * acos( cos( radians($lat1) ) * cos( radians( $lat2 ) ) 
    * cos( radians( $lng2 ) - radians($lng1) ) + sin( radians($lat1) ) * sin(radians($lat2)) ) ) AS distance FROM markers HAVING distance < 0.5 ORDER BY distance LIMIT 0 , 2;";
?>

标签: phpsql

解决方案


推荐阅读