MySQL中地理距离查询的现代标准过程是什么?

What's the modern standard procedure for geodistance queries in MySQL?

提问人:kael 提问时间:3/19/2013 更新时间:3/19/2013 访问量:145

问:

我在网上搜索了好几天,终于承认失败了。我找不到任何关于使用 mysql 的地理空间距离查询的文章,这些文章比 2011 年年中更新。我已经梳理了 mysql 文档,用谷歌搜索了几个小时,在 SO 中完成了标签搜索和文本搜索......无。

所以问题来了:我需要对 mysql 数据库进行一个非常普通的基于半径的查询。我宁愿使用尽可能少的附加组件,但我会尽我所能。下面是一个示例:

CREATE TABLE `test_locations` (
    `location_id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `locaiton_name` VARCHAR(32) NOT NULL,
    `latlng` POINT NOT NULL
);

SELECT `location_name`, X(`latlng`) as `lat`, Y(`latlng`) as `lng`
FROM `test_locations`
WHERE DISTANCE(PointFromText('POINT(41.78231 -88.712151)'), latlng) < 15;

是的,这在某种程度上是伪代码,因为我还没有看到任何对(工作)mysql 本机函数的引用,但我无法想象在整整 2 年的时间里没有做任何事情。我一定是瞎了......DISTANCE()

提前感谢您的任何见解。

MySQL 地理空间

评论

1赞 Michael Härtl 3/19/2013
究竟是什么让您认为,有一种比 2 年前更“现代”的方法来进行空间查询?我的意思是,如果你做了一些研究,但没有发现任何东西,我会假设,没有关于这个问题的消息。
0赞 Michael Durrant 3/19/2013
是的,例如,这个 stackoverflow.com/questions/4687312/...似乎是一个很好的信息来源,但不符合你的“最近”标准。我不会担心 2 年的衰老。我会担心它是否更像是 8 年。
0赞 kael 3/19/2013
对不起,我不是故意鄙视我的术语。我所说的“现代”只是意味着,在2011年的大部分著作中,根据我读到的大多数帖子,mysql空间扩展仍在积极开发中。但是,我没有找到任何关于从那时起似乎已经实现的功能的著作。从性能的角度来看,“现代”对我来说很重要。与其为每一行处理一个复杂的函数,不如使用某人(比我聪明)专门为此目的设计的索引。

答:

1赞 Paul Gregory 3/19/2013 #1

我想更广泛的问题是,对于一个给定的技术问题,在其他人解决问题之前,人们可以期望在山洞里躲多久?

虽然还没有和我们在一起,但还没有必要休眠 - 尝试使用空间点类型在MySQL中存储Lat Lng值中的“更多后续”下的代码DISTANCE

具有讽刺意味的是,问题实际上是“这是否是面向未来的,或者我将来需要更新它”,而您的问题是“为什么最近没有人发布更新的代码?

评论

0赞 kael 3/19/2013
“更多后续”部分确实是我一直在寻找的。我第一次看到那篇帖子时错过了它。正如我在对原始问题的评论中所说,“现代”意味着一种解决方案,它利用内置优化来完成我认为至少越来越普遍的任务。似乎就是这样。