获取下一个N最近的地理点

时间:2010-12-07 22:49:38

标签: android sqlite math

我在我的android应用程序中有一个带有地理指针的数据库表(lat和lon是十进制度值),大约1000点。我需要选择20个最近点到某个给定的地理点。

我在Stackoverflow上找到了如何计算两个地理点之间距离的答案,并且非常高兴,直到我尝试编写查询。我发现,在内置的android的sqlite中使用trignometrical函数是不可能的。

但后来我有了一个想法。我真的不需要计算距离。接近一点是他们的地理坐标应该是较小的差异。

我怎么能用这个事实?通过(lat_0 - lat_n)^ 2 +(lon0-lon_n)^ 2订购保存点是否足够,其中lat_0和lon_0是给定点的地理坐标?

谢谢,

穆尔

UPD

因此,获得我的问题答案的最佳方法是测试我上面描述的方法。

它的效果相当不错,但并不完全与精确距离相比。

因此,如果您只需要计算距离,这个解决方案就可以了,但在我的情况下,我还需要按距离订购工作站,并且无法使用此解决方案。

我要感谢约翰在CashCommons和菲利普。谢谢你们

3 个答案:

答案 0 :(得分:2)

如果您的积分在一个城市内(或多或少)分开,那么该近似值将正常工作。但是,如果你走遍全球,这种近似就会分崩离析。

编辑:根据Philip的评论,您应该扩展其中一个组件。德国在北纬50度左右,因此将经度乘以(cos 50度)会更好。

答案 1 :(得分:1)

是。 :-)实际距离是sqrt((lat_0 - lat_n)^ 2 +(lon0-lon_n)^ 2)但是按(lat_0 - lat_n)^ 2 +(lon0-lon_n)^ 2排序就足够了。

答案 2 :(得分:0)

嗯......我不确定这种排序是如何起作用的?您是否需要为每个点指定不同的顺序来指示它的邻居。

最简单的解决方案是迭代所有点并计算点之间的geometrical distance。对于1000分,这应该相当快。

最优化的解决方案(在检索速度方面)是在将每个点插入数据库时​​计算每个点的邻居。例如,您可以将id列表保存为逗号分隔字符串并插入数据库中?然后,当你需要某个邻居时,你会直接对他们做。但是,如果您需要插入新点,这将变得很痛苦。基本上你需要重新计算邻居。