MySQL提供了一系列的函数来帮助我们处理空间对象之间的关系,如 ST_Intersects、ST_Contains 等。这些函数可以帮助我们判断空间对象之间的位置关系,并在此基础上执行相应的查询。
在实际应用中,需要查询某个区域(多边形)内的所有的点。可以使用ST_CONTAINS 函数来实现这个需求
CREATE TABLE `spots` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
`name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '名称',
`lat` decimal(24,6) NOT NULL COMMENT '纬度',
`lon` decimal(24,6) NOT NULL COMMENT '经度',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
INSERT INTO wg_for_test.spots (id, name, lat, `long`) VALUES(1, '111', 36.83704214, 117.15803146);
INSERT INTO wg_for_test.spots (id, name, lat, `long`) VALUES(2, '222', 36.6718611, 117.13391304);
SELECT
*
FROM
spots s
WHERE
ST_CONTAINS(ST_GeomFromText('POLYGON((36.8588150600 117.0421600300, 36.8565487700 117.2181129500, 36.7488396900 117.1599519300, 36.7642261500 117.0372676800, 36.8588150600 117.0421600300))'),
POINT(s.lat,
s.lon));
https://blog.51cto.com/u_16213716/7209198