首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从MySQL表中的纬度/经度中得到最近的位置?

如何从MySQL表中的纬度/经度中得到最近的位置?
EN

Stack Overflow用户
提问于 2013-10-13 22:22:55
回答 1查看 628关注 0票数 0

我想在MySQL数据库中创建一个with列表:

  1. 索引
  2. 纬度
  3. 经度
  4. 国家、城市、人民、建筑等场所。

拥有巨大的行数,按十万至百万行的顺序排列。

如果我想得到表中所选行的最近位置,如何以最快的方式做到这一点?

如果需要更多的信息、索引或预置,这是没有问题的。

======

编辑1:

我读过答案,答案是用一个公式,例如最好的答案:

( sin((geo_latitude*pi()/180))+cos((".latitude."*pi()/180)) *cos((geo_latitude*pi(/180)*cos((“.$longitude”)- geo_longitude)*pi()/180))))*180/pi())*60*1.1515*1.609344)

如果我有一百万行,那就意味着有一百万的计算量。我想会很慢的。

是优化,例如在开始时使用筛选:

  1. 如果输入是位于10.000,20.000的城市A,则过滤位于9.000到11.00的城市。
  2. 用上面的公式计算。

如何优化该算法的速度?

====

编辑2:

对不起,我只读了最好的答案。

我在另一个答案中找到了我想要的:http://www.scribd.com/doc/2569355/Geo-Distance-Search-with-MySQL

EN

回答 1

Stack Overflow用户

发布于 2013-10-13 22:31:21

你可以用一个四重奏。四边形是像四叉树一样的空间索引。它将点排序成一个网格,然后您可以在中心点周围搜索网格。这并不容易理解,但您可以下载我的php类hilbert-曲线@ phpclasses.org。或者可以使用本机MySQL空间扩展和点数据类型。然而,我的实现使用了一个四键和一个希尔伯特曲线,可以更好。这在很大程度上取决于数据。鱼叉碱公式的问题是它非常慢。但是,您可以同时使用这两种算法来获得更好的结果。

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

https://stackoverflow.com/questions/19350994

复制
相关文章

相似问题

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