我必须创建一个db的很多餐厅在意大利(>100000),我想创建一个“附近我”的功能。我想创建一个包含所有餐厅的纬度和经度的表,并且我已经考虑使用mysql空间。
你知道如何创建一个查询来查找我周围的所有餐厅(我的坐标将由gps获取),半径为10公里?
我试着理解距离,但是到处搜索我没有发现任何有趣的东西。
你认为使用mysql空间数据库是个好主意吗?我能用float代替吗?在这种情况下,我如何创建一个查询来查找我周围10 me范围内的所有餐厅?
非常感谢
发布于 2012-05-04 18:58:50
MySQL空间的MBRIntersects或MBRContains函数似乎是您需要熟悉的。
请参阅this question的公认答案作为开始。
具体来说,在gis.stackexchange.com上询问可能会给出关于MySQL空间的更好答案。
发布于 2012-05-03 23:48:50
是的,您可以使用地理空间功能-但它相当复杂。只根据纬度和经度(以及经度和纬度!)对条目进行索引会简单得多。至于查询数据,我建议您运行查询,查找与以当前位置为中心的20 to x 20 to边界框匹配的行(可以使用索引),而不是试图查询实际在10 to内的记录-您可以在查询中丢弃半径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 to转换为您正在使用的经度/纬度单位,并替换x.max_range的值)。
https://stackoverflow.com/questions/10434386
复制相似问题