问题:我有很多点a,b,c,d的(lat-long)坐标。 。 。在数据库中。 现在,当我选择a点时,我需要计算点a与其他每个点的距离,并得到最接近的点,例如。这个数学需要点的cos和tan计算。所以这在db方面似乎相当昂贵。
所以我想到了一个简化这个策略。以下是该策略的解释。
我有3个已知点(x,y,z),一个点到另一个点之间的距离是已知的。对于这个例子,假设为10.即从x到y = 10的距离; y到z = 10; z到x = 10.(这形成一个等边三角形。但实际情况可能不是这样)
现在假设我们有两个点a和b。我们计算点a到x,y和z的距离并分别存储,因此对于点b。 (比如应用逻辑)
所以我们有:
至于策略,问题是我们如何计算点a到点b之间的距离。
至于问题本身,如果我将上述策略应用于我的问题,问题是我是在简化还是使情况复杂化?
提前感谢您的回答。
答案 0 :(得分:0)
你可以使用毕达哥拉斯定理计算两点之间的距离,假设它们以笛卡尔坐标给出,不涉及昂贵的三角函数。
但如果你有数千或数百万点,这可能仍然是昂贵的。根据您使用的数据库,它可能提供空间数据类型,并可以有效地处理您的查询。请参阅示例spatial data in SQL Server。
如果您的数据库不支持空间数据,则问题会变得非常复杂。您需要一个空间索引,有效支持最近邻居查询。您可以从Wikipedia article on spatial databases开始了解这个问题通常是如何解决的。
如果您的点数稳定,另一个选择就是预先计算并存储每个点的最近邻居,但是当添加,删除或更改点时,这将变得棘手。