*/
public void render( Graphics2D g, IProgressMonitor monitor ) throws RenderException {
if (monitor == null)
monitor = new NullProgressMonitor();
CSVReader reader = null;
try {
ILayer layer = getContext().getLayer();
IGeoResource resource = layer.findGeoResource(CSV.class);
if (resource == null)
return;
ReferencedEnvelope bounds = getRenderBounds();
monitor.subTask("connecting");
CSV csv = resource.resolve(CSV.class, null);
// LOOK UP STYLE
IStyleBlackboard style = layer.getStyleBlackboard();
Color color = (Color) style.get( ColorStyle.ID );
// DATA TO WORLD
CoordinateReferenceSystem dataCRS = layer.getCRS();
CoordinateReferenceSystem worldCRS = context.getCRS();
MathTransform dataToWorld = CRS.findMathTransform(dataCRS, worldCRS, false);
// DRAW FILE
monitor.beginTask("csv render", csv.getSize());
reader = csv.reader();
int nameIndex = csv.getHeader("name");
Coordinate worldLocation = new Coordinate();
String [] row;
while ((row = reader.readNext()) != null) {
Point point = csv.getPoint(row);
Coordinate dataLocation = point.getCoordinate();
try {
JTS.transform(dataLocation, worldLocation, dataToWorld);
} catch (TransformException e) {
continue;
}
if (bounds != null && !bounds.contains(worldLocation)) {
continue; // optimize!
}
java.awt.Point p = getContext().worldToPixel(worldLocation);
g.setColor( color );
g.fillRect(p.x-2, p.y-2, 6, 6);
g.setColor(Color.BLACK);
String name = row[nameIndex];
g.drawString(name, p.x + 15, p.y + 15);
monitor.worked(1);
if (monitor.isCanceled()) break;
}
} catch (IOException e) {
throw new RenderException(e); // rethrow any exceptions encountered
} catch (FactoryException e) {
throw new RenderException(e); // rethrow any exceptions encountered
} finally {
if (reader != null)
try {
reader.close();
} catch (IOException e) {
throw new RenderException(e); // rethrow any exceptions encountered
}
monitor.done();
}