当前位置:  开发笔记 > 开发工具 > 正文

Lat,Long坐标的比较

如何解决《Lat,Long坐标的比较》经验,为你挑选了2个好方法。

我有一个超过15000个纬度和经度坐标的列表.给定任何X,Y坐标,找到列表中最近坐标的最快方法是什么?



1> Jeremy..:

我曾为网站做过一次.即找到距离您的邮政编码50英里范围内的经销商.我用大圆计算找到了北50英里,东50英里,南50英里,西50英里的坐标.这给了我一个min和max lat以及一个min和max long.从那时起,我做了一个数据库查询:

select *
    from dealers
    where latitude  >= minlat
      and latitude  <= maxlat
      and longitude >= minlong
      and longitude <= maxlong

由于其中一些结果仍然会超过50英里,所以我在那个小坐标列表上再次使用了大圆公式.然后我打印出列表以及距目标的距离.

当然,如果你想搜索国际日期线或极点附近的点,那么这将不起作用.但它适用于北美洲的搜索!



2> Greg Hewgill..:

您将需要使用称为Voronoi图的几何结构.这将平面划分为多个区域,每个区域一个,包含最接近每个给定点的所有点.

用于创建Voronoi图并排列数据结构查找的精确算法的代码太大,无法容纳在这个小编辑框中.:)

@Linor:这基本上就是你在创建Voronoi图后会做的事情.但是,您可以选择与Voronoi图线紧密匹配的分割线(而不是制作矩形网格)(这样您将获得越过分割线的更少区域).如果按照每个子图的最佳分界线递归地将Voronoi图分成两半,则可以对要查找的每个点进行树搜索.这需要预先做一些工作但以后节省时间.每次查找都是log N的顺序,其中N是点数.16次比较比15,000好很多!

推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有