【发布时间】:2022-01-19 10:16:03
【问题描述】:
我已将公式转换为 Java 提供的here。但是准确性是个问题。我们正在使用 GPS 坐标。
我们使用 iPhone 提供的 GPS 定位,精度高达小数点后 10 位。
/*
* Latitude and Longitude are in Degree
* Unit Of Measure : 1 = Feet,2 = Kilometer,3 = Miles
*/
//TODO 3 Change Unit of Measure and DISTANCE_IN_FEET constants to Enum
public static Double calculateDistance(double latitudeA,double longitudeA,double latitudeB,double longitudeB,short unitOfMeasure){
Double distance;
distance = DISTANCE_IN_FEET *
Math.acos(
Math.cos(Math.toRadians(latitudeA)) * Math.cos(Math.toRadians(latitudeB))
*
Math.cos(Math.toRadians(longitudeB) - Math.toRadians(longitudeA))
+
Math.sin(Math.toRadians(latitudeA))
*
Math.sin(Math.toRadians(latitudeB))
);
return distance;
}
仅供参考:公共静态最终 int DISTANCE_IN_FEET = 20924640;
然后我使用 Math.round(distance);转换为长。
对于实际的 25 英尺,我得到 7 英尺的输出。
【问题讨论】:
-
您能给我们更多的信息吗?即你正在使用的库,问题是什么,你的一些代码目前是什么?
-
能贴出你写的代码吗?
-
@user2341336 感谢您的回复。问题是我没有得到准确性。我使用上面链接中提到的公式得到的距离与实际距离不同。例如,实际的 25 英尺距离我们得到 7 英尺的距离。应用程序可能是我想在离门 10 英尺的地方开门。我每秒都在将我的位置推送到服务器。服务器有我门的位置。都在 GPS 坐标中。
-
@miah 这是我原始帖子中提供的简单 Java 版本的代码。我每秒将我的位置推送到服务器,并且服务器具有给定点的位置。一旦我越过 10 英尺的障碍,它就会触发可能是打开门或其他东西的事件。
-
@user890263 - 如果您不向我们展示代码,我们将无法解释为什么您的准确性会降低。