Search in sources :

Example 1 with MultiPolygon

use of ca.nrc.cadc.caom2.types.MultiPolygon in project caom2db by opencadc.

the class PostgreSQLGenerator method safeSetMultiPolygon.

/**
 * Store a MultiPolygon in a double[] column.
 *
 * @param sb
 * @param ps
 * @param col
 * @param val
 * @throws SQLException
 */
@Override
protected void safeSetMultiPolygon(StringBuilder sb, PreparedStatement ps, int col, MultiPolygon val) throws SQLException {
    if (val == null) {
        ps.setObject(col, null);
        if (sb != null) {
            sb.append("null,");
        }
    } else {
        log.debug("[safeSetMultiPolygon] in: " + val);
        // 3 numbers per vertex
        Double[] dval = new Double[3 * val.getVertices().size()];
        int i = 0;
        for (Vertex v : val.getVertices()) {
            dval[i++] = v.cval1;
            dval[i++] = v.cval2;
            dval[i++] = v.getType().getValue().doubleValue();
        }
        java.sql.Array arr = ps.getConnection().createArrayOf("float8", dval);
        ps.setObject(col, arr);
        if (sb != null) {
            sb.append("[");
            for (double d : dval) {
                sb.append(d).append(",");
            }
            // replace last comma with closing ]
            sb.setCharAt(sb.length() - 1, ']');
        }
    }
}
Also used : Vertex(ca.nrc.cadc.caom2.types.Vertex) PgSpoint(ca.nrc.cadc.dali.postgresql.PgSpoint) Point(ca.nrc.cadc.caom2.types.Point)

Example 2 with MultiPolygon

use of ca.nrc.cadc.caom2.types.MultiPolygon in project caom2db by opencadc.

the class PostgreSQLGenerator method getMultiPolygon.

@Override
protected MultiPolygon getMultiPolygon(ResultSet rs, int col) throws SQLException {
    double[] coords = Util.getDoubleArray(rs, col);
    if (coords == null) {
        return null;
    }
    MultiPolygon ret = new MultiPolygon();
    for (int i = 0; i < coords.length; i += 3) {
        double cval1 = coords[i];
        double cval2 = coords[i + 1];
        int s = (int) coords[i + 2];
        SegmentType t = SegmentType.toValue(s);
        Vertex v = new Vertex(cval1, cval2, t);
        ret.getVertices().add(v);
    }
    ret.validate();
    return ret;
}
Also used : SegmentType(ca.nrc.cadc.caom2.types.SegmentType) Vertex(ca.nrc.cadc.caom2.types.Vertex) MultiPolygon(ca.nrc.cadc.caom2.types.MultiPolygon) PgSpoint(ca.nrc.cadc.dali.postgresql.PgSpoint) Point(ca.nrc.cadc.caom2.types.Point)

Example 3 with MultiPolygon

use of ca.nrc.cadc.caom2.types.MultiPolygon in project caom2db by opencadc.

the class PostgreSQLGeneratorTest method testCircleToPolygonApproximatiom.

@Test
public void testCircleToPolygonApproximatiom() {
    try {
        Circle c = new Circle(new Point(12.0, 34.0), 1.0);
        double ca = c.getArea();
        double cs = c.getSize();
        for (int i = 4; i < 32; i += 2) {
            ca.nrc.cadc.dali.Polygon dpoly = gen.generatePolygonApproximation(c, i);
            List<Vertex> verts = new ArrayList<Vertex>();
            List<Point> points = new ArrayList<Point>();
            SegmentType t = SegmentType.MOVE;
            for (ca.nrc.cadc.dali.Point dp : dpoly.getVertices()) {
                points.add(new Point(dp.getLongitude(), dp.getLatitude()));
                verts.add(new Vertex(dp.getLongitude(), dp.getLatitude(), t));
                t = SegmentType.LINE;
            }
            verts.add(Vertex.CLOSE);
            MultiPolygon mp = new MultiPolygon(verts);
            Polygon poly = new Polygon(points, mp);
            double pa = poly.getArea();
            double ps = poly.getSize();
            double da = pa / ca;
            log.info("n=" + i + " poly: " + ps + " " + pa + " (" + da + ")");
        }
        log.info("circle: " + ca + " " + cs);
    } catch (Exception unexpected) {
        log.error("unexpected exception", unexpected);
        Assert.fail("unexpected exception: " + unexpected);
    }
}
Also used : Circle(ca.nrc.cadc.caom2.types.Circle) Vertex(ca.nrc.cadc.caom2.types.Vertex) ArrayList(java.util.ArrayList) Point(ca.nrc.cadc.caom2.types.Point) Point(ca.nrc.cadc.caom2.types.Point) SegmentType(ca.nrc.cadc.caom2.types.SegmentType) MultiPolygon(ca.nrc.cadc.caom2.types.MultiPolygon) MultiPolygon(ca.nrc.cadc.caom2.types.MultiPolygon) Polygon(ca.nrc.cadc.caom2.types.Polygon) Test(org.junit.Test)

Example 4 with MultiPolygon

use of ca.nrc.cadc.caom2.types.MultiPolygon in project caom2db by opencadc.

the class AbstractObservationDAOTest method getTestPlane.

protected Plane getTestPlane(boolean full, String productID, int depth, boolean poly) throws Exception {
    Plane p = new Plane(productID);
    if (full) {
        p.metaProducer = URI.create("test:plane/roundrip-1.0");
        p.creatorID = URI.create("ivo://example.com/TEST?" + productID);
        p.calibrationLevel = CalibrationLevel.CALIBRATED;
        p.dataProductType = DataProductType.IMAGE;
        p.metaRelease = TEST_DATE;
        p.dataRelease = TEST_DATE;
        p.provenance = new Provenance("doit");
        p.provenance.lastExecuted = TEST_DATE;
        p.provenance.producer = "MyProducer";
        p.provenance.project = "MyProject";
        p.provenance.reference = new URI("http://www.example.com/MyProject/doit");
        p.provenance.runID = "RUNID123";
        p.provenance.version = "0.1alpha4";
        p.provenance.getKeywords().addAll(TEST_KEYWORDS);
        p.provenance.getInputs().add(new PlaneURI(new ObservationURI("FOO", "bar"), "in1"));
        p.provenance.getInputs().add(new PlaneURI(new ObservationURI("FOO", "bar"), "in2"));
        p.metrics = new Metrics();
        p.metrics.sourceNumberDensity = 100.0;
        p.metrics.background = 2.7;
        p.metrics.backgroundStddev = 0.3;
        p.metrics.fluxDensityLimit = 1.0e-5;
        p.metrics.magLimit = 28.5;
        p.metrics.sampleSNR = 11.0;
        p.quality = new DataQuality(Quality.JUNK);
        // previously was computed metadata
        p.energy = new Energy();
        p.energy.bandpassName = "V";
        p.energy.bounds = new SampledInterval(400e-6, 900e-6);
        p.energy.bounds.getSamples().add(new Interval(400e-6, 500e-6));
        p.energy.bounds.getSamples().add(new Interval(800e-6, 900e-6));
        p.energy.dimension = 2L;
        p.energy.getEnergyBands().add(EnergyBand.OPTICAL);
        p.energy.resolvingPower = 2.0;
        p.energy.resolvingPowerBounds = new Interval(1.8, 2.2);
        p.energy.restwav = 600e-9;
        p.energy.sampleSize = 100e-6;
        p.energy.transition = new EnergyTransition("H", "alpha");
        p.polarization = new Polarization();
        p.polarization.dimension = 3L;
        p.polarization.states = new TreeSet<>();
        p.polarization.states.add(PolarizationState.I);
        p.polarization.states.add(PolarizationState.Q);
        p.polarization.states.add(PolarizationState.U);
        p.position = new Position();
        if (poly) {
            MultiPolygon mp = new MultiPolygon();
            mp.getVertices().add(new Vertex(2.0, 2.0, SegmentType.MOVE));
            mp.getVertices().add(new Vertex(1.0, 4.0, SegmentType.LINE));
            mp.getVertices().add(new Vertex(3.0, 3.0, SegmentType.LINE));
            mp.getVertices().add(new Vertex(0.0, 0.0, SegmentType.CLOSE));
            List<Point> points = new ArrayList<Point>();
            for (Vertex v : mp.getVertices()) {
                if (!SegmentType.CLOSE.equals(v.getType())) {
                    points.add(new Point(v.cval1, v.cval2));
                }
            }
            p.position.bounds = new Polygon(points, mp);
        } else {
            p.position.bounds = new Circle(new Point(0.0, 89.0), 2.0);
        }
        p.position.dimension = new Dimension2D(1024, 2048);
        p.position.resolution = 0.05;
        p.position.resolutionBounds = new Interval(0.04, 0.06);
        p.position.sampleSize = 0.025;
        p.position.timeDependent = false;
        p.time = new Time();
        p.time.bounds = new SampledInterval(50000.25, 50000.75);
        p.time.bounds.getSamples().add(new Interval(50000.25, 50000.40));
        p.time.bounds.getSamples().add(new Interval(50000.50, 50000.75));
        p.time.dimension = 2L;
        p.time.exposure = 666.0;
        p.time.resolution = 0.5;
        p.time.resolutionBounds = new Interval(0.22, 0.88);
        p.time.sampleSize = 0.15;
        p.custom = new CustomAxis("FDEP");
        p.custom.bounds = new SampledInterval(100.0, 200.0);
        p.custom.bounds.getSamples().add(new Interval(100.0, 140.0));
        p.custom.bounds.getSamples().add(new Interval(160.0, 200.0));
        p.custom.bounds.validate();
        p.custom.dimension = 1024L;
        p.observable = new Observable("phot.flux");
        p.getMetaReadGroups().add(URI.create("ivo://example.net/gms?GroupA"));
        p.getMetaReadGroups().add(URI.create("ivo://example.net/gms?GroupB"));
        p.getDataReadGroups().add(URI.create("ivo://example.net/gms?GroupC"));
        p.getDataReadGroups().add(URI.create("ivo://example.net/gms?GroupD"));
    }
    if (depth <= 2)
        return p;
    p.getArtifacts().add(getTestArtifact(full, new URI("http://www.example.com/stuff/" + productID + "a"), depth));
    p.getArtifacts().add(getTestArtifact(full, new URI("http://www.example.com/stuff/" + productID + "b"), depth));
    Assert.assertEquals(2, p.getArtifacts().size());
    return p;
}
Also used : Polarization(ca.nrc.cadc.caom2.Polarization) Vertex(ca.nrc.cadc.caom2.types.Vertex) Provenance(ca.nrc.cadc.caom2.Provenance) ObservationURI(ca.nrc.cadc.caom2.ObservationURI) SampledInterval(ca.nrc.cadc.caom2.types.SampledInterval) ArrayList(java.util.ArrayList) Time(ca.nrc.cadc.caom2.Time) EnergyTransition(ca.nrc.cadc.caom2.EnergyTransition) PlaneURI(ca.nrc.cadc.caom2.PlaneURI) URI(java.net.URI) ObservationURI(ca.nrc.cadc.caom2.ObservationURI) CustomAxis(ca.nrc.cadc.caom2.CustomAxis) PlaneURI(ca.nrc.cadc.caom2.PlaneURI) Metrics(ca.nrc.cadc.caom2.Metrics) Energy(ca.nrc.cadc.caom2.Energy) MultiPolygon(ca.nrc.cadc.caom2.types.MultiPolygon) Polygon(ca.nrc.cadc.caom2.types.Polygon) Circle(ca.nrc.cadc.caom2.types.Circle) Plane(ca.nrc.cadc.caom2.Plane) DataQuality(ca.nrc.cadc.caom2.DataQuality) Position(ca.nrc.cadc.caom2.Position) TargetPosition(ca.nrc.cadc.caom2.TargetPosition) Dimension2D(ca.nrc.cadc.caom2.wcs.Dimension2D) Point(ca.nrc.cadc.caom2.types.Point) Observable(ca.nrc.cadc.caom2.Observable) MultiPolygon(ca.nrc.cadc.caom2.types.MultiPolygon) Interval(ca.nrc.cadc.caom2.types.Interval) SampledInterval(ca.nrc.cadc.caom2.types.SampledInterval)

Aggregations

Point (ca.nrc.cadc.caom2.types.Point)4 Vertex (ca.nrc.cadc.caom2.types.Vertex)4 MultiPolygon (ca.nrc.cadc.caom2.types.MultiPolygon)3 Circle (ca.nrc.cadc.caom2.types.Circle)2 Polygon (ca.nrc.cadc.caom2.types.Polygon)2 SegmentType (ca.nrc.cadc.caom2.types.SegmentType)2 PgSpoint (ca.nrc.cadc.dali.postgresql.PgSpoint)2 ArrayList (java.util.ArrayList)2 CustomAxis (ca.nrc.cadc.caom2.CustomAxis)1 DataQuality (ca.nrc.cadc.caom2.DataQuality)1 Energy (ca.nrc.cadc.caom2.Energy)1 EnergyTransition (ca.nrc.cadc.caom2.EnergyTransition)1 Metrics (ca.nrc.cadc.caom2.Metrics)1 Observable (ca.nrc.cadc.caom2.Observable)1 ObservationURI (ca.nrc.cadc.caom2.ObservationURI)1 Plane (ca.nrc.cadc.caom2.Plane)1 PlaneURI (ca.nrc.cadc.caom2.PlaneURI)1 Polarization (ca.nrc.cadc.caom2.Polarization)1 Position (ca.nrc.cadc.caom2.Position)1 Provenance (ca.nrc.cadc.caom2.Provenance)1