使用 mariaDb、mySQL 获取半径(以公里为单位)内的所有空间类型点

Jul*_*0sS 5 mysql geometry radius points mariadb

问题就在这里,

已经对此进行了多项研究,但没有找到任何明确且解释良好的解决方案。有些人正在谈论类似st_distance或 之类的函数st_within,它们引用 mysql/mariadb 版本,但这些函数似乎没有真正的文档,并且似乎不适合我的问题。

所以我想做的是:

获取(lat,ln)在 中定义半径的圆内的所有空间点KILOMETRES

用户将给出一个范围在 1 到 100 公里之间的半径,并将收到该半径内的所有数据库记录。

points”表看起来像这样:

ID -- POINT -- SOMETEXT
Run Code Online (Sandbox Code Playgroud)

点是使用的空间类型点mySql(>5.6) / mariaDb(5.5.40) (lat,lng)

所以,查询应该如下所示:

"SELECT * FROM points WHERE (function... to get distance) <= definedDistance"
Run Code Online (Sandbox Code Playgroud)

感谢帮助

Grz*_*ski -1

我不同意你在这里写的内容:

有些人正在谈论像 st_distance 或 st_within 这样的函数,它们引用 mysql/mariadb 版本,但这些函数似乎没有真正的文档,并且似乎不适合我的问题。

st_distance记录并且似乎非常适合您的问题。

请参阅我的示例,其中我正在寻找半径为 1、中心为 (2, 2) 的圆内的点:

CREATE TABLE geom (g GEOMETRY);

INSERT INTO geom VALUES (GeomFromText('POINT(1 1)'));
INSERT INTO geom VALUES (GeomFromText('POINT(1 2)'));
INSERT INTO geom VALUES (GeomFromText('POINT(1 3)'));
INSERT INTO geom VALUES (GeomFromText('POINT(1 4)'));
INSERT INTO geom VALUES (GeomFromText('POINT(2 2)'));
INSERT INTO geom VALUES (GeomFromText('POINT(3 3)'));
INSERT INTO geom VALUES (GeomFromText('POINT(4 4)'));

SELECT AsText(g) from geom where ST_Distance(point(2,2), g) <= 1
Run Code Online (Sandbox Code Playgroud)

输出:

POINT(1 2)
POINT(2 2)
Run Code Online (Sandbox Code Playgroud)

  • 我认为这个答案不正确。MagiaDB ST_Distance 函数看起来像是计算笛卡尔平面上的距离(即简单的 X、Y 计算,而不是纬度、经度)。在这种情况下,该函数不能用于计算 GIS 点之间的距离。请参阅以下内容; (6认同)
  • `设置@p1 =点(90,0); 设置@p2 =点(90,50); select ST_Distance(@p1, @p2);` 距离应为 0,因为两个点都位于北极。函数给出的答案为 50。PS 对于多个评论感到抱歉,我不知道如何添加代码块。 (5认同)