mysql:存储很多POI的经度和纬度,使用mysql空间,并计算距离

时间:2012-05-03 15:19:39

标签: mysql distance latitude-longitude spatial-query

我要在意大利创建一个很多餐馆的数据库(> 100000),我想创建一个“靠近我”的功能。我想创建一个包含所有餐厅的纬度和经度的表格,我认为使用mysql spatial。

你知道我怎么能创建一个查询来找到我周围的所有餐馆(我的坐标将由gps拍摄),半径为10公里?

我正试图解开距离,但谷歌搜索我没有发现任何有趣的东西。

你认为使用mysql space是个好主意吗?我可以使用浮动吗?在这种情况下,我如何创建一个查询来查找半径10公里范围内的所有餐馆?

非常感谢

2 个答案:

答案 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的值。)