【问题标题】:fastest way to find geo points within a range in mysql在mysql中查找范围内地理点的最快方法
【发布时间】:2013-05-04 20:17:51
【问题描述】:

我想查询给定点半径 500 米范围内所有可能的街道名称。 多个帖子使用 Haversine 公式 或它的某个版本引用了 google 商店定位器示例。 但我也遇到了一些具有更简化的解决方案的帖子。

他们只是将点视为 x,y 坐标,方法是添加到 lat 和 long 变量,如下所示。

如果这将是 查询 mysql 的最快方法,而不会变得非常复杂并且仍然可以获得良好的结果,我正在徘徊。我还没有很多数据,所以我想知道我是否走在正确的轨道上。 使用这种方法是否有任何缺点或不准确

我不明白这怎么可能是一个半径范围,它看起来更像是一个方向 查询?

Distance = 0.1; // Range in degrees (0.1 degrees is close to 11km)
LatN = lat + Distance;
LatS = lat - Distance;
LonE = lon + Distance;
LonW = lon - Distance;

...Query DB with something like the following:
SELECT *
FROM table_name
WHERE 
(store_lat BETWEEN LatN AND LatS) AND
(store_lon BETWEEN LonE AND LonW)

【问题讨论】:

    标签: mysql geolocation range latitude-longitude


    【解决方案1】:

    您可能想在the GIS site 上提出这个问题。我自己用this answer 解决了类似的问题。我可以看到您提出的解决方案可能会更快,但请注意您的四个点描述的是正方形而不是圆形,因此它不会被视为“半径”。

    【讨论】:

    • 我现在知道该怎么做了,首先使用上面的坐标进行过滤,然后将 Haversine 公式放在 where 子句中。我只需要弄清楚我是否有正确的公式来找到矩形的坐标(向上和向下)。我在其他帖子中看到了计算,上面只是添加/减去半径,这可能不太准确?
    【解决方案2】:

    你可以使用 ElasticSearch,MySQL 总是比 ES 慢。

    【讨论】:

      猜你喜欢
      • 2017-06-08
      • 1970-01-01
      • 1970-01-01
      • 2021-06-20
      • 2012-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多