我有一组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的新手,如果这看起来很简单,请原谅我。
答案 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
快捷方式表示left
,right
,bottom
,top
。
您的带有min
的代码不起作用,因为RDD.min
不接受任何参数(至少不在第一个非隐式参数列表中)。似乎也没有minBy
/ maxBy
。