使用几何数据类型的点值创建点
MyISAM 表
在这些点上创建一个空间索引
使用 MBRContains() 查找值:
SELECT *
FROM table
WHERE MBRContains(LineFromText(CONCAT(
'('
, @lon + 10 / ( 111.1 / cos(RADIANS(@lon)))
, ' '
, @lat + 10 / 111.1
, ','
, @lon - 10 / ( 111.1 / cos(RADIANS(@lat)))
, ' '
, @lat - 10 / 111.1
, ')' )
,mypoint)
,或者,在 MySQL 5.1 及更高版本中:
SELECT *
FROM table
WHERE MBRContains
(
LineString
(
Point
(
@lon + 10 / ( 111.1 / COS(RADIANS(@lat))),
@lat + 10 / 111.1
)
Point
(
@lon - 10 / ( 111.1 / COS(RADIANS(@lat))),
@lat - 10 / 111.1
)
),
mypoint
)
这将选择大约在框内的所有点(@lat +/- 10 公里,@lon +/- 10 公里)。
这实际上不是一个盒子,而是一个球面矩形:球体的经纬线段。这可能与弗朗茨约瑟夫地的普通矩形不同,但在大多数有人居住的地方都非常接近。
应用额外的过滤来选择圆圈内的所有内容(不是正方形)
可能应用额外的精细过滤来解决大圆距离(对于大距离)
here following solution to click