package org.geotoolkit.internal.jaxb;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;
import org.apache.sis.geometry.GeneralDirectPosition;
import org.geotoolkit.geometry.isoonjts.spatialschema.geometry.geometry.JTSLineString;
import org.apache.sis.referencing.CRS;
import org.opengis.geometry.coordinate.Position;
import org.opengis.util.FactoryException;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
import org.apache.sis.util.logging.Logging;
/**
*
* @author Guilhem Legal (Geomatys)
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "lineStringPosListType", namespace="http://www.opengis.net/gml")
public class LineStringPosListType {
@XmlAttribute
private String srsName;
@XmlElement(namespace = "http://www.opengis.net/gml")
private PosListType posList;
@XmlElement(namespace = "http://www.opengis.net/gml")
private CoordinatesType coordinates;
public LineStringPosListType() {
}
public LineStringPosListType(final List<Double> value) {
this.posList = new PosListType(value);
}
public LineStringPosListType(final JTSLineString lineString) {
this.srsName = CoordinateReferenceSystemAdapter.getSrsName(lineString.getCoordinateReferenceSystem());
List<Double> value = new ArrayList<Double>();
for (Position p : lineString.getPositions()) {
for (int i = 0; i < p.getDirectPosition().getDimension(); i++) {
value.add(p.getDirectPosition().getOrdinate(i));
}
}
posList = new PosListType(value);
}
public JTSLineString getJTSLineString() {
CoordinateReferenceSystem crs = null;
if (this.srsName != null) {
try {
crs = CRS.forCode(srsName);
} catch (FactoryException ex) {
Logging.getLogger("org.geotoolkit.internal.jaxb").log(Level.WARNING, null, ex);
}
}
final JTSLineString result = new JTSLineString(crs);
if (posList != null) {
for (int i = 0; i < posList.getValue().size(); i = i + 2) {
result.getPositions().add(new GeneralDirectPosition(posList.getValue().get(i), posList.getValue().get(i + 1)));
}
} else if (coordinates != null) {
for (int i = 0; i < coordinates.getValues().size(); i = i + 2) {
result.getPositions().add(new GeneralDirectPosition(coordinates.getValues().get(i), coordinates.getValues().get(i + 1)));
}
}
return result;
}
/**
* @return the srsName
*/
public String getSrsName() {
return srsName;
}
/**
* @param srsName the srsName to set
*/
public void setSrsName(final String srsName) {
this.srsName = srsName;
}
/**
* @return the posList
*/
public PosListType getPosList() {
return posList;
}
/**
* @param posList the posList to set
*/
public void setPosList(final PosListType posList) {
this.posList = posList;
}
/**
* @return the coordinates
*/
public CoordinatesType getCoordinates() {
return coordinates;
}
/**
* @param coordinates the coordinates to set
*/
public void setCoordinates(CoordinatesType coordinates) {
this.coordinates = coordinates;
}
}