如何在x和y坐标中找到最小和最大点

时间:2019-01-10 07:16:22

标签: scala apache-spark rdd bounding-box

我有一组RDD [Double,Double]格式的x和y坐标点。我想从此RDD中找到纬度和经度的最小值和最大值。从最小值和最大值开始,我的目标是找到整个空间边界框的左下角和右上角坐标(如本链接中的图像所示)。 https://www.mathworks.com/matlabcentral/mlc-downloads/downloads/submissions/48509/versions/3/previews/COMP_GEOM_TLBX/html/Bounding_box_2D_01.png

这就是我的开始,但是它说“方法min()的参数太多”

val minX= points.min(p=>p(0))
val minY=points.min(p=>p(1))
val maxX=points.min(p=>p(0))
val maxY=points.max(p=>p(1))

我是Scala的新手,如果这看起来很简单,请原谅我。

1 个答案:

答案 0 :(得分:1)

我认为您的意思是RDD[(Double, Double)]。您可以先将每个点转换为零面积边界框,然后缩小所有边界框,一次组合所有四个值:

val boundingBox = 
  points
  .map{ case (x, y) => (x, x, y, y) }
  .reduce { case ((xl, xr, xb, xt), (yl, yr, yb, yt)) =>
    (xl min yl, xr max yr, xb min yb, xt max yt)
  }

l, r, b, t快捷方式表示leftrightbottomtop

您的带有min的代码不起作用,因为RDD.min不接受任何参数(至少不在第一个非隐式参数列表中)。似乎也没有minBy / maxBy