package jeql.command.plot;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.awt.geom.Point2D;
import java.awt.image.BufferedImage;
import java.awt.image.Raster;
import java.awt.image.RenderedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.imageio.ImageIO;
import jeql.api.row.Row;
import jeql.api.row.RowIterator;
import jeql.api.row.RowSchema;
import jeql.api.row.RowUtil;
import jeql.api.row.SchemaUtil;
import jeql.api.table.Table;
import jeql.awt.geom.Java2DConverter;
import jeql.style.StyleConstants;
import jeql.style.StyleExtracter;
import jeql.util.ColorUtil;
import jeql.util.ImageUtil;
import jeql.util.TypeUtil;
import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.Envelope;
import com.vividsolutions.jts.geom.Geometry;
public class DataPlotter
{
public static void plot(Plot plot, List data)
{
for (Iterator i = data.iterator(); i.hasNext(); ) {
Table tbl = (Table) i.next();
DataPlotter plotter = new DataPlotter(plot);
plotter.plot(tbl);
}
}
private Plot plot;
private int geomIndex = -1;
public DataPlotter(Plot plot) {
this.plot = plot;
}
public void plot(Table tbl)
{
RowIterator ri = tbl.getRows().iterator();
RowSchema schema = ri.getSchema();
StyleExtracter styler = new StyleExtracter(schema);
geomIndex = SchemaUtil.getColumnWithType(schema, Geometry.class);
// no geometry, so nothing to plot
if (geomIndex < 0) return;
Graphics2D graphics = plot.getGraphics();
// graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
// RenderingHints.VALUE_ANTIALIAS_ON);
while (true) {
Row row = ri.next();
if (row == null)
break;
plot(row, styler, graphics);
}
}
private void plot(Row row, StyleExtracter styler, Graphics2D graphics)
{
Geometry geom = (Geometry) row.getValue(geomIndex);
if (geom == null) return;
plot(geom, row, styler, graphics);
}
private void plot(Geometry geom, Row row, StyleExtracter styler, Graphics2D graphics)
{
Shape shp = plot.getConverter().toShape(geom);
boolean isArea = geom.getDimension() >= 2;
if (isArea) {
Color clr = styler.fill(row);
if (clr != null) {
graphics.setPaint(clr);
graphics.fill(shp);
}
}
Color lineClr = styler.stroke(row);
if (lineClr != null) {
if (styler.hasStrokeWidth()) {
graphics.setStroke(new BasicStroke((float) styler.strokeWidth(row),
BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
}
graphics.setColor(lineClr);
graphics.draw(shp);
}
}
}