0

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

您是否知道如何创建查询以查找我周围 10 公里半径内的所有餐馆(我的坐标将由 gps 获取)?

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

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

非常感谢

4

2 回答 2

1

MySQL 空间的 MBRIntersects 或 MBRContains 函数似乎是您需要熟悉的。

请参阅此问题的已接受答案作为开始。

在 gis.stackexchange.com 上询问可能会专门针对 MySQL 空间给出更好的答案。

于 2012-05-04T10:58:49.563 回答
-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

(您需要将 10km 转换为您用于经度/纬度的单位,并替换 x.max_range 的值)。

于 2012-05-03T15:48:50.480 回答