【发布时间】:2020-04-09 18:12:47
【问题描述】:
在 MySQL 5.7 中有一个名为 ST_Distance_Sphere 的函数,可用于查找半径内的点,例如:
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 ("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));
如果我们想查看距离巴黎市中心卢浮宫不到 10 公里的所有点,我们可以这样做:
SELECT name FROM places
WHERE ST_Distance_Sphere(coordinates, POINT(48.861105, 2.335337)) < 10000
但 MariaDB 10.1+ 不支持此类功能
如何在 MariaDB 中重新创建相同的函数或重新创建相同的查询。以下帖子显示了一种重新创建相同函数FUNCTION ST_Distance_Sphere does not exist in MariaDB?
的方法也许是这样的?
SELECT name FROM places
WHERE ST_Within(
coordinates, ST_Buffer(POINT(48.861105, 2.335337), 10000)
);
任何帮助表示赞赏。
【问题讨论】:
-
观看次数第二多的问题和投票第二高的MDEV-13467。大声抱怨。
-
@danblack 以下帖子中显示的功能是否正确? stackoverflow.com/questions/44409012/…
-
@danblack 我需要一个临时解决方案,因为该功能请求需要很长时间,然后必须等到托管服务提供商提供新的数据库版本。
-
我其实不知道。我会使用dbfiddle.uk/?rdbms=mysql_8.0 与一些MySQL 进行核对。理解迫切的需要。向您的服务提供商或 MariaDB 请求改进的少量时间是对提高软件可维护性的投资。
-
对 MariaDB 的定向捐赠可能会将jira.mariadb.org/browse/MDEV-13467 的优先级提高。
标签: mysql geometry mariadb geospatial