gpt4 book ai didi

php - 限制MySQL查询中GPS位置的数量

转载 作者:行者123 更新时间:2023-11-29 07:43:49 29 4
gpt4 key购买 nike

我正在使用以下查询来获取使用其位置的下一个本地事件。我的数据库正在不断增长,我有来自欧洲各地的事件。所以基本上,查询计算两个不同国家(如西类牙和德国)事件的距离,这实际上没有用,因为我正在寻找 20 公里内的下一个事件。

# latitude & longitude are the fields in DB
# 43.57 & 3.85 are given values representing the local test point
SELECT ( 6366 * ACOS( COS( RADIANS( 43.57 ) ) * COS( RADIANS( latitude ) ) * COS( RADIANS( longitude ) - RADIANS( 3.85 ) ) + SIN( RADIANS( 43.57 ) ) * SIN( RADIANS( latitude ) ) ) ) dist
FROM events
HAVING dist >0 AND dist <=20
ORDER BY event_time ASC
LIMIT 0 , 5

所以基本上,这个查询将在能够使用 HAVING 之前获取所有事件的所有距离。 。

还有更好的办法吗?

最佳答案

计算围绕测试点的半径的盒子的四个点的经度和纬度。在几公里的距离内,您可以忽略由于地球曲率造成的误差。

我们可以使用粗略的近似来限制初始搜索,然后再进行细化。在北纬 50 度(大致为巴黎),纬度(北/南)约为 111.229 公里。经度(东/西)大约为 71.695 公里(我从 this page 得到这些数字。从这 20 公里大约是纬度 10.8 秒,经度 16.74 秒。通过从测试点的纬度和经度。

使用经度和纬度查询该框中的位置。

如果您担心边界框可能太大,或者边界框一角的事件位于半径之外,请计算您已识别的点的准确距离,并过滤掉您确定的点不想。

注意这些数字近似于北纬 50 度。当您向北移动时,您的经度公里值将变得太长,而向南移动则将太短。您可以使用一个小的查找值表,或者计算距纬度的实际距离,或者只是增加经度方向上的初始边界框。该框只是第一个近似值,因此只要它比目标区域大,它的确切大小就不太重要。

关于php - 限制MySQL查询中GPS位置的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28387796/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com