【发布时间】:2019-12-17 17:17:45
【问题描述】:
我有下表:
CREATE TABLE `places` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(256) DEFAULT NULL,
`coordinates` point DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `places` ( `name`, `coordinates`)
VALUES ("Louvre ", POINT(48.861105, 2.335337));
INSERT INTO `places` ( `name`, `coordinates`)
VALUES ("Eiffel Tower", POINT(48.858271, 2.293795));
INSERT INTO `places` ( `name`, `coordinates`)
VALUES ("Pere Lachaise", POINT(48.861131, 2.394683));
INSERT INTO `places` ( `name`, `coordinates`)
VALUES ("Brooklyn", POINT(40.711089, -73.948391));
我想返回卢浮宫 5 英里范围内的所有地方,应该返回 3 条记录(卢浮宫、埃菲尔铁塔、拉雪兹佩尔)
我运行以下查询,但最终得到所有 4 条记录。我做错了什么?
SET @radius = 5 * 1609.344; -- convert miles to meters
SELECT name, ST_Distance(coordinates,POINT(48.861105, 2.335337)) AS distance
FROM places
WHERE ST_Within(coordinates, ST_Buffer(POINT(48.861105, 2.335337),@radius))
ORDER BY distance ASC
注意:我知道 MySQL 5.7 有 ST_Distance_Sphere() 函数来实现上述功能,但我现在坚持使用 5.6。
任何帮助表示赞赏。
【问题讨论】:
标签: geometry geospatial mysql-5.6