我在我的android应用程序中有一个带有地理指针的数据库表(lat和lon是十进制度值),大约1000点。我需要选择20个最近点到某个给定的地理点。
我在Stackoverflow上找到了如何计算两个地理点之间距离的答案,并且非常高兴,直到我尝试编写查询。我发现,在内置的android的sqlite中使用trignometrical函数是不可能的。
但后来我有了一个想法。我真的不需要计算距离。接近一点是他们的地理坐标应该是较小的差异。
我怎么能用这个事实?通过(lat_0 - lat_n)^ 2 +(lon0-lon_n)^ 2订购保存点是否足够,其中lat_0和lon_0是给定点的地理坐标?
谢谢,
穆尔
UPD
因此,获得我的问题答案的最佳方法是测试我上面描述的方法。
它的效果相当不错,但并不完全与精确距离相比。
因此,如果您只需要计算距离,这个解决方案就可以了,但在我的情况下,我还需要按距离订购工作站,并且无法使用此解决方案。
我要感谢约翰在CashCommons和菲利普。谢谢你们
答案 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列表保存为逗号分隔字符串并插入数据库中?然后,当你需要某个邻居时,你会直接对他们做。但是,如果您需要插入新点,这将变得很痛苦。基本上你需要重新计算邻居。