计算数组中的点与返回数组之间的点之间的距离小于5km的距离

时间:2018-08-13 13:34:26

标签: java arrays

给出一个经度和纬度为[[x1,y1),(x2,y2),(x3,y3),(x4,y4),(x5,y5)...]的数组,其中x为纬度和y是经度,我想返回一个数组,它们之间的距离小于5KM。例如,返回的数组将是(x2,y2),(x3,y3),这意味着这些点之间的距离小于5km。我正在使用Haversine算法来计算两个点之间的距离。 Haversine.distance(x1,y1,x2,y2)。如何在Java中实现呢?

这就是我尝试过的

 public static class  Point{
        private final double latitude;
        private final double longitude;
    }



Point p1 = new Point(53.594952,-1.291583);
        Point p2 = new Point(53.383100,-1.179820);
        Point p3 = new Point(53.594952,-1.179120);
        Point p4 = new Point(53.594952,-1.279120);
        Point p5 = new Point(53.594952,-1.479120);
        Point p6 = new Point(53.594952,-1.339120);

Point[] points = {p1, p2, p3, p4, p5, p6};
        Point[] nearPoints = new Point[points.length];

for (int i = 0; i <= points.length - 1; i++) {
    if (Haversine.distance(points[i].latitude, points[i].longitude, points[i + 1].latitude, points[i + 1].longitude) < 5) {
        nearPoints[i] = points[i];
    }
}

1 个答案:

答案 0 :(得分:0)

假设最终结果是一个包含所有点集的数据结构

Point[] p = [new Point(x1,y1), new Point(x2,y2),...];
List<Point[]> closePoints = new ArrayList<Point[]>();

for (int i=0; i<p.length-1; i++) {
  for (int j=i+1; j<p.length; j++) {
    if (Haversine.distance(p[i].latitude, p[i].longitude, p[j].latitude, p[j].longitude) < 5) {
      //Elements are inserted into the list as two-element arrays
      Point[] toAdd = {p[i], p[j]};
      closePoints.add(toAdd);
    }
  }
}
System.out.println(closePoints.get(0)[0].latitude); //access example

编辑:使数据结构在两元素数组中包含成对的点,而不是一个接一个地存储点