2017-08-24 46 views
0

即将开始开发应用程序,而且即时通讯卡会以最有效的方式执行任务。所以任何人都可以访问这个应用程序,并说嘿我在这里!在地图上。他们的地理位置(长,纬度)将被用作一种标记。确定10英里范围内的地理位置逻辑

现在,当用户访问这个应用程序时,它将如何显示人们在10英里范围内访问过的标记。当然,我可以使用for循环来滚动每一个标记,但是规模要大得多,这是最有效的方法吗?如果有5万个标记会怎么样?

然后我想为每个标记添加一个国家,所以它只能滚动你所在国家的标记,但即使如此,我仍然必须滚动每一个标记,检查它们是否在同一个国家,那么除非我为每一个看起来不对的国家建立数据库,否则这个位置就是这样。

不找实际的代码只是逻辑上如何现有的应用程序已经做到这一点,感谢您的任何意见:)

回答

0

如果你有一个标准的浮动索引的数据库longlat(如使用MySQL),你可以选择在一定的经度和纬度范围内的所有点。为此,应首先计算Delta_LongitudeDelta_Latitude对应10miles(DeltaLongitude是纬度相关)。结果集包含以标记为中心的正方形上的所有点(因为正方形在球体上,所以它不是真正的正方形)。

该查询以较大的因子缩小了选择范围,现在应该可以计算每个点的distance on a sphere并再次过滤标记。


MongoDB功能geospatial indixes,它确实执行你要求的。

+0

啊,这是完美的,我从来没有想过直接从SQL做它。我确定我可以使用谷歌地图API或东西来制定出这个增量经纬度和长期,非常感谢:) –

+0

依靠已建立的框架可能是一个好主意来计算角度,因为你还必须处理边界情况:'' 359°+ 2°= 1°' – sauerburger

相关问题