Java 计算两个坐标之间的距离
这里的坐标相同,所以我希望它返回零距离。但他们使用下面提到的计算公式返回到距离以下Java 计算两个坐标之间的距离,java,coordinates,Java,Coordinates,这里的坐标相同,所以我希望它返回零距离。但他们使用下面提到的计算公式返回到距离以下 Coordinate 1 : 44.000, 61.001 Coordinate 2 : 44.000, 61.001 Distance between two coordinates : 8.35023072909283E-8 (Means 0.0000000835023072909283) Coordinate 1 : 110.000, 89.001 Coordinate 2 : 110.000, 89.
Coordinate 1 : 44.000, 61.001
Coordinate 2 : 44.000, 61.001
Distance between two coordinates : 8.35023072909283E-8 (Means 0.0000000835023072909283)
Coordinate 1 : 110.000, 89.001
Coordinate 2 : 110.000, 89.001
这里的坐标是相同的,所以我希望它将返回零
距离。但他们使用下面提到的计算公式返回到距离以下
Coordinate 1 : 44.000, 61.001
Coordinate 2 : 44.000, 61.001
Distance between two coordinates : 8.35023072909283E-8 (Means 0.0000000835023072909283)
Coordinate 1 : 110.000, 89.001
Coordinate 2 : 110.000, 89.001
为了计算距离,我使用了以下代码:
Distance between two coordinates : 1.5033016609322658E-7 (Means 0.00000015033016609322658)
为什么上面的公式返回距离的类型而不是0
注:所有坐标值均为双精度
看起来您在显示坐标时将坐标值舍入到小数点后3位。实际存储的坐标不一样,这是因为在计算它们时,无论使用什么数学方法,都存在一些微小的浮点累积不精确性。因为在显示时没有舍入距离,所以可以看到差异 注意:为了代码的整洁,您应该将距离计算包装到
坐标
类上的方法中。而且也很有用:
Math.sqrt(Math.pow(coordinate2.getX() - coordinate1.getX(), 2) + Math.pow(coordinate2.getY() - coordinate1.getY(), 2))
我建议使用
int
。e、 g.44.001将变为44001,即表示小数,因此没有小数部分。使用您的公式计算距离,并将ans乘以10的适当幂。例如这里,10^[-3]
这将避免与浮动相关的错误
注意。如果整数表示法创建了非常大的no.s,请考虑使用java
biginger
类。避免BigDecimal
的一种方法是使用整数表示法
如果您的小数永远不会超过第三个小数位数,则可以通过乘以1000将坐标转换为整数表示形式。
这样,您的计算不会失去精度
在返回任何值之前,需要将其重新转换为正确的单位。
此逻辑应封装在坐标类中。两件事:
1.如前所述,最好使用BigDecimal来计算距离。
2.要计算到坐标之间的距离,必须考虑到它们在球体上,而不是在平面上 这个公式似乎是正确的。您是否在使用双倍密码?可能使用BigDecimal。读取浮点精度,尝试使用BigDecimal
而不是double
或float
。这将消除或至少减少精度问题。如何获得这些值?通过减去相同的经度和纬度,您应该得到一个圆0。@Bifz“0.0000000 835023079283”是“大约0”,这取决于您对“大约”的定义。。。