2

假设我想找到离我最近的 20 家企业。稍后我想查看下一个最接近的 20 个,等等。是的,我有 myisam。我有空间索引。我正在寻找我应该发送的实际 SQL 命令。

说清楚:

笔记:

  1. 我正在使用mysql myisam空间索引。我来回浏览谷歌,并没有发现我的确切需求。
  2. 我不想计算整个表的距离(这太低效了)。空间索引的重点是至少你可以有效地去除很多点。如果您左侧和上方的某些点不符合条件,那么该点左侧和上方的所有点也不符合条件。
  3. 我不想计算任何仍然低效的区域的距离。我感兴趣的区域是 10 公里,那里有 65,000 家企业。
  4. 我不介意计算合理数量的点的距离,因为我想按距离对点进行排序并能够显示点 1-20、21-40、41-60 等。
  5. 我为postgis找到了一种方法http://blog.opengeo.org/2011/09/28/indexed-nearest-neighbour-search-in-postgis/我想要类似的东西,但对于mysql myisam。
  6. 我想要一个以实际 sql 代码作为示例或实际示例 sql 命令的网站。所以请不要只说“使用空间”。呃。我知道。我想要实际的 sql 命令。
  7. 我不想先搜索一个小区域的复杂循环。必须有一个 sql 命令可以通过 mysql 引擎有效地一次性完成此操作。
  8. 笛卡尔距离很好。除非您在北极或南极,否则无需知道我们生活在一个地球上,这不是我们大多数客户所在的地方。

有 160 万家企业。当然,计算所有它们的距离然后对其进行排序是愚蠢的。

这就是地理空间索引发挥作用的地方吗?

那么我需要发送什么 SQL 命令呢?

4

1 回答 1

2

由于我无法对您的问题发表评论,我想我将不得不将此作为答案。

看这个问题:

https://gis.stackexchange.com/questions/22082/how-can-i-use-r-tree-to-find-points-within-a-distance-in-spatialite

稍微查看一下文档,MyIsam 提供的功能似乎没有很好的方法来做到这一点。

于 2012-06-21T05:53:13.360 回答