package arida.ufc.br.moap.vis.engine.impl; import java.awt.Polygon; import java.awt.Shape; import java.awt.geom.Point2D; import org.jdesktop.swingx.JXMapViewer; import org.jdesktop.swingx.mapviewer.GeoPosition; import arida.ufc.br.moap.vis.api.GeometryType; import arida.ufc.br.moap.vis.api.IFeaturable; import arida.ufc.br.moap.vis.api.IGeometry; import arida.ufc.br.moap.vis.engine.api.IVisualizationEngine; public class VisualizationEngineImpl implements IVisualizationEngine { @Override public Shape getShape(JXMapViewer viewer, IFeaturable feature) { GeometryType type = feature.getFeature().getGeometry() .getGeometryType(); switch (type) { case POINT: return getPoint(viewer, feature); case LINESTRING: return getLineString(viewer, feature); case POLYGON: return getPolygon(viewer, feature); default: break; } return null; } /* * Return a LineString Shape. * * @param viewer * @param feature * @return lineString */ private Shape getLineString(JXMapViewer viewer, IFeaturable feature) { /* * This class has the same behavior than {@link Polygon2D}, except that * the figure is not closed. */ Polyline2D lineString = new Polyline2D(); IGeometry geom = feature.getFeature().getGeometry(); Point2D pt = null; double[][] coords = geom.getCoordinates(); for (int i = 0; i < coords.length; i++) { for (int y = 0; y < coords[i].length; y++) { pt = viewer.getTileFactory().geoToPixel(new GeoPosition(coords[i][1], coords[i][0]), viewer.getZoom()); lineString.addPoint(pt); } } return lineString; } /* * Return a Polygon Shape * * @param viewer * @param feature * * @return polygon */ private Shape getPolygon(JXMapViewer viewer, IFeaturable feature) { IGeometry geom = feature.getFeature().getGeometry(); Polygon polygon = new Polygon(); Point2D pt = null; double[][] coords = geom.getCoordinates(); for (int i = 0; i < coords.length; i++) { for (int y = 0; y < coords[i].length; y++) { pt = viewer.getTileFactory().geoToPixel( new GeoPosition(coords[i][1], coords[i][0]), viewer.getZoom()); polygon.addPoint((int) pt.getX(), (int) pt.getY()); } } return polygon; } /* * Return a Point Shape * * @param viewer * @param feature * * @return point */ private Shape getPoint(JXMapViewer viewer, IFeaturable feature) { IGeometry geom = feature.getFeature().getGeometry(); double[][] coord = geom.getCoordinates(); Point2D pt = viewer.getTileFactory().geoToPixel( new GeoPosition(coord[0][1], coord[0][0]), viewer.getZoom()); Polyline2D point = new Polyline2D(); point.addPoint(pt); return point; } }