gpt4 book ai didi

php - 如何获得一定半径的地方

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

我有一个事件数据库,每个事件可以举行 3 天,每一天都包含一个邮政编码。

所以数据库看起来像那样(+很多其他字段)

enter image description here

在另一个数据库中,我有一个地理位置信息(邮政编码、纬度、经度)

enter image description here

现在用户可以在那里输入邮政编码和半径,然后会显示该半径内的事件。

问题:

1 - 实现该目标的最佳方法是什么?

心中的解决方案

查看事件中所有可能的邮政编码并将其加入 Geo 表以获取他们的纬度/经度

然后当用户搜索邮政编码时,获取纬度/经度并计算数学方程式以获得该点附近的所有邮政编码。

但我认为就性能而言这不是一个好方法,因为我将不得不对 3000 多个事件应用查询

找到距离代码

  • 使用 MySQL(Haversine 公式)查找附近的位置

    SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin ( radians( lat ) ) ) ) AS 距离FROM 标记距离 < 25按距离 LIMIT 0 , 20 排序;

大家怎么看?

最佳答案

您需要一个 GIS 来执行此操作(并使用空间索引),但 mysql 无法做到这一点 - mysql GIS 功能只能处理矩形。 PostreSQL 支持 GIS。

最简单的实际上是数学表达式。如果您可以使用一些投影坐标(纬度和经度是球坐标),那将是最好的。在此投影坐标系中转换整个数据库,而不是仅使用简单的表达式(无需使用三角函数):

(activity_x - postal_code_x)^2 + (activity_y - postal_code_y)^2 < distance^2

请注意,地球是一个球体,这意味着这仅适用于较小的距离(例如 < 1000 公里)。但无论如何我认为你不需要精确的圆...

关于php - 如何获得一定半径的地方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7041279/

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