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

在mysql中查找范围内地理点的最快方法,mysql,geolocation,range,latitude-longitude,Mysql,Geolocation,Range,Latitude Longitude,我想查询给定点500米半径范围内所有可能的街道名称。 多篇文章引用了谷歌商店定位器示例,使用了哈弗森公式或其某些版本。 但我也遇到了一些帖子,它们的解决方案要简单得多 他们只是将点作为x,y坐标,通过添加到lat和long变量,如下所示 我想知道这是否是查询mysql的最快的方法,而不会变得非常复杂,并且仍然会得到一个好的结果。我还没有太多的数据,所以我想知道我是否在正确的轨道上。 使用此方法是否有任何缺点或不准确之处 我不明白的是,这怎么可能是半径范围,它看起来更像是单向的 询问 你可能想问这

我想查询给定点500米半径范围内所有可能的街道名称。 多篇文章引用了谷歌商店定位器示例,使用了哈弗森公式或其某些版本。 但我也遇到了一些帖子,它们的解决方案要简单得多

他们只是将点作为x,y坐标,通过添加到lat和long变量,如下所示

我想知道这是否是查询mysql的最快的方法,而不会变得非常复杂,并且仍然会得到一个好的结果。我还没有太多的数据,所以我想知道我是否在正确的轨道上。 使用此方法是否有任何缺点或不准确之处

我不明白的是,这怎么可能是半径范围,它看起来更像是单向的 询问


你可能想问这个问题。我也曾用自己来解决类似的问题。我可以看出您提出的解决方案可能会更快,但请注意,您的四个点描述的是一个正方形而不是一个圆,因此它不会被视为“半径”。

您可以使用ElasticSearch进行搜索,MySQL将始终比ES慢。

我现在知道该怎么做了,首先使用上面的坐标进行过滤,并将Haversine公式放在where子句中。我只是想知道我是否有正确的公式来找到矩形的坐标(upleft和downright)。我在其他帖子中看到了计算结果,上面只是增加/减少了一个半径,这可能不太准确?
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)