/***************************************************
*
* cismet GmbH, Saarbruecken, Germany
*
* ... and it just works.
*
****************************************************/
package de.cismet.cismap.commons;
import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.geom.GeometryFactory;
import com.vividsolutions.jts.geom.LinearRing;
import com.vividsolutions.jts.geom.PrecisionModel;
import com.vividsolutions.jts.geom.impl.CoordinateArraySequence;
import org.jdom.Attribute;
import org.jdom.DataConversionException;
import org.jdom.Element;
import java.util.List;
import de.cismet.cismap.commons.interaction.CismapBroker;
/**
* DOCUMENT ME!
*
* @author thorsten.hell@cismet.de
* @version $Revision$, $Date$
*/
public class XBoundingBox extends BoundingBox {
//~ Instance fields --------------------------------------------------------
private String srs;
private boolean metric = true;
//~ Constructors -----------------------------------------------------------
/**
* Creates a new BoundingBox object.
*
* @param geom DOCUMENT ME!
*/
public XBoundingBox(final Geometry geom) {
super(geom);
this.srs = CrsTransformer.createCrsFromSrid(geom.getSRID());
final List<Crs> crsList = CismapBroker.getInstance().getMappingComponent().getCrsList();
for (final Crs crsTmp : crsList) {
if (crsTmp.getCode().equals(this.srs)) {
this.metric = crsTmp.isMetric();
break;
}
}
}
/**
* Creates a new XBoundingBox object.
*
* @param boundingBoxElementParent DOCUMENT ME!
*
* @throws DataConversionException DOCUMENT ME!
*/
public XBoundingBox(final Element boundingBoxElementParent) throws DataConversionException {
super(boundingBoxElementParent);
final Element conf = boundingBoxElementParent.getChild("BoundingBox"); // NOI18N
final Attribute attributeSrs = conf.getAttribute("srs"); // NOI18N
final Attribute attributeMetric = conf.getAttribute("metric"); // NOI18N
if (attributeSrs != null) {
this.srs = attributeSrs.getValue();
} else {
this.srs = null;
}
if (attributeMetric != null) {
this.metric = attributeMetric.getBooleanValue();
} else {
this.metric = false;
}
}
/**
* Creates a new XBoundingBox object.
*
* @param geom DOCUMENT ME!
* @param crs DOCUMENT ME!
* @param metric DOCUMENT ME!
*/
public XBoundingBox(final Geometry geom, final String crs, final boolean metric) {
super(geom);
this.srs = crs;
this.metric = metric;
}
/**
* Creates a new XBoundingBox object.
*
* @param boundingBoxElementParent DOCUMENT ME!
* @param srs DOCUMENT ME!
* @param metric DOCUMENT ME!
*
* @throws DataConversionException DOCUMENT ME!
*/
public XBoundingBox(final Element boundingBoxElementParent, final String srs, final boolean metric)
throws DataConversionException {
super(boundingBoxElementParent);
this.srs = srs;
this.metric = metric;
}
/**
* Creates a new instance of XBoundingBox.
*
* @param x1 DOCUMENT ME!
* @param y1 DOCUMENT ME!
* @param x2 DOCUMENT ME!
* @param y2 DOCUMENT ME!
* @param srs DOCUMENT ME!
* @param metric DOCUMENT ME!
*/
public XBoundingBox(final double x1,
final double y1,
final double x2,
final double y2,
final String srs,
final boolean metric) {
super(x1, y1, x2, y2);
this.srs = srs;
this.metric = metric;
}
//~ Methods ----------------------------------------------------------------
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public String getSrs() {
return srs;
}
/**
* DOCUMENT ME!
*
* @param srs DOCUMENT ME!
*/
public void setSrs(final String srs) {
this.srs = srs;
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public boolean isMetric() {
return metric;
}
/**
* DOCUMENT ME!
*
* @param metric DOCUMENT ME!
*/
public void setMetric(final boolean metric) {
this.metric = metric;
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public Geometry getGeometry() {
final GeometryFactory factory = new GeometryFactory(
new PrecisionModel(PrecisionModel.FLOATING),
CrsTransformer.extractSridFromCrs(srs));
final Coordinate[] bbox = new Coordinate[5];
bbox[0] = new Coordinate(getX1(), getY1());
bbox[1] = new Coordinate(getX1(), getY2());
bbox[2] = new Coordinate(getX2(), getY2());
bbox[3] = new Coordinate(getX2(), getY1());
bbox[4] = new Coordinate(getX1(), getY1());
final LinearRing ring = new LinearRing(new CoordinateArraySequence(bbox), factory);
return factory.createPolygon(ring, new LinearRing[0]);
}
@Override
public Element getJDOMElement() {
final Element result = super.getJDOMElement();
result.setAttribute(new Attribute("srs", srs));
result.setAttribute(new Attribute("metric", Boolean.toString(metric)));
return result;
}
}