Java 从地理点的距离获取位置
我正在开发一个Android应用程序,我有一个地理点的纬度和经度,我想从X米(北边)和Y米(西边)得到这个地方的坐标。GeoPoint没有实现这种功能,所以我必须自己找到一种方法来实现它Java 从地理点的距离获取位置,java,android,location,distance,Java,Android,Location,Distance,我正在开发一个Android应用程序,我有一个地理点的纬度和经度,我想从X米(北边)和Y米(西边)得到这个地方的坐标。GeoPoint没有实现这种功能,所以我必须自己找到一种方法来实现它 我做了一些搜索,但没有发现任何有趣的东西,你知道如何继续吗?很棘手,因为两个整经度之间的距离取决于纬度,而距离也取决于海拔 为了简单起见,我会尝试猜测经度和纬度,并检查猜测与原点之间的距离。这更容易,因为两点之间已经完成了 从一个轴开始,进行一种二进制搜索,直到找到向北X米的位置。然后对另一个轴也这样做。很棘手
我做了一些搜索,但没有发现任何有趣的东西,你知道如何继续吗?很棘手,因为两个整经度之间的距离取决于纬度,而距离也取决于海拔 为了简单起见,我会尝试猜测经度和纬度,并检查猜测与原点之间的距离。这更容易,因为两点之间已经完成了
从一个轴开始,进行一种二进制搜索,直到找到向北X米的位置。然后对另一个轴也这样做。很棘手,因为两个整经度之间的距离取决于纬度,而距离也取决于海拔 为了简单起见,我会尝试猜测经度和纬度,并检查猜测与原点之间的距离。这更容易,因为两点之间已经完成了
从一个轴开始,进行一种二进制搜索,直到找到向北X米的位置。然后对另一个轴执行相同的操作。使用以下方法,您将获得要添加到原始位置的纬度和经度,以获得最终位置。请记住,这只适用于相对较小的距离,因为它忽略了地球曲率
private static final float GAP_LAT_LON = 0.00005f; //aprox 5 meters
private float results[] = new float[1];
private PointF getGaps(Location initial, float distanceX, float distanceY, PointF gaps){
Location.distanceBetween(initial.getLatitude(), initial.getLongitude(), initial.getLatitude(), initial.getLongitude() + GAP_LAT_LON, results);
double factorX = GAP_LAT_LON / results[0];
Location.distanceBetween(initial.getLatitude(), initial.getLongitude(), initial.getLatitude() + GAP_LAT_LON, initial.getLongitude(), results);
double factorY = GAP_LAT_LON / results[0];
if(gaps == null)
gaps = new PointF();
gaps.set((float)(distanceX * factorX), (float)(distanceY * factorY));
return gaps;
}
//to use
private void teste(){
PointF gaps = null;
Location initial = new Location("");
initial.setLatitude(23.5);
initial.setLongitude(13.2);
//100 meters West/East and 300 meters North/South
getGaps(initial, 100, 300, gaps);
//gaps.x returns x offset to add/subtract to initial latitude
//gaps.y returns y offset to add/subtract to initial longitude
}
祝您好运使用以下方法,您将获得要添加到原始位置的纬度和经度,以到达最终位置。请记住,这只适用于相对较小的距离,因为它忽略了地球曲率
private static final float GAP_LAT_LON = 0.00005f; //aprox 5 meters
private float results[] = new float[1];
private PointF getGaps(Location initial, float distanceX, float distanceY, PointF gaps){
Location.distanceBetween(initial.getLatitude(), initial.getLongitude(), initial.getLatitude(), initial.getLongitude() + GAP_LAT_LON, results);
double factorX = GAP_LAT_LON / results[0];
Location.distanceBetween(initial.getLatitude(), initial.getLongitude(), initial.getLatitude() + GAP_LAT_LON, initial.getLongitude(), results);
double factorY = GAP_LAT_LON / results[0];
if(gaps == null)
gaps = new PointF();
gaps.set((float)(distanceX * factorX), (float)(distanceY * factorY));
return gaps;
}
//to use
private void teste(){
PointF gaps = null;
Location initial = new Location("");
initial.setLatitude(23.5);
initial.setLongitude(13.2);
//100 meters West/East and 300 meters North/South
getGaps(initial, 100, 300, gaps);
//gaps.x returns x offset to add/subtract to initial latitude
//gaps.y returns y offset to add/subtract to initial longitude
}
祝你好运你可以调整它,选择一个更接近你正在使用的距离值的值作为间隔。如果将间距返回为double,也可以提高精度,但必须将自己的类定义为PointD(double)不存在。您可以调整它,选择一个更接近您使用的距离值的GAP_LAT_LON值。如果将间隙返回为double,还可以提高精度,但必须将自己的类定义为PointD(double)不存在。