计算由 lat,long 表示的两点之间的距离,精度高达 15 英尺
Posted
技术标签:
【中文标题】计算由 lat,long 表示的两点之间的距离,精度高达 15 英尺【英文标题】:Calculating distance between two points represented by lat,long upto 15 feet accuracy 【发布时间】: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 - 如果您不向我们展示代码,我们将无法解释为什么您的准确性会降低。 【参考方案1】:您需要haversine formula。
这是我的 java 实现:
/**
* Calculates the distance in km between two lat/long points
* using the haversine formula
*/
public static double haversine(
double lat1, double lng1, double lat2, double lng2)
int r = 6371; // average radius of the earth in km
double dLat = Math.toRadians(lat2 - lat1);
double dLon = Math.toRadians(lng2 - lng1);
double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2))
* Math.sin(dLon / 2) * Math.sin(dLon / 2);
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
double d = r * c;
return d;
【讨论】:
【参考方案2】:根据Wikipedia 的说法,10 英尺接近正常 GPS 精度的极限。 (假设您获得了良好的 GPS 信号。)This post on http://gis.stackexchange.com 提供了更详细的数字。它基本上说 3 米的水平分辨率是普通 GPS 接收器可能获得的最佳水平。
因此,如果您比较两个不同(普通)接收器提供的位置,每个接收器具有最佳情况(3 米/10 英尺)分辨率,您仍然无法可靠地判断一个接收器是否在 10 英尺范围内另一个。
(请注意,您的 10 位“精度”可能是虚幻的。真正的问题是位置的准确度;即误差线有多大……在两个不同的设备上。)
那么在这种情况下,我还有什么其他选择?
链接的文章提到了WAAS 和载波相位 GPS (CPGPS)。另一种选择是WPS。
【讨论】:
那么在这种情况下我还有什么其他选择? @ThomasW - 我认为这是对问题的评论,而不是我的答案:-) @ThomasW 我已经编辑了我的问题并提供了示例输入和结果,这些输入和结果在我的一个 cmets 中给出。如何识别公式是否错误或输入?我尽量不偷懒。只需要指向正确方向的指针。 @ThomasW 和 OP 请在问题下进行此讨论。这里不相关。以上是关于计算由 lat,long 表示的两点之间的距离,精度高达 15 英尺的主要内容,如果未能解决你的问题,请参考以下文章