Search in sources :

Example 1 with Envelope

use of org.geotoolkit.gml.xml.Envelope in project geotoolkit by Geomatys.

the class BBOXType method getMaxX.

@Override
public double getMaxX() {
    Object candidate = getAny();
    if (candidate instanceof JAXBElement) {
        candidate = ((JAXBElement) candidate).getValue();
    }
    if (candidate instanceof Envelope) {
        final Envelope env = (Envelope) candidate;
        final DirectPosition pos = env.getUpperCorner();
        if (pos != null && pos.getCoordinate() != null && pos.getCoordinate().length > 1) {
            return pos.getCoordinate()[0];
        }
    }
    return -1;
}
Also used : DirectPosition(org.opengis.geometry.DirectPosition) JAXBElement(javax.xml.bind.JAXBElement) Envelope(org.geotoolkit.gml.xml.Envelope)

Example 2 with Envelope

use of org.geotoolkit.gml.xml.Envelope in project geotoolkit by Geomatys.

the class GeometryTransformer method get.

/**
 * Procede to conversion from GML to JTS.
 * @return Created JTS geometry. Never null, but can be an emptry geometry.
 * @throws UnconvertibleObjectException If we don't know how to process
 * source GML geometry.
 */
@Override
public Geometry get() throws UnconvertibleObjectException {
    Geometry geometry;
    /*
         * SIMPLE CASES
         */
    if (source instanceof org.geotoolkit.gml.xml.Point) {
        geometry = accumulateAndBuild(coords -> (coords.length > 0 ? GF.createPoint(coords[0]) : GF.createPoint((Coordinate) null)));
    } else if (source instanceof org.geotoolkit.gml.xml.LineString) {
        geometry = accumulateAndBuild(GF::createLineString);
    } else if (source instanceof org.geotoolkit.gml.xml.LinearRing) {
        geometry = accumulateAndBuild(GF::createLinearRing);
    } else if (source instanceof Curve) {
        geometry = convertCurve((Curve) source);
    } else if (source instanceof Envelope) {
        geometry = convertEnvelope((Envelope) source);
    /*
             * COMPOSED GEOMETRIES
             */
    } else if (source instanceof org.geotoolkit.gml.xml.Ring) {
        geometry = convertRing((Ring) source);
    } else if (source instanceof org.geotoolkit.gml.xml.Polygon) {
        geometry = convertPolygon((org.geotoolkit.gml.xml.Polygon) source);
        if (isForceMultiPolygon()) {
            Polygon[] polys = { (Polygon) geometry };
            final MultiPolygon result = GF.createMultiPolygon(polys);
            applyCRS(result);
            geometry = result;
        }
    } else if (source instanceof AbstractSurface) {
        if (source instanceof SurfaceType) {
            geometry = convertSurface((SurfaceType) source);
        } else if (source instanceof org.geotoolkit.gml.xml.v311.SurfaceType) {
            geometry = convertSurface((org.geotoolkit.gml.xml.v311.SurfaceType) source);
        } else // TODO : complex case
        {
            throw new IllegalArgumentException("Unsupported geometry type : " + source.getClass());
        }
    /*
             * GEOMETRY COLLECTIONS
             */
    } else if (source instanceof org.geotoolkit.gml.xml.MultiPoint) {
        geometry = convertMultiPoint((org.geotoolkit.gml.xml.MultiPoint) source);
    } else if (source instanceof org.geotoolkit.gml.xml.MultiLineString) {
        geometry = convertMultiLineString((org.geotoolkit.gml.xml.MultiLineString) source);
    } else if (source instanceof MultiCurve) {
        geometry = convertMultiCurve((MultiCurve) source);
    } else if (source instanceof org.geotoolkit.gml.xml.MultiPolygon) {
        geometry = convertMultiPolygon((org.geotoolkit.gml.xml.MultiPolygon) source);
    } else if (source instanceof MultiSurface) {
        geometry = convertMultiSurface((MultiSurface) source);
    } else if (source instanceof MultiGeometry) {
        geometry = convertMultiGeometry((MultiGeometry) source);
    } else {
        throw new IllegalArgumentException("Unsupported geometry type : " + source.getClass());
    }
    // store identifier in user map
    final String id = source.getId();
    if (id != null && !id.isEmpty()) {
        Object userData = geometry.getUserData();
        Map values;
        if (userData instanceof Map) {
            values = (Map) userData;
        } else if (userData instanceof CoordinateReferenceSystem) {
            values = new HashMap();
            values.put(org.apache.sis.internal.feature.jts.JTS.CRS_KEY, userData);
        } else if (userData == null) {
            values = new HashMap();
        } else {
            throw new IllegalArgumentException("Unexpected user data object : " + userData);
        }
        values.put("@id", id);
        geometry.setUserData(values);
    }
    return geometry;
}
Also used : Measure(org.apache.sis.internal.jaxb.gml.Measure) Unit(javax.measure.Unit) CRS(org.apache.sis.referencing.CRS) GeodeticCalculator(org.apache.sis.referencing.GeodeticCalculator) Spliterators(java.util.Spliterators) NoSuchAuthorityCodeException(org.opengis.referencing.NoSuchAuthorityCodeException) Coordinate(org.locationtech.jts.geom.Coordinate) MeasureType(org.geotoolkit.gml.xml.v321.MeasureType) PolygonPatchType(org.geotoolkit.gml.xml.v321.PolygonPatchType) Envelope(org.geotoolkit.gml.xml.Envelope) Matcher(java.util.regex.Matcher) SingleCRS(org.opengis.referencing.crs.SingleCRS) GeometryProperty(org.geotoolkit.gml.xml.GeometryProperty) Map(java.util.Map) Ring(org.geotoolkit.gml.xml.Ring) TransformException(org.opengis.referencing.operation.TransformException) MultiLineString(org.locationtech.jts.geom.MultiLineString) AxesConvention(org.apache.sis.referencing.cs.AxesConvention) AbstractCRS(org.apache.sis.referencing.crs.AbstractCRS) Logger(java.util.logging.Logger) MultiSurface(org.geotoolkit.gml.xml.MultiSurface) Objects(java.util.Objects) Cache(org.apache.sis.util.collection.Cache) List(java.util.List) Stream(java.util.stream.Stream) UnconvertibleObjectException(org.apache.sis.util.UnconvertibleObjectException) Polygon(org.locationtech.jts.geom.Polygon) Optional(java.util.Optional) Geometry(org.locationtech.jts.geom.Geometry) SurfaceType(org.geotoolkit.gml.xml.v321.SurfaceType) Pattern(java.util.regex.Pattern) Spliterator(java.util.Spliterator) CoordinateReferenceSystem(org.opengis.referencing.crs.CoordinateReferenceSystem) FactoryException(org.opengis.util.FactoryException) MultiPolygon(org.locationtech.jts.geom.MultiPolygon) Coordinates(org.geotoolkit.gml.xml.Coordinates) PointProperty(org.geotoolkit.gml.xml.PointProperty) ArgumentChecks(org.apache.sis.util.ArgumentChecks) DoubleFunction(java.util.function.DoubleFunction) LinearRing(org.locationtech.jts.geom.LinearRing) HashMap(java.util.HashMap) DirectPositionList(org.geotoolkit.gml.xml.DirectPositionList) Function(java.util.function.Function) Supplier(java.util.function.Supplier) CurveProperty(org.geotoolkit.gml.xml.CurveProperty) MultiGeometry(org.geotoolkit.gml.xml.MultiGeometry) ArrayList(java.util.ArrayList) Angle(javax.measure.quantity.Angle) AbstractGeometry(org.geotoolkit.gml.xml.AbstractGeometry) Length(javax.measure.quantity.Length) GeneralDirectPosition(org.apache.sis.geometry.GeneralDirectPosition) AbstractCurveSegment(org.geotoolkit.gml.xml.AbstractCurveSegment) WithCoordinates(org.geotoolkit.gml.xml.WithCoordinates) AxisDirections(org.apache.sis.internal.referencing.AxisDirections) PointPropertyType(org.geotoolkit.gml.xml.v321.PointPropertyType) CurveSegmentArrayProperty(org.geotoolkit.gml.xml.CurveSegmentArrayProperty) StreamSupport(java.util.stream.StreamSupport) Point(org.geotoolkit.gml.xml.Point) NoSuchElementException(java.util.NoSuchElementException) DirectPosition(org.opengis.geometry.DirectPosition) Units(org.apache.sis.measure.Units) GeometryFactory(org.locationtech.jts.geom.GeometryFactory) Iterator(java.util.Iterator) PolygonProperty(org.geotoolkit.gml.xml.PolygonProperty) JTS(org.geotoolkit.geometry.jts.JTS) AbstractSurface(org.geotoolkit.gml.xml.AbstractSurface) Consumer(java.util.function.Consumer) MultiCurve(org.geotoolkit.gml.xml.MultiCurve) GeometryCollection(org.locationtech.jts.geom.GeometryCollection) LineString(org.locationtech.jts.geom.LineString) AbstractMap(java.util.AbstractMap) ArcByCenterPointType(org.geotoolkit.gml.xml.v321.ArcByCenterPointType) Curve(org.geotoolkit.gml.xml.Curve) AbstractRingProperty(org.geotoolkit.gml.xml.AbstractRingProperty) MultiPoint(org.locationtech.jts.geom.MultiPoint) SurfaceProperty(org.geotoolkit.gml.xml.SurfaceProperty) Collections(java.util.Collections) LineStringProperty(org.geotoolkit.gml.xml.LineStringProperty) AbstractRing(org.geotoolkit.gml.xml.AbstractRing) MultiPoint(org.locationtech.jts.geom.MultiPoint) MultiSurface(org.geotoolkit.gml.xml.MultiSurface) HashMap(java.util.HashMap) MultiLineString(org.locationtech.jts.geom.MultiLineString) LineString(org.locationtech.jts.geom.LineString) Envelope(org.geotoolkit.gml.xml.Envelope) MultiCurve(org.geotoolkit.gml.xml.MultiCurve) Ring(org.geotoolkit.gml.xml.Ring) CoordinateReferenceSystem(org.opengis.referencing.crs.CoordinateReferenceSystem) Polygon(org.locationtech.jts.geom.Polygon) MultiPolygon(org.locationtech.jts.geom.MultiPolygon) MultiCurve(org.geotoolkit.gml.xml.MultiCurve) Curve(org.geotoolkit.gml.xml.Curve) Point(org.geotoolkit.gml.xml.Point) MultiPoint(org.locationtech.jts.geom.MultiPoint) SurfaceType(org.geotoolkit.gml.xml.v321.SurfaceType) AbstractSurface(org.geotoolkit.gml.xml.AbstractSurface) Geometry(org.locationtech.jts.geom.Geometry) MultiGeometry(org.geotoolkit.gml.xml.MultiGeometry) AbstractGeometry(org.geotoolkit.gml.xml.AbstractGeometry) MultiPolygon(org.locationtech.jts.geom.MultiPolygon) MultiGeometry(org.geotoolkit.gml.xml.MultiGeometry) LinearRing(org.locationtech.jts.geom.LinearRing) Map(java.util.Map) HashMap(java.util.HashMap) AbstractMap(java.util.AbstractMap)

Example 3 with Envelope

use of org.geotoolkit.gml.xml.Envelope in project geotoolkit by Geomatys.

the class OMUtils method getCollectionBound.

/**
 * Return an envelope containing all the Observation member of the collection.
 *
 * @param version
 * @param observations
 * @param srsName
 * @return
 */
public static Envelope getCollectionBound(final String version, final List<Observation> observations, final String srsName) {
    double minx = Double.MAX_VALUE;
    double miny = Double.MAX_VALUE;
    double maxx = -Double.MAX_VALUE;
    double maxy = -Double.MAX_VALUE;
    for (Observation observation : observations) {
        final AbstractFeature feature = (AbstractFeature) observation.getFeatureOfInterest();
        if (feature != null) {
            if (feature.getBoundedBy() != null) {
                final BoundingShape bound = feature.getBoundedBy();
                if (bound.getEnvelope() != null) {
                    if (bound.getEnvelope().getLowerCorner() != null && bound.getEnvelope().getLowerCorner().getCoordinate() != null && bound.getEnvelope().getLowerCorner().getCoordinate().length == 2) {
                        final double[] lower = bound.getEnvelope().getLowerCorner().getCoordinate();
                        if (lower[0] < minx) {
                            minx = lower[0];
                        }
                        if (lower[1] < miny) {
                            miny = lower[1];
                        }
                    }
                    if (bound.getEnvelope().getUpperCorner() != null && bound.getEnvelope().getUpperCorner().getCoordinate() != null && bound.getEnvelope().getUpperCorner().getCoordinate().length == 2) {
                        final double[] upper = bound.getEnvelope().getUpperCorner().getCoordinate();
                        if (upper[0] > maxx) {
                            maxx = upper[0];
                        }
                        if (upper[1] > maxy) {
                            maxy = upper[1];
                        }
                    }
                }
            }
        }
    }
    if (minx == Double.MAX_VALUE) {
        minx = -180.0;
    }
    if (miny == Double.MAX_VALUE) {
        miny = -90.0;
    }
    if (maxx == (-Double.MAX_VALUE)) {
        maxx = 180.0;
    }
    if (maxy == (-Double.MAX_VALUE)) {
        maxy = 90.0;
    }
    final Envelope env = SOSXmlFactory.buildEnvelope(version, null, minx, miny, maxx, maxy, srsName);
    env.setSrsDimension(2);
    env.setAxisLabels(Arrays.asList("Y X"));
    return env;
}
Also used : BoundingShape(org.geotoolkit.gml.xml.BoundingShape) Observation(org.opengis.observation.Observation) AbstractObservation(org.geotoolkit.observation.xml.AbstractObservation) AbstractFeature(org.geotoolkit.gml.xml.AbstractFeature) Envelope(org.geotoolkit.gml.xml.Envelope)

Example 4 with Envelope

use of org.geotoolkit.gml.xml.Envelope in project geotoolkit by Geomatys.

the class GeoSpatialBound method extractBoundary.

private void extractBoundary(final AbstractGeometry geom) {
    if (geom instanceof Point) {
        final Point p = (Point) geom;
        if (p.getPos() != null) {
            addXCoordinate(p.getPos().getOrdinate(0));
            addYCoordinate(p.getPos().getOrdinate(1));
        }
    } else if (geom instanceof LineString) {
        final LineString ls = (LineString) geom;
        final Envelope env = ls.getBounds();
        if (env != null) {
            addXCoordinate(env.getMinimum(0));
            addXCoordinate(env.getMaximum(0));
            addYCoordinate(env.getMinimum(1));
            addYCoordinate(env.getMaximum(1));
        }
    } else if (geom instanceof Polygon) {
        final Polygon p = (Polygon) geom;
        AbstractRing ext = p.getExterior().getAbstractRing();
    // TODO
    }
}
Also used : AbstractRing(org.geotoolkit.gml.xml.AbstractRing) LineString(org.geotoolkit.gml.xml.LineString) Point(org.geotoolkit.gml.xml.Point) Envelope(org.geotoolkit.gml.xml.Envelope) Polygon(org.geotoolkit.gml.xml.Polygon)

Example 5 with Envelope

use of org.geotoolkit.gml.xml.Envelope in project geotoolkit by Geomatys.

the class GeometryTransformer method convertEnvelope.

private Polygon convertEnvelope(final Envelope source) {
    final org.locationtech.jts.geom.Envelope e = new org.locationtech.jts.geom.Envelope(convertDirectPosition(source.getLowerCorner()), convertDirectPosition(source.getUpperCorner()));
    final Polygon geom = JTS.toGeometry(e);
    applyCRS(geom);
    return geom;
}
Also used : Envelope(org.geotoolkit.gml.xml.Envelope) Polygon(org.locationtech.jts.geom.Polygon) MultiPolygon(org.locationtech.jts.geom.MultiPolygon)

Aggregations

Envelope (org.geotoolkit.gml.xml.Envelope)8 DirectPosition (org.opengis.geometry.DirectPosition)5 JAXBElement (javax.xml.bind.JAXBElement)4 AbstractMap (java.util.AbstractMap)1 ArrayList (java.util.ArrayList)1 Collections (java.util.Collections)1 HashMap (java.util.HashMap)1 Iterator (java.util.Iterator)1 List (java.util.List)1 Map (java.util.Map)1 NoSuchElementException (java.util.NoSuchElementException)1 Objects (java.util.Objects)1 Optional (java.util.Optional)1 Spliterator (java.util.Spliterator)1 Spliterators (java.util.Spliterators)1 Consumer (java.util.function.Consumer)1 DoubleFunction (java.util.function.DoubleFunction)1 Function (java.util.function.Function)1 Supplier (java.util.function.Supplier)1 Logger (java.util.logging.Logger)1