在mysql中查找范围内的地理点的最快方法

时间:2013-05-04 20:17:51

标签: mysql geolocation range latitude-longitude

我想查询给定点的所有可能的半径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)

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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