我要在意大利创建一个很多餐馆的数据库(> 100000),我想创建一个“靠近我”的功能。我想创建一个包含所有餐厅的纬度和经度的表格,我认为使用mysql spatial。
你知道我怎么能创建一个查询来找到我周围的所有餐馆(我的坐标将由gps拍摄),半径为10公里?
我正试图解开距离,但谷歌搜索我没有发现任何有趣的东西。
你认为使用mysql space是个好主意吗?我可以使用浮动吗?在这种情况下,我如何创建一个查询来查找半径10公里范围内的所有餐馆?
非常感谢
答案 0 :(得分:1)
MySQL空间的MBRIntersects或MBRContains函数似乎是您需要熟悉的内容。
首先查看this question已接受的答案。
询问gis.stackexchange.com可能会特别为MySQL空间提供更好的答案。
答案 1 :(得分:-2)
是的,您可以使用地理空间功能 - 但它相当复杂。仅根据纬度和经度(以及经度和纬度)索引条目会更简单!至于查询数据,我建议你运行查询,查找与当前位置(可以使用索引)为中心的20km X 20km边界框匹配的行,而不是试图查询实际在10km以内的记录 - 你可以丢弃查询中半径eksewhere以外的那些,例如
SELECT * FROM (
SELECT p.id, p.description,
SQRT((x.current_latitiude-p.latitude)*(x.current_latitiude-p.latitude)
+ (x.current_longitude-p.longitude)*(x.current_longitude-p.longitude))
AS distance
FROM places p
WHERE p.latitude BETWEEN (x.current_latitiude - x.max_range)
AND (x.current_latitiude + x.max_range)
AND p.longitude BETWEEN (x.current_longitiude - x.max_range)
AND (x.current_longitiude - x.max_range)
) ilv
WHERE ilv.distance<x.max_range
(您需要将10公里转换为您用于经度/纬度的单位,并替换x.max_range的值。)