in spark/common/src/main/scala/org/apache/spark/sql/sedona_viz/expressions/Pixelize.scala [45:154]
override def eval(input: InternalRow): Any = {
val inputGeometry =
GeometrySerializer.deserialize(inputExpressions(0).eval(input).asInstanceOf[Array[Byte]])
val resolutionX = inputExpressions(1).eval(input).asInstanceOf[Integer]
val resolutionY = inputExpressions(2).eval(input).asInstanceOf[Integer]
val boundary = GeometrySerializer
.deserialize(inputExpressions(3).eval(input).asInstanceOf[Array[Byte]])
.getEnvelopeInternal
val reverseCoordinate = false
val pixels = inputGeometry match {
case geometry: LineString => {
RasterizationUtils.FindPixelCoordinates(
resolutionX,
resolutionY,
boundary,
inputGeometry.asInstanceOf[LineString],
reverseCoordinate)
}
case geometry: Polygon => {
RasterizationUtils.FindPixelCoordinates(
resolutionX,
resolutionY,
boundary,
inputGeometry.asInstanceOf[Polygon],
reverseCoordinate)
}
case geometry: Point => {
RasterizationUtils.FindPixelCoordinates(
resolutionX,
resolutionY,
boundary,
inputGeometry.asInstanceOf[Point],
ColorizeOption.NORMAL,
reverseCoordinate)
}
case geometry: MultiLineString => {
var manyPixels =
RasterizationUtils.FindPixelCoordinates(
resolutionX,
resolutionY,
boundary,
geometry.getGeometryN(0).asInstanceOf[LineString],
reverseCoordinate)
for (i <- 1 to geometry.getNumGeometries - 1) {
manyPixels.addAll(
RasterizationUtils.FindPixelCoordinates(
resolutionX,
resolutionY,
boundary,
geometry.getGeometryN(i).asInstanceOf[LineString],
reverseCoordinate))
}
manyPixels
}
case geometry: MultiPolygon => {
var manyPixels =
RasterizationUtils.FindPixelCoordinates(
resolutionX,
resolutionY,
boundary,
geometry.getGeometryN(0).asInstanceOf[Polygon],
reverseCoordinate)
for (i <- 1 to geometry.getNumGeometries - 1) {
manyPixels.addAll(
RasterizationUtils.FindPixelCoordinates(
resolutionX,
resolutionY,
boundary,
geometry.getGeometryN(i).asInstanceOf[Polygon],
reverseCoordinate))
}
manyPixels
}
case geometry: MultiPoint => {
var manyPixels =
RasterizationUtils.FindPixelCoordinates(
resolutionX,
resolutionY,
boundary,
geometry.getGeometryN(0).asInstanceOf[Point],
ColorizeOption.NORMAL,
reverseCoordinate)
for (i <- 1 to geometry.getNumGeometries - 1) {
manyPixels.addAll(
RasterizationUtils.FindPixelCoordinates(
resolutionX,
resolutionY,
boundary,
geometry.getGeometryN(i).asInstanceOf[Point],
ColorizeOption.NORMAL,
reverseCoordinate))
}
manyPixels
}
}
assert(pixels.size() > 0)
return new GenericArrayData(
pixels.asScala
.map(f => {
val out = new ByteArrayOutputStream()
val kryo = new Kryo()
val pixelSerializer = new PixelSerializer()
val output = new Output(out)
pixelSerializer.write(kryo, output, f._1)
output.close()
new GenericArrayData(out.toByteArray)
})
.toArray)
}