mysql 5.7 geospatial for geolocation距离查询
mysql 5.7 geospatial for geolocation distance query
我正试图了解 mysql 中的地理空间索引,但我无法让简单的查询正常工作,我认为这是因为我缺乏理解。我基本上是想在我经过的 lat/lon 的 10 英里半径范围内获取一些位置。
table结构非常简单
积分:
名称(可变字符)
位置(点)
目前只有一排
姓名 - "point1" location:POINT(31.5 42.2)
现在我正在尝试以下 sql 我从这里 https://www.percona.com/blog/2013/10/21/using-the-new-mysql-spatial-functions-5-6-for-geo-enabled-applications/
set @lat= 31.5;
set @lon = 42.2;
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(location), name from Points
where st_contains(location, envelope(linestring(point(@rlon1, @rlat1), point(@rlon2, @rlat2))))
order by st_distance(point(@lon, @lat), location) limit 10;
但它 returns 是一个空结果集。有人有任何想法或指示吗?
谢谢
我设法让它工作
我假设 'Point' 对象是经纬度,但据我所知它不是经纬度。所以理论上问题是我在 table 中以错误的方式存储了我的初始 'Point' 坐标值,尽管我认为标准方式是 lat/lon
我正试图了解 mysql 中的地理空间索引,但我无法让简单的查询正常工作,我认为这是因为我缺乏理解。我基本上是想在我经过的 lat/lon 的 10 英里半径范围内获取一些位置。
table结构非常简单
积分: 名称(可变字符) 位置(点)
目前只有一排 姓名 - "point1" location:POINT(31.5 42.2)
现在我正在尝试以下 sql 我从这里 https://www.percona.com/blog/2013/10/21/using-the-new-mysql-spatial-functions-5-6-for-geo-enabled-applications/
set @lat= 31.5;
set @lon = 42.2;
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(location), name from Points
where st_contains(location, envelope(linestring(point(@rlon1, @rlat1), point(@rlon2, @rlat2))))
order by st_distance(point(@lon, @lat), location) limit 10;
但它 returns 是一个空结果集。有人有任何想法或指示吗? 谢谢
我设法让它工作
我假设 'Point' 对象是经纬度,但据我所知它不是经纬度。所以理论上问题是我在 table 中以错误的方式存储了我的初始 'Point' 坐标值,尽管我认为标准方式是 lat/lon