Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 查询地理位置附近的事物?_Mysql_Geolocation_Geo - Fatal编程技术网

Mysql 查询地理位置附近的事物?

Mysql 查询地理位置附近的事物?,mysql,geolocation,geo,Mysql,Geolocation,Geo,我有一个查询,它试图在某个地理位置内找到东西,但返回的结果有点。。。奇怪 我之前发布过这个帖子,社区帮我找到了一个我需要的公式:但是现在查询结果真的很奇怪 我的数据是在旧金山市的LAT/LNG代码> 37.780182,-122.517349 < /COD> < /P>。 查询: SELECT id, hike_title, lat, lng, ( 3959 * acos( cos( radians(37) ) * c

我有一个查询,它试图在某个地理位置内找到东西,但返回的结果有点。。。奇怪

我之前发布过这个帖子,社区帮我找到了一个我需要的公式:但是现在查询结果真的很奇怪

我的数据是在旧金山市的LAT/LNG代码> 37.780182,-122.517349 < /COD> < /P>。 查询:

SELECT
    id,
    hike_title,
    lat,
    lng,
    ( 3959 * acos(  cos( radians(37) )
                  * cos( radians( lat ) )
                  * cos( radians( lng ) - radians(37.780182) )
                  + sin( radians(-122.517349) ) * sin( radians( lat ) )
                 )
    ) AS distance
FROM
    my_awesome_table
HAVING
    distance < 10000
ORDER BY
    distance
LIMIT
    0 , 50

因此,现在查询返回了许多英里以外的所有项目,但没有返回100英里以下的项目。就像这件物品(37.787144,-122.493263)从未被退回,即使它离出发点只有50英里。你知道为什么吗?

我想你颠倒了你的中心点的纬度(37.780182)和经度(-122.517349),试试:

select
    id,
    hike_title,
    lat,
    lng,
    ( 3959 * acos(  cos( radians(37) )
                  * cos( radians( lat ) )
                  * cos( radians( lng ) - radians(-122.517349) )
                  + sin( radians(37.780182) ) * sin( radians( lat ) )
                 )
    ) AS distance
FROM
    my_awesome_table
HAVING
    distance < 10000
ORDER BY
    distance
LIMIT
    0 , 50
选择
身份证件
你的头衔,
拉特,
液化天然气,
(3959*acos(弧度(37))
*cos(弧度(纬度))
*cos(弧度(液化天然气)-弧度(-122.517349))
+sin(弧度(37.780182))*sin(弧度(纬度))
)
)作为距离
从…起
我的桌子太棒了
有
距离<10000
订购人
距离
极限
0, 50

为什么不使用MySQL的空间扩展来提供这类功能?请通读其中的一些主题。我还不确定自己是否理解得太透彻,但对于我的需求来说,这似乎有些过头了。它是否使查询速度更快?你认为这比我们在这篇文章中讨论的解决方案好得多吗?谢谢如何将距离转换为米?
    lat          lng    
| 37.223465 | -122.090363 |
| 39.320980 | -111.093735 |
| 38.031715 |  -84.495132 |
| 37.787144 | -122.493263 |
| 52.975361 |   -1.458620 |
| 40.848557 | -111.906883 |
| 40.572498 | -111.859718 |
select
    id,
    hike_title,
    lat,
    lng,
    ( 3959 * acos(  cos( radians(37) )
                  * cos( radians( lat ) )
                  * cos( radians( lng ) - radians(-122.517349) )
                  + sin( radians(37.780182) ) * sin( radians( lat ) )
                 )
    ) AS distance
FROM
    my_awesome_table
HAVING
    distance < 10000
ORDER BY
    distance
LIMIT
    0 , 50