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)