使用mariaDb,mySQL获取半径范围内的所有空间类型点

时间:2015-01-19 09:37:49

标签: mysql geometry mariadb points radius

这是问题,

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

所以我试着做的是:

获取(lat,ln)中已定义RADIUS的圆圈内的所有空间点KILOMETRES

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

" point S"表看起来像这样:

ID -- POINT -- SOMETEXT

Point是mySql(>5.6) / mariaDb(5.5.40) (lat,lng)

中使用的空间类型点

所以,查询应如下所示:

"SELECT * FROM points WHERE (function... to get distance) <= definedDistance"

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

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

  

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

st_distancedocumented,似乎非常适合您的问题。

参见我的例子,我正在寻找半径为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

输出:

POINT(1 2)
POINT(2 2)