Search in sources :

Example 16 with DirectPositionType

use of net.opengis.gml.x32.DirectPositionType in project arctic-sea by 52North.

the class GmlDecoderv321 method getCoordString4LinearRing.

/**
 * method parses the passed linearRing(generated thru XmlBEans) and returns a string containing the coordinate
 * values of the passed ring
 *
 * @param xbLinearRing linearRing(generated thru XmlBEans)
 *
 * @return Returns a string containing the coordinate values of the passed ring
 *
 * @throws DecodingException * if parsing the linear Ring failed
 */
private String getCoordString4LinearRing(LinearRingType xbLinearRing) throws DecodingException {
    String result = "";
    DirectPositionListType xbPosList = xbLinearRing.getPosList();
    CoordinatesType xbCoordinates = xbLinearRing.getCoordinates();
    DirectPositionType[] xbPosArray = xbLinearRing.getPosArray();
    if (xbPosList != null && !(xbPosList.getStringValue().isEmpty())) {
        result = getString4PosList(xbPosList);
    } else if (xbCoordinates != null && !(xbCoordinates.getStringValue().isEmpty())) {
        result = getString4Coordinates(xbCoordinates);
    } else if (xbPosArray != null && xbPosArray.length > 0) {
        result = getString4PosArray(xbPosArray, true);
    } else {
        throw new DecodingException("The Polygon must contain the following elements " + "<gml:exterior><gml:LinearRing><gml:posList>, " + "<gml:exterior><gml:LinearRing><gml:coordinates> " + "or <gml:exterior><gml:LinearRing><gml:pos>{<gml:pos>}!");
    }
    return result;
}
Also used : DirectPositionType(net.opengis.gml.x32.DirectPositionType) DirectPositionListType(net.opengis.gml.x32.DirectPositionListType) DecodingException(org.n52.svalbard.decode.exception.DecodingException) CoordinatesType(net.opengis.gml.x32.CoordinatesType)

Example 17 with DirectPositionType

use of net.opengis.gml.x32.DirectPositionType in project arctic-sea by 52North.

the class GmlDecoderv321 method parseLineStringType.

private Geometry parseLineStringType(LineStringType xbLineStringType) throws DecodingException {
    int srid = -1;
    if (xbLineStringType.getSrsName() != null) {
        srid = CRSHelper.parseSrsName(xbLineStringType.getSrsName());
    }
    DirectPositionType[] xbPositions = xbLineStringType.getPosArray();
    String geomWKT;
    if (xbPositions != null && xbPositions.length > 0) {
        if (srid == -1 && xbPositions[0].getSrsName() != null && !(xbPositions[0].getSrsName().isEmpty())) {
            srid = CRSHelper.parseSrsName(xbPositions[0].getSrsName());
        }
        geomWKT = "LINESTRING" + getString4PosArray(xbLineStringType.getPosArray(), false) + "";
    } else if (xbLineStringType.getPosList() != null) {
        StringBuilder builder = new StringBuilder();
        builder.append("LINESTRING(");
        DirectPositionListType posList = xbLineStringType.getPosList();
        int dim;
        if (posList.getSrsDimension() == null) {
            dim = 2;
        } else {
            dim = posList.getSrsDimension().intValue();
        }
        if (posList.getListValue().size() % dim != 0) {
            throw new DecodingException("posList does not contain a multiple of %d coordinates", dim);
        }
        @SuppressWarnings("unchecked") Iterator<Double> iterator = posList.getListValue().iterator();
        if (iterator.hasNext()) {
            builder.append(iterator.next());
            for (int i = 1; i < dim; ++i) {
                builder.append(' ').append(iterator.next());
            }
            while (iterator.hasNext()) {
                builder.append(", ");
                builder.append(iterator.next());
                for (int i = 1; i < dim; ++i) {
                    builder.append(' ').append(iterator.next());
                }
            }
        }
        builder.append(")");
        geomWKT = builder.toString();
    } else {
        geomWKT = null;
    }
    srid = setDefaultForUnsetSrid(srid);
    if (geomWKT != null) {
        try {
            return JTSHelper.createGeometryFromWKT(geomWKT, srid);
        } catch (ParseException ex) {
            throw new DecodingException(ex);
        }
    } else {
        return JTSHelper.getGeometryFactoryForSRID(srid).createGeometryCollection(null);
    }
}
Also used : DirectPositionType(net.opengis.gml.x32.DirectPositionType) DirectPositionListType(net.opengis.gml.x32.DirectPositionListType) Iterator(java.util.Iterator) DecodingException(org.n52.svalbard.decode.exception.DecodingException) DateTimeParseException(org.n52.shetland.util.DateTimeParseException) ParseException(org.locationtech.jts.io.ParseException)

Example 18 with DirectPositionType

use of net.opengis.gml.x32.DirectPositionType in project arctic-sea by 52North.

the class GmlDecoderv321 method parsePointType.

private Geometry parsePointType(PointType xbPointType) throws DecodingException {
    String geomWKT = null;
    int srid = -1;
    if (xbPointType.getSrsName() != null) {
        srid = CRSHelper.parseSrsName(xbPointType.getSrsName());
    }
    if (xbPointType.getPos() != null) {
        DirectPositionType xbPos = xbPointType.getPos();
        if (srid == -1 && xbPos.getSrsName() != null) {
            srid = CRSHelper.parseSrsName(xbPos.getSrsName());
        }
        String directPosition = getString4Pos(xbPos);
        geomWKT = "POINT(" + directPosition + ")";
    } else if (xbPointType.getCoordinates() != null) {
        CoordinatesType xbCoords = xbPointType.getCoordinates();
        String directPosition = getString4Coordinates(xbCoords);
        geomWKT = "POINT" + directPosition;
    } else {
        throw new DecodingException("For geometry type 'gml:Point' only element " + "'gml:pos' and 'gml:coordinates' are allowed " + "in the feature of interest parameter!");
    }
    srid = setDefaultForUnsetSrid(srid);
    try {
        return JTSHelper.createGeometryFromWKT(geomWKT, srid);
    } catch (ParseException ex) {
        throw new DecodingException(ex);
    }
}
Also used : DirectPositionType(net.opengis.gml.x32.DirectPositionType) DecodingException(org.n52.svalbard.decode.exception.DecodingException) DateTimeParseException(org.n52.shetland.util.DateTimeParseException) ParseException(org.locationtech.jts.io.ParseException) CoordinatesType(net.opengis.gml.x32.CoordinatesType)

Example 19 with DirectPositionType

use of net.opengis.gml.x32.DirectPositionType in project arctic-sea by 52North.

the class GmlEncoderv321 method createPointFromJtsGeometry.

/**
 * Creates a XML Point from a SOS Point.
 *
 * @param jtsPoint
 *            SOS Point
 * @param xbPoint
 *            XML Point
 */
private void createPointFromJtsGeometry(Point jtsPoint, PointType xbPoint) {
    DirectPositionType xbPos = xbPoint.addNewPos();
    xbPos.setSrsName(getSrsName(jtsPoint));
    xbPos.setStringValue(JTSHelper.getCoordinatesString(jtsPoint));
}
Also used : DirectPositionType(net.opengis.gml.x32.DirectPositionType)

Aggregations

DirectPositionType (net.opengis.gml.v_3_1_1.DirectPositionType)10 EnvelopeType (net.opengis.gml.v_3_1_1.EnvelopeType)7 BBOXType (net.opengis.filter.v_1_1_0.BBOXType)5 DirectPositionType (net.opengis.gml.x32.DirectPositionType)5 FilterType (net.opengis.filter.v_1_1_0.FilterType)4 DirectPositionType (net.opengis.gml.v_3_2_1.DirectPositionType)4 ArrayList (java.util.ArrayList)3 PointType (net.opengis.gml.v_3_1_1.PointType)3 Test (org.junit.Test)3 DecodingException (org.n52.svalbard.decode.exception.DecodingException)3 BigInteger (java.math.BigInteger)2 AnyValueType (net.opengis.cat.wrs.v_1_0_2.AnyValueType)2 CoordinatesType (net.opengis.gml.x32.CoordinatesType)2 DirectPositionListType (net.opengis.gml.x32.DirectPositionListType)2 SlotType1 (oasis.names.tc.ebxml_regrep.xsd.rim._3.SlotType1)2 Envelope (org.locationtech.jts.geom.Envelope)2 ParseException (org.locationtech.jts.io.ParseException)2 DateTimeParseException (org.n52.shetland.util.DateTimeParseException)2 Arrays (java.util.Arrays)1 HashMap (java.util.HashMap)1