package org.esa.snap.ui.product; import com.bc.ceres.swing.figure.support.DefaultFigureStyle; import com.vividsolutions.jts.geom.Coordinate; import com.vividsolutions.jts.geom.GeometryFactory; import com.vividsolutions.jts.geom.Point; import org.esa.snap.core.datamodel.SceneTransformProvider; import org.esa.snap.core.transform.MathTransform2D; import org.geotools.feature.simple.SimpleFeatureBuilder; import org.geotools.feature.simple.SimpleFeatureTypeBuilder; import org.geotools.referencing.crs.DefaultGeographicCRS; import org.junit.Test; import org.opengis.feature.simple.SimpleFeature; import org.opengis.feature.simple.SimpleFeatureType; import java.awt.geom.AffineTransform; import java.awt.geom.Point2D; import static org.junit.Assert.assertEquals; /** * @author Norman */ public class SimpleFeaturePointFigureTest { private SceneTransformProvider sceneTransformProvider; @Test public void testScaling() throws Exception { SimpleFeatureType type = createShipTrackFeatureType(); SimpleFeature feature = createFeature(type, 1, 53.1F, 13.2F, 0.5); sceneTransformProvider = new SceneTransformProvider() { @Override public MathTransform2D getModelToSceneTransform() { return MathTransform2D.IDENTITY; } @Override public MathTransform2D getSceneToModelTransform() { return MathTransform2D.IDENTITY; } }; SimpleFeaturePointFigure figure = new SimpleFeaturePointFigure(feature, sceneTransformProvider, new DefaultFigureStyle()); Coordinate coordinate = figure.getGeometry().getCoordinate(); assertEquals(13.2F, coordinate.x, 1e-10); assertEquals(53.1F, coordinate.y, 1e-10); boolean closeTo = figure.isCloseTo(new Point2D.Double(13.2F, 53.1F), new AffineTransform()); assertEquals(true, closeTo); } private static SimpleFeatureType createShipTrackFeatureType() { SimpleFeatureTypeBuilder ftb = new SimpleFeatureTypeBuilder(); DefaultGeographicCRS crs = DefaultGeographicCRS.WGS84; ftb.setCRS(crs); ftb.setName("ShipTrack"); ftb.add("index", Integer.class); ftb.add("point", Point.class, crs); ftb.add("data", Double.class); ftb.setDefaultGeometry("point"); return ftb.buildFeatureType(); } private static SimpleFeature createFeature(SimpleFeatureType type, int index, float lat, float lon, double data) { SimpleFeatureBuilder fb = new SimpleFeatureBuilder(type); GeometryFactory gf = new GeometryFactory(); fb.add(index); fb.add(gf.createPoint(new Coordinate(lon, lat))); fb.add(data); return fb.buildFeature(Long.toHexString(System.nanoTime())); } }