使用st_within获取半径/圆中的位置

时间:2016-11-14 09:13:15

标签: mysql

我有一张看起来像这样的表

| id | name    | latitude          | langitude          | costLat          | sinLat            | cosLng            | sinLng           | 
| 1  | place 1 | 2.942743912327621 | 101.79377630352974 | 0.99868133582304 | 0.051337992546461 | -0.20438972214917 | 0.97888959616485 | 

参考这个article,使用st_within似乎是一个好主意,以便我在上面的表格中搜索距离给定的5和半径范围内的位置。但我完全不知道该怎么做。

该表是MyISAM,MySQL版本5.6

很抱歉不清楚我的尝试。从文档中提到

  

ST_Within(G1,G2)

     

返回1或0以指示g1是否在空间上在g2内。

所以我的理解是,我们需要将2个参数传递给ST_Within。声音很简单,但当我查看链接文章中的示例查询时,它确实(*注意:我在查询中将形状更改为CIRCLE,因为我的假设是我的形状是CIRCLE因为我正在搜索半径)

set @lat= 37.615223;
set @lon = -122.389979;
set @dist = 10;
set @rlon1 = @lon-@dist/abs(cos(radians(@lat))*69);
set @rlon2 = @lon+@dist/abs(cos(radians(@lat))*69);
set @rlat1 = @lat-(@dist/69);
set @rlat2 = @lat+(@dist/69);

SELECT ASTEXT("CIRCLE"), NAME FROM location_final 
WHERE st_within("CIRCLE", ENVELOPE(LINESTRING(POINT(@rlon1, @rlat1), POINT(@rlon2, @rlat2))))  
ORDER BY st_distance(POINT(@lon, @lat), "CIRCLE") LIMIT  10;

所以看看上面的查询,我的困惑是,纬度和纬度之间的比较发生在哪里?我应该在查询中提到我的列纬度和纬度?

查看给定链接的输出,它显示类似

的内容
+--------------------------------+-------------------------------+
| astext(shape)                  | name                          |
+--------------------------------+-------------------------------+
| POINT(-122.3890954 37.6145378) | Tram stop:Terminal A          |
| POINT(-122.3899 37.6165902)    | Tram stop:Terminal G          |

POINT来自哪里?

0 个答案:

没有答案