Java求两点的中点坐标_如何找到一些GPS点的中点/坐标?

在我的应用程序中,我需要找到一些(3个或更多)GPS点的中点.

我发现两点之间的距离如下

public class DistanceOfGeoPoints {

public static long distanceinKMeters(double dblLat, double dblNewLat, double dblLong, double dblNewLong)

{

try

{

//double dblDistance = 180 / (dblPI * Math.Acos(Math.Sin(dblLat) * Math.Sin(dblNewLat) + Math.Cos(dblLat) * Math.Cos(dblNewLat) * Math.Cos(dblLong - dblNewLong)));

double dblDegree2Radius = Math.PI / 180;

double dbllongdiff = (dblNewLong - dblLong) * dblDegree2Radius;

double dbllatdiff = (dblNewLat - dblLat) * dblDegree2Radius;

double a = Math.pow(Math.sin(dbllatdiff / 2.0), 2) + Math.cos(dblNewLat * dblDegree2Radius) * Math.cos(dblLat * dblDegree2Radius) * Math.pow(Math.sin(dbllongdiff / 2.0), 2);

double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));

double dblDistance = 6367 * c; //Earth Radius * value (result in KM)

// return dblDistance;

long intdistance = (Math.round(dblDistance * 1000));

return intdistance;

}

catch (Exception ex)

{

return 0;

}

}

}

现在我想要N个GPS点的中点

请帮帮我.

解决方法:

欧氏距离中两点的中点就是x和y坐标的平均值.如果我们只是平均点A和B的纬度和经度,这给出了A和B之间的点,但它不需要是等距的.

您可能想要的是将球面坐标转换为欧几里德坐标,通过平均x和y找到中点,然后转换回纬度,经度.

如果我们以超过2分的方式执行此操作,我们需要澄清“中点”的含义.

如果我们希望在欧氏几何中找到N个点的中点,我们只需对所有x值求平均值并对所有y值求平均值.这给了我们一个合理的“中间”,但这个平均点通常与所有三个点都不等.给定三点,我们可以计算出与这三点等距的唯一点;这一点是由三点定义的三角形的外心.但由于三个点定义了一个圆,因此该过程不会推广到n点.给定4个或更多点,可能没有与所有4等距离的点.无论我们是使用eculidean距离还是球面几何距离,都是如此.

在下图中,我们可以看到,外心点距离A,B和C点正好是5个单位.然而,这一点并不像“中间”.另一方面,由平均值定义的中点确实看起来像在中间,即使它更接近A而不是B或C.

对于由(纬度,经度)定义的n个点,最好的方法可能是将所有这些点转换为欧几里德点,计算机平均值,然后转换回(纬度,经度).

可以在此处找到执行此转换的一些代码:Processing Forum

并且有一个很好的wikipedia page解释你需要理解的背景数学.

标签:java,map,gps,google-maps,gis

来源: https://codeday.me/bug/20190620/1246282.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值