首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql:存储大量POI的纬度和经度,使用mysql空间,并计算距离

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

Stack Overflow用户
提问于 2012-05-03 23:19:39
回答 2查看 1.1K关注 0票数 0

我必须创建一个db的很多餐厅在意大利(>100000),我想创建一个“附近我”的功能。我想创建一个包含所有餐厅的纬度和经度的表,并且我已经考虑使用mysql空间。

你知道如何创建一个查询来查找我周围的所有餐厅(我的坐标将由gps获取),半径为10公里?

我试着理解距离,但是到处搜索我没有发现任何有趣的东西。

你认为使用mysql空间数据库是个好主意吗?我能用float代替吗?在这种情况下,我如何创建一个查询来查找我周围10 me范围内的所有餐厅?

非常感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-04 18:58:50

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

请参阅this question的公认答案作为开始。

具体来说,在gis.stackexchange.com上询问可能会给出关于MySQL空间的更好答案。

票数 1
EN

Stack Overflow用户

发布于 2012-05-03 23:48:50

是的,您可以使用地理空间功能-但它相当复杂。只根据纬度和经度(以及经度和纬度!)对条目进行索引会简单得多。至于查询数据,我建议您运行查询,查找与以当前位置为中心的20 to x 20 to边界框匹配的行(可以使用索引),而不是试图查询实际在10 to内的记录-您可以在查询中丢弃半径eksewhere之外的记录,例如

代码语言:javascript
复制
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的值)。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10434386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档