use of org.geotoolkit.gml.xml.v321.DirectPositionType in project ddf by codice.
the class SlotWebConverter method getPointMapFromPointType.
private static Map<String, Object> getPointMapFromPointType(PointType point) {
Map<String, Object> pointMap = new HashMap<>();
if (point.isSetSrsDimension()) {
pointMap.put(SRS_DIMENSION, point.getSrsDimension().intValue());
}
if (point.isSetSrsName()) {
pointMap.put(SRS_NAME, point.getSrsName());
}
if (point.isSetPos()) {
DirectPositionType directPosition = point.getPos();
List<String> pointValues = new ArrayList<>();
pointValues.addAll(directPosition.getValue().stream().map(String::valueOf).collect(Collectors.toList()));
String position = String.join(" ", pointValues);
if (StringUtils.isNotBlank(position)) {
pointMap.put(POSITION, position);
}
}
return pointMap;
}
use of org.geotoolkit.gml.xml.v321.DirectPositionType in project ddf by codice.
the class SlotTypeConverter method getEnvelope.
private Optional<EnvelopeType> getEnvelope(Map<String, Object> envelopeMap) {
Optional<EnvelopeType> optionalEnvelope = Optional.empty();
if (MapUtils.isEmpty(envelopeMap)) {
return optionalEnvelope;
}
optionalEnvelope = Optional.of(GML_FACTORY.createEnvelopeType());
String valueToPopulate = MapUtils.getString(envelopeMap, SRS_NAME);
if (StringUtils.isNotBlank(valueToPopulate)) {
optionalEnvelope.get().setSrsName(valueToPopulate);
}
String upperCorner = MapUtils.getString(envelopeMap, UPPER_CORNER);
String lowerCorner = MapUtils.getString(envelopeMap, LOWER_CORNER);
if (StringUtils.isNotBlank(upperCorner)) {
List<Double> values = Arrays.stream(StringUtils.split(upperCorner)).map(e -> new Double(e)).collect(Collectors.toList());
DirectPositionType directPosition = GML_FACTORY.createDirectPositionType();
directPosition.setValue(values);
optionalEnvelope.get().setUpperCorner(directPosition);
}
if (StringUtils.isNotBlank(lowerCorner)) {
List<Double> values = Arrays.stream(StringUtils.split(lowerCorner)).map(e -> new Double(e)).collect(Collectors.toList());
DirectPositionType directPosition = GML_FACTORY.createDirectPositionType();
directPosition.setValue(values);
optionalEnvelope.get().setLowerCorner(directPosition);
}
return optionalEnvelope;
}
use of org.geotoolkit.gml.xml.v321.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);
}
}
use of org.geotoolkit.gml.xml.v321.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);
}
}
use of org.geotoolkit.gml.xml.v321.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;
}
Aggregations