blob: d6572adb5815e83e446c2d5467cfc9bd53a2b2c4 [file] [log] [blame]
/**
* FILE: ScatterplotTest.java
* PATH: org.datasyslab.babylon.ScatterplotTest.java
* Copyright (c) 2017 Arizona State University Data Systems Lab
* All rights reserved.
*/
package org.datasyslab.babylon;
import java.awt.Color;
import java.io.InputStream;
import java.util.Properties;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.storage.StorageLevel;
import org.datasyslab.babylon.extension.imageGenerator.BabylonImageGenerator;
import org.datasyslab.babylon.extension.visualizationEffect.ScatterPlot;
import org.datasyslab.babylon.utils.ColorizeOption;
import org.datasyslab.babylon.utils.ImageType;
import org.datasyslab.babylon.utils.RasterizationUtils;
import org.datasyslab.geospark.enums.FileDataSplitter;
import org.datasyslab.geospark.spatialRDD.LineStringRDD;
import org.datasyslab.geospark.spatialRDD.PointRDD;
import org.datasyslab.geospark.spatialRDD.PolygonRDD;
import org.datasyslab.geospark.spatialRDD.RectangleRDD;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import com.vividsolutions.jts.geom.Envelope;
import scala.Tuple2;
/**
* The Class ScatterplotTest.
*/
public class ScatterplotTest {
/** The spark context. */
static JavaSparkContext sparkContext;
/** The prop. */
static Properties prop;
/** The input prop. */
static InputStream inputProp;
/** The Point input location. */
static String PointInputLocation;
/** The Point offset. */
static Integer PointOffset;
/** The Point splitter. */
static FileDataSplitter PointSplitter;
/** The Point num partitions. */
static Integer PointNumPartitions;
/** The Rectangle input location. */
static String RectangleInputLocation;
/** The Rectangle offset. */
static Integer RectangleOffset;
/** The Rectangle splitter. */
static FileDataSplitter RectangleSplitter;
/** The Rectangle num partitions. */
static Integer RectangleNumPartitions;
/** The Polygon input location. */
static String PolygonInputLocation;
/** The Polygon offset. */
static Integer PolygonOffset;
/** The Polygon splitter. */
static FileDataSplitter PolygonSplitter;
/** The Polygon num partitions. */
static Integer PolygonNumPartitions;
/** The Line string input location. */
static String LineStringInputLocation;
/** The Line string offset. */
static Integer LineStringOffset;
/** The Line string splitter. */
static FileDataSplitter LineStringSplitter;
/** The Line string num partitions. */
static Integer LineStringNumPartitions;
/** The US main land boundary. */
static Envelope USMainLandBoundary;
/**
* Sets the up before class.
*
* @throws Exception the exception
*/
@BeforeClass
public static void setUpBeforeClass() throws Exception {
SparkConf sparkConf = new SparkConf().setAppName("ScatterplotTest").setMaster("local[4]");
sparkContext = new JavaSparkContext(sparkConf);
Logger.getLogger("org.apache").setLevel(Level.WARN);
Logger.getLogger("org.datasyslab").setLevel(Level.DEBUG);
Logger.getLogger("akka").setLevel(Level.WARN);
prop = new Properties();
inputProp = ScatterplotTest.class.getClassLoader().getResourceAsStream("babylon.point.properties");
prop.load(inputProp);
PointInputLocation = "file://"+ScatterplotTest.class.getClassLoader().getResource(prop.getProperty("inputLocation")).getPath();
PointOffset = Integer.parseInt(prop.getProperty("offset"));;
PointSplitter = FileDataSplitter.getFileDataSplitter(prop.getProperty("splitter"));
PointNumPartitions = Integer.parseInt(prop.getProperty("numPartitions"));
inputProp = ScatterplotTest.class.getClassLoader().getResourceAsStream("babylon.rectangle.properties");
prop.load(inputProp);
RectangleInputLocation = "file://"+ScatterplotTest.class.getClassLoader().getResource(prop.getProperty("inputLocation")).getPath();
RectangleOffset = Integer.parseInt(prop.getProperty("offset"));
RectangleSplitter = FileDataSplitter.getFileDataSplitter(prop.getProperty("splitter"));
RectangleNumPartitions = Integer.parseInt(prop.getProperty("numPartitions"));
inputProp = ScatterplotTest.class.getClassLoader().getResourceAsStream("babylon.polygon.properties");
prop.load(inputProp);
PolygonInputLocation = "file://"+ScatterplotTest.class.getClassLoader().getResource(prop.getProperty("inputLocation")).getPath();
PolygonOffset = Integer.parseInt(prop.getProperty("offset"));
PolygonSplitter = FileDataSplitter.getFileDataSplitter(prop.getProperty("splitter"));
PolygonNumPartitions = Integer.parseInt(prop.getProperty("numPartitions"));
inputProp = ScatterplotTest.class.getClassLoader().getResourceAsStream("babylon.linestring.properties");
prop.load(inputProp);
LineStringInputLocation = "file://"+ScatterplotTest.class.getClassLoader().getResource(prop.getProperty("inputLocation")).getPath();
LineStringOffset = Integer.parseInt(prop.getProperty("offset"));
LineStringSplitter = FileDataSplitter.getFileDataSplitter(prop.getProperty("splitter"));
LineStringNumPartitions = Integer.parseInt(prop.getProperty("numPartitions"));
USMainLandBoundary = new Envelope(-126.790180,-64.630926,24.863836,50.000);
}
/**
* Tear down.
*
* @throws Exception the exception
*/
@AfterClass
public static void tearDown() throws Exception {
sparkContext.stop();
}
/**
* Test encode decode id.
*
* @throws Exception the exception
*/
@Test
public void testEncodeDecodeId() throws Exception {
int pixelX = 33;
int pixelY = 44;
int resolutionX = 1000;
int resolutionY = 600;
int serialId = RasterizationUtils.Encode2DTo1DId(resolutionX, resolutionY, pixelX, pixelY);
Tuple2<Integer, Integer> pixelCoordinate = RasterizationUtils.Decode1DTo2DId(resolutionX, resolutionY, serialId);
assert pixelCoordinate._1 == pixelX;
assert pixelCoordinate._2 == pixelY;
pixelX = 1000;
pixelY = 2;
resolutionX = 2000;
resolutionY = 1200;
serialId = RasterizationUtils.Encode2DTo1DId(resolutionX, resolutionY, pixelX, pixelY);
pixelCoordinate = RasterizationUtils.Decode1DTo2DId(resolutionX, resolutionY, serialId);
assert pixelCoordinate._1 == pixelX;
assert pixelCoordinate._2 == pixelY;
}
/**
* Test point RDD visualization.
*
* @throws Exception the exception
*/
@Test
public void testPointRDDVisualization() throws Exception {
PointRDD spatialRDD = new PointRDD(sparkContext, PointInputLocation, PointOffset, PointSplitter, false, PointNumPartitions, StorageLevel.MEMORY_ONLY());
ScatterPlot visualizationOperator = new ScatterPlot(1000,600,USMainLandBoundary,false);
visualizationOperator.CustomizeColor(255, 255, 255, 255, Color.GREEN, true);
visualizationOperator.Visualize(sparkContext, spatialRDD);
BabylonImageGenerator imageGenerator = new BabylonImageGenerator();
imageGenerator.SaveRasterImageAsLocalFile(visualizationOperator.rasterImage, "./target/scatterplot/PointRDD",ImageType.PNG);
visualizationOperator = new ScatterPlot(1000,600,USMainLandBoundary,false,true);
visualizationOperator.CustomizeColor(255, 255, 255, 255, Color.GREEN, true);
visualizationOperator.Visualize(sparkContext, spatialRDD);
imageGenerator = new BabylonImageGenerator();
imageGenerator.SaveVectorImageAsLocalFile(visualizationOperator.vectorImage, "./target/scatterplot/PointRDD",ImageType.SVG);
}
/**
* Test point RDD visualization.
*
* @throws Exception the exception
*/
@Test
public void testPointRDDVisualizationWithParallelRendering() throws Exception {
PointRDD spatialRDD = new PointRDD(sparkContext, PointInputLocation, PointOffset, PointSplitter, false, PointNumPartitions, StorageLevel.MEMORY_ONLY());
ScatterPlot visualizationOperator = new ScatterPlot(1000,600,USMainLandBoundary, ColorizeOption.NORMAL,
false, 4, 4, true, false);
visualizationOperator.CustomizeColor(255, 255, 255, 255, Color.GREEN, true);
visualizationOperator.Visualize(sparkContext, spatialRDD);
visualizationOperator.stitchImagePartitions();
BabylonImageGenerator imageGenerator = new BabylonImageGenerator();
imageGenerator.SaveRasterImageAsLocalFile(visualizationOperator.rasterImage, "./target/scatterplot/PointRDD-parallelrender",ImageType.PNG);
//imageGenerator.SaveRasterImageAsLocalFile(visualizationOperator.distributedRasterImage, "./target/scatterplot/PointRDD-parallelrender",ImageType.PNG);
}
/**
* Test point RDD visualization.
*
* @throws Exception the exception
*/
@Test
public void testSaveAsDistributedFile() throws Exception {
PointRDD spatialRDD = new PointRDD(sparkContext, PointInputLocation, PointOffset, PointSplitter, false, PointNumPartitions, StorageLevel.MEMORY_ONLY());
ScatterPlot visualizationOperator = new ScatterPlot(1000,600,USMainLandBoundary,false,2,2,true,false);
visualizationOperator.CustomizeColor(255, 255, 255, 255, Color.GREEN, true);
visualizationOperator.Visualize(sparkContext, spatialRDD);
BabylonImageGenerator imageGenerator = new BabylonImageGenerator();
String scatterPlotOutputPath = System.getProperty("user.dir") + "/target/scatterplot/";
imageGenerator.SaveRasterImageAsSparkFile(visualizationOperator.distributedRasterImage, scatterPlotOutputPath+"PointRDD-parallel-raster",ImageType.PNG);
visualizationOperator = new ScatterPlot(1000,600,USMainLandBoundary,false,-1,-1,true,true);
visualizationOperator.CustomizeColor(255, 255, 255, 255, Color.GREEN, true);
visualizationOperator.Visualize(sparkContext, spatialRDD);
imageGenerator = new BabylonImageGenerator();
imageGenerator.SaveVectorImageAsSparkFile(visualizationOperator.distributedVectorImage, scatterPlotOutputPath+"PointRDD-parallel-vector",ImageType.SVG);
}
/**
* Test rectangle RDD visualization.
*
* @throws Exception the exception
*/
@Test
public void testRectangleRDDVisualization() throws Exception {
RectangleRDD spatialRDD = new RectangleRDD(sparkContext, RectangleInputLocation, RectangleSplitter, false, RectangleNumPartitions, StorageLevel.MEMORY_ONLY());
ScatterPlot visualizationOperator = new ScatterPlot(1000,600,USMainLandBoundary,false);
visualizationOperator.CustomizeColor(255, 255, 255, 255, Color.RED, true);
visualizationOperator.Visualize(sparkContext, spatialRDD);
BabylonImageGenerator imageGenerator = new BabylonImageGenerator();
imageGenerator.SaveRasterImageAsLocalFile(visualizationOperator.rasterImage, "./target/scatterplot/RectangleRDD",ImageType.GIF);
visualizationOperator = new ScatterPlot(1000,600,USMainLandBoundary,false,true);
visualizationOperator.CustomizeColor(255, 255, 255, 255, Color.RED, true);
visualizationOperator.Visualize(sparkContext, spatialRDD);
imageGenerator = new BabylonImageGenerator();
imageGenerator.SaveVectorImageAsLocalFile(visualizationOperator.vectorImage, "./target/scatterplot/RectangleRDD",ImageType.SVG);
}
/**
* Test polygon RDD visualization.
*
* @throws Exception the exception
*/
@Test
public void testPolygonRDDVisualization() throws Exception {
//UserSuppliedPolygonMapper userSuppliedPolygonMapper = new UserSuppliedPolygonMapper();
PolygonRDD spatialRDD = new PolygonRDD(sparkContext, PolygonInputLocation, PolygonSplitter, false, PolygonNumPartitions, StorageLevel.MEMORY_ONLY());
ScatterPlot visualizationOperator = new ScatterPlot(1000,600,USMainLandBoundary,false);
visualizationOperator.CustomizeColor(255, 255, 255, 255, Color.GREEN, true);
visualizationOperator.Visualize(sparkContext, spatialRDD);
BabylonImageGenerator imageGenerator = new BabylonImageGenerator();
imageGenerator.SaveRasterImageAsLocalFile(visualizationOperator.rasterImage, "./target/scatterplot/PolygonRDD",ImageType.GIF);
visualizationOperator = new ScatterPlot(1000,600,USMainLandBoundary,false,true);
visualizationOperator.CustomizeColor(255, 255, 255, 255, Color.GREEN, true);
visualizationOperator.Visualize(sparkContext, spatialRDD);
imageGenerator = new BabylonImageGenerator();
imageGenerator.SaveVectorImageAsLocalFile(visualizationOperator.vectorImage, "./target/scatterplot/PolygonRDD",ImageType.SVG);
}
/**
* Test line string RDD visualization.
*
* @throws Exception the exception
*/
@Test
public void testLineStringRDDVisualization() throws Exception {
int resolutionY = 800;
int resolutionX = RasterizationUtils.GetWidthFromHeight(resolutionY, USMainLandBoundary);
//UserSuppliedLineStringMapper userSuppliedLineStringMapper = new UserSuppliedLineStringMapper();
LineStringRDD spatialRDD = new LineStringRDD(sparkContext, LineStringInputLocation, LineStringSplitter, false, LineStringNumPartitions, StorageLevel.MEMORY_ONLY());
ScatterPlot visualizationOperator = new ScatterPlot(resolutionX,resolutionY,USMainLandBoundary,false);
visualizationOperator.CustomizeColor(255, 255, 255, 255, Color.GREEN, true);
visualizationOperator.Visualize(sparkContext, spatialRDD);
BabylonImageGenerator imageGenerator = new BabylonImageGenerator();
imageGenerator.SaveRasterImageAsLocalFile(visualizationOperator.rasterImage, "./target/scatterplot/LineStringRDD",ImageType.GIF);
visualizationOperator = new ScatterPlot(resolutionX,resolutionY,USMainLandBoundary,false,true);
visualizationOperator.CustomizeColor(255, 255, 255, 255, Color.GREEN, true);
visualizationOperator.Visualize(sparkContext, spatialRDD);
imageGenerator = new BabylonImageGenerator();
imageGenerator.SaveVectorImageAsLocalFile(visualizationOperator.vectorImage, "./target/scatterplot/LineStringRDD",ImageType.SVG);
}
}