加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

使用纬度,经度和半径在PHP和MySQL中进行地理围栏

发布时间:2020-12-13 17:26:09 所属栏目:PHP教程 来源:网络整理
导读:我有一个 MySQL表,列有纬度,经度,userId和半径.当用户提供他当前的位置(纬度,长度)以及半径时,我想查询该表以基于两个半径向他提供重叠位置. 例如,如果用户给我一个12.5的纬度;经度73.5,半径5英里;我应该能够检索MySQL表中两个半径重叠的所有条目. 我最初的
我有一个 MySQL表,列有纬度,经度,userId和半径.当用户提供他当前的位置(纬度,长度)以及半径时,我想查询该表以基于两个半径向他提供重叠位置.

例如,如果用户给我一个12.5的纬度;经度73.5,半径5英里;我应该能够检索MySQL表中两个半径重叠的所有条目.

我最初的想法是为数据库中的每个lat创建一个边界框(基于半径),然后根据此边界框查询传入的位置详细信息.这种方法是否正确?如果我走这条路,有什么我应该关注的吗?任何指导我正确方向的帮助将不胜感激.

PS:以下链接是我用作参考的.

http://janmatuschek.de/LatitudeLongitudeBoundingCoordinates

解决方法

像这样的东西应该做的伎俩:

SELECT 
    *
FROM
    YOUR_TABLE
WHERE
    SQRT((input_lat - db_lat) * (input_lat - db_lat) + (input_long - db_long) * (input_long - db_long)) <= input_radius

我用过这个:Distance between two points

只有一件事:将半径转换为与坐标相同的单位

链接的内容(如果它下降)

这个小操作计算两点之间的距离.该例程可以在任意数量的维度上工作,因此您可以将其冷应用于2D或3D.

在2D中
定义你的两点.点1在(x1,y1),点2在(x2,y2).

xd = x2-x1
yd = y2-y1
Distance = SquareRoot(xd*xd + yd*yd)

在3D中
定义你的两点.点1在(x1,y1,z1)和点2在(x2,y2,z2).

xd = x2-x1
yd = y2-y1
zd = z2-z1
Distance = SquareRoot(xd*xd + yd*yd + zd*zd)

如您所见,这需要您执行平方根.如果你想编写快速代码,应该像瘟疫一样避免平方根.如果你真的需要,只执行平方根.

避免方根的方法:
如果您不需要非常精确的距离,则可以使用查找表来计算它.

例如,如果您在球体之间执行碰撞检测,并且您想要知道的是两个是否发生碰撞,那么您不需要使用平方根.只需更改一段代码即可

从:????如果SquareRoot(xdxd ydyd)<直径 至:????if(xdxd ydyd)< (直径*直径)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读