001: //$HeadURL: https://svn.wald.intevation.org/svn/deegree/base/trunk/src/org/deegree/io/shpapi/SHPPolygon3D.java $
002: /*---------------- FILE HEADER ------------------------------------------
003:
004: This file is part of deegree.
005: Copyright (C) 2001-2008 by:
006: EXSE, Department of Geography, University of Bonn
007: http://www.giub.uni-bonn.de/exse/
008: lat/lon GmbH
009: http://www.lat-lon.de
010:
011: This library is free software; you can redistribute it and/or
012: modify it under the terms of the GNU Lesser General Public
013: License as published by the Free Software Foundation; either
014: version 2.1 of the License, or (at your option) any later version.
015:
016: This library is distributed in the hope that it will be useful,
017: but WITHOUT ANY WARRANTY; without even the implied warranty of
018: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
019: Lesser General Public License for more details.
020:
021: You should have received a copy of the GNU Lesser General Public
022: License along with this library; if not, write to the Free Software
023: Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
024:
025: Contact:
026:
027: Andreas Poth
028: lat/lon GmbH
029: Aennchenstr. 19
030: 53115 Bonn
031: Germany
032: E-Mail: poth@lat-lon.de
033:
034: Klaus Greve
035: Department of Geography
036: University of Bonn
037: Meckenheimer Allee 166
038: 53115 Bonn
039: Germany
040: E-Mail: klaus.greve@uni-bonn.de
041:
042:
043: ---------------------------------------------------------------------------*/
044: package org.deegree.io.shpapi;
045:
046: import org.deegree.model.spatialschema.Curve;
047: import org.deegree.model.spatialschema.CurveSegment;
048: import org.deegree.model.spatialschema.GeometryFactory;
049: import org.deegree.model.spatialschema.Ring;
050: import org.deegree.model.spatialschema.Surface;
051:
052: /**
053: * ...
054: *
055: * @author <a href="mailto:taddei@lat-lon.de">Ugo Taddei</a>
056: *
057: */
058: public class SHPPolygon3D extends SHPPolygon {
059:
060: boolean[] outer = null;
061:
062: /**
063: * @param recBuf
064: */
065: public SHPPolygon3D(byte[] recBuf) {
066:
067: super (recBuf);
068:
069: envelope = ShapeUtils.readBox(recBuf, 4);
070:
071: rings = new SHPPolyLine3D(recBuf);
072:
073: numPoints = rings.numPoints;
074: numRings = rings.numParts;
075:
076: }
077:
078: /**
079: * @param surface
080: */
081: public SHPPolygon3D(Surface[] surface) {
082: super (surface);
083: try {
084: int count = 0;
085:
086: for (int i = 0; i < surface.length; i++) {
087: // increment for exterior ring
088: count++;
089: // increment for inner rings
090: Ring[] rings = surface[i].getSurfaceBoundary()
091: .getInteriorRings();
092: if (rings != null) {
093: count += rings.length;
094: }
095: }
096:
097: Curve[] curves = new Curve[count];
098: outer = new boolean[count];
099:
100: count = 0;
101: for (int i = 0; i < surface.length; i++) {
102:
103: CurveSegment cs = surface[i].getSurfaceBoundary()
104: .getExteriorRing().getAsCurveSegment();
105: outer[count] = true;
106: curves[count++] = GeometryFactory.createCurve(cs);
107:
108: Ring[] rings = surface[i].getSurfaceBoundary()
109: .getInteriorRings();
110: if (rings != null) {
111: for (int j = 0; j < rings.length; j++) {
112: cs = rings[j].getAsCurveSegment();
113: outer[count] = false;
114: curves[count++] = GeometryFactory
115: .createCurve(cs);
116: }
117: }
118: }
119: rings = new SHPPolyLine3D(curves);
120:
121: envelope = rings.envelope;
122:
123: numPoints = rings.numPoints;
124: numRings = rings.numParts;
125:
126: } catch (Exception e) {
127: e.printStackTrace();
128: }
129:
130: }
131:
132: public SHPPolygon3D(SHPPolyLine3D rings) {
133: super ((Surface[]) null);
134: this.rings = rings;
135: numRings = rings.numParts;
136: }
137:
138: }
|