PolygonDecoder.java
package de.turnertech.ows.gml;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import de.turnertech.ows.srs.SpatialReferenceSystem;
public class PolygonDecoder implements GmlDecoder<Polygon> {
@Override
public Polygon decode(Node root, GmlDecoderContext context) {
Polygon returnPolygon = new Polygon();
Node srsNode = root.getAttributes().getNamedItem("srsName");
SpatialReferenceSystem srs = null;
if(srsNode != null) {
srs = SpatialReferenceSystem.from(srsNode.getNodeValue());
if(srs != null) {
context.getSrsDeque().push(srs);
}
}
NodeList children = root.getChildNodes();
for(int i = 0; i < children.getLength(); ++i) {
Node child = children.item(i);
if(child.getNodeType() != Node.ELEMENT_NODE) {
continue;
}
if("exterior".equals(child.getNodeName())) {
Element element = (Element)child;
LinearRing exterior = new LinearRingDecoder().decode(element.getElementsByTagName("LinearRing").item(0), context);
returnPolygon.setExterior(exterior);
}
}
if(srs != null) {
context.getSrsDeque().pop();
}
return returnPolygon;
}
}