MySQL选择地理位置范围内的行

Posted

技术标签:

【中文标题】MySQL选择地理位置范围内的行【英文标题】:MySQL select rows in Geolocation range 【发布时间】:2020-10-17 21:07:05 【问题描述】:

背景信息:我正在制作一个应用程序(学校项目),用户可以在其中搜索附近的项目。我的应用使用存储所有项目数据的项目表。

我需要获取用户当前位置(51.337036、4.645095)一定直径(5km)内的行。在 Items 表中,有一列用于定位项目的纬度和经度。

在我当前的查询中,我可以选择正方形中的行(4 个坐标点),但我需要一个球体:

WHERE (C.latitude BETWEEN 50 AND 52) AND (C.longitude BETWEEN 3 AND 5)

是否可以使用 mysql Geolocation 变量或函数?

经过一番研究,我看到了 POINT 类型,但我的表没有那种类型(表需要保持不变)。

【问题讨论】:

距离什么2公里,你需要一个起点才能得到距离 是的,原点将由代码提供。 【参考方案1】:

在评论中说你必须有一个有效的原点

WHERE st_distance_sphere(POINT(-82.337036, 29.645095 ), POINT(C.`longitude`, C.`latitude` ))/1000 <= 2  AND T.difficulty = 1 AND T.terrain = 2;

这将为您提供与 POINT(-82.337036, 29.645095) 最大距离为 2 公里的所有行

你必须把你自己的位置

【讨论】:

我需要在选择部分添加st_distance_sphere吗?现在我收到一个错误,说 st_distance_sphere 是未知的。 @tmach dev.mysql.com/doc/refman/5.7/en/… @Massa 我检查了链接,但工作室仍然显示错误('POINT' 不是可识别的内置函数名称) sam for ST_Distance_Sphere。 请添加解决问题的代码,您可以在任何需要它的地方使用 st_distance_sphere 进行计算,但正如我在答案中提到的那样,您需要一个有效的原点 这里也是函数的一个例子***.com/a/60067302/5193536

以上是关于MySQL选择地理位置范围内的行的主要内容,如果未能解决你的问题,请参考以下文章

iOS - 获取当前邮政编码 X 英里内的位置?

显示用户在PHP中当前位置的10公里半径范围内的用户

在mySQL中测量半径内位置的正确方法是啥?

如何从特定小时范围内的行中选择最小值?

excel查找一段时间内的数据

如何在 Flutter 中自动滚动到 SingleChildScrollView 内的行的位置