使用表Point
中Geometry
数据类型的值创建点MyISAM
。从Mysql 5.7.5开始,表现在InnoDB
还支持SPATIAL
索引。
SPATIAL
在这些点上创建索引
使用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 km, @lon +/- 10km)
。
实际上,这不是一个盒子,而是一个球形矩形:球体的经度和纬度绑定段。这可能与 上的普通矩形不同,但在大多数人居住的地方都非常接近矩形。
应用其他过滤以选择圆内的所有内容(而不是正方形)
可能应用其他精细过滤以解决大圆距离(对于大距离)