我必须在意大利(> 100000)创建很多餐馆的数据库,并且我想创建一个“靠近我”的功能。我想创建一个包含所有餐厅的纬度和经度的表,并且我想使用 mysql spatial。
您是否知道如何创建查询以查找我周围 10 公里半径内的所有餐馆(我的坐标将由 gps 获取)?
我试图了解距离,但谷歌搜索我没有发现任何有趣的东西。
你认为使用 mysql spatial 是个好主意吗?我可以使用浮点数吗?在这种情况下,如何创建查询以查找我周围 10 公里半径内的所有餐馆?
非常感谢
我必须在意大利(> 100000)创建很多餐馆的数据库,并且我想创建一个“靠近我”的功能。我想创建一个包含所有餐厅的纬度和经度的表,并且我想使用 mysql spatial。
您是否知道如何创建查询以查找我周围 10 公里半径内的所有餐馆(我的坐标将由 gps 获取)?
我试图了解距离,但谷歌搜索我没有发现任何有趣的东西。
你认为使用 mysql spatial 是个好主意吗?我可以使用浮点数吗?在这种情况下,如何创建查询以查找我周围 10 公里半径内的所有餐馆?
非常感谢
MySQL 空间的 MBRIntersects 或 MBRContains 函数似乎是您需要熟悉的。
请参阅此问题的已接受答案作为开始。
在 gis.stackexchange.com 上询问可能会专门针对 MySQL 空间给出更好的答案。
是的,您可以使用地理空间功能 - 但它相当复杂。仅根据纬度和经度(以及经度和纬度!)索引条目会简单得多。至于查询数据,我建议您运行查询以查找与以当前位置为中心的 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 的值)。