我有一张看起来像这样的表
| 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来自哪里?