Statistics
| Revision:

svn-gvsig-desktop / tags / v1_1_Build_1009 / libraries / libCq CMS for java.old / src / org / cresques / io / ShpFileHeader.java @ 12649

History | View | Annotate | Download (6.05 KB)

1
package org.cresques.io;
2

    
3

    
4
/*
5
 *    GISToolkit - Geographical Information System Toolkit
6
 *    (C) 2002, Ithaqua Enterprises Inc.
7
 *
8
 *    This library is free software; you can redistribute it and/or
9
 *    modify it under the terms of the GNU Lesser General Public
10
 *    License as published by the Free Software Foundation;
11
 *    version 2.1 of the License.
12
 *
13
 *    This library is distributed in the hope that it will be useful,
14
 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
15
 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16
 *    Lesser General Public License for more details.
17
 *
18
 *    You should have received a copy of the GNU Lesser General Public
19
 *    License along with this library; if not, write to the Free Software
20
 *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
21
 *
22
 */
23
import java.nio.*;
24

    
25

    
26
/**
27
 * Procesa la cabecera de un .shp
28
 * @author "Luis W. Sevilla" <sevilla_lui@gva.es>* @author administrador
29
 */
30
public class ShpFileHeader {
31
    //}
32

    
33
    /**
34
     * Class to represent the header in the shape file.
35
     */
36

    
37
    //public class ShapeFileHeader {
38

    
39
    /**
40
     * Shape Type
41
     * Value Shape Type
42
     * 0 Null Shape
43
     * 1 Point
44
     * 3 PolyLine
45
     * 5 Polygon
46
     * 8 MultiPoint
47
     * 11 PointZ
48
     * 13 PolyLineZ
49
     * 15 PolygonZ
50
     * 18 MultiPointZ
51
     * 21 PointM
52
     * 23 PolyLineM
53
     * 25 PolygonM
54
     * 28 MultiPointM
55
     * 31 MultiPatch
56
     */
57

    
58
    /* The null shape type, there is no shape for this record. */
59
    public static final int SHAPE_NULL = 0;
60
    public static final int SHAPE_POINT = 1;
61
    public static final int SHAPE_POLYLINE = 3;
62
    public static final int SHAPE_POLYGON = 5;
63
    public static final int SHAPE_MULTIPOINT = 8;
64
    public static final int SHAPE_POINTZ = 11;
65
    public static final int SHAPE_POLYLINEZ = 13;
66
    public static final int SHAPE_POLYGONZ = 15;
67
    public static final int SHAPE_MULTIPOINTZ = 18;
68
    public static final int SHAPE_POINTM = 21;
69
    public static final int SHAPE_POLYLINEM = 23;
70
    public static final int SHAPE_POLYGONM = 25;
71
    public static final int SHAPE_MULTIPOINTM = 28;
72
    public static final int SHAPE_MULTIPATCH = 31;
73

    
74
    /**File Code, must be the value 9994*/
75
    int myFileCode = 9994;
76

    
77
    /**
78
     * Unused 1;
79
     */
80
    int myUnused1 = 0;
81

    
82
    /**
83
     * Unused 2;
84
     */
85
    int myUnused2 = 0;
86

    
87
    /**
88
     * Unused 3;
89
     */
90
    int myUnused3 = 0;
91

    
92
    /**
93
     * Unused 4;
94
     */
95
    int myUnused4 = 0;
96

    
97
    /**
98
     * Unused 5;
99
     */
100
    int myUnused5 = 0;
101

    
102
    /**File Length;*/
103
    int myFileLength = 0;
104

    
105
    /**Version of the file.*/
106
    int myVersion = 1000;
107
    int myShapeType = 0;
108

    
109
    /**
110
     * BoundingBox Xmin
111
     */
112
    double myXmin = 0;
113

    
114
    /**
115
     * BoundingBox Ymin
116
     */
117
    double myYmin = 0;
118

    
119
    /**
120
     * BoundingBox Xmax
121
     */
122
    double myXmax = 0;
123

    
124
    /**
125
     * BoundingBox Ymax
126
     */
127
    double myYmax = 0;
128

    
129
    /**
130
     * BoundingBox Zmin
131
     */
132
    double myZmin = 0;
133

    
134
    /**
135
     * BoundingBox Zmax
136
     */
137
    double myZmax = 0;
138

    
139
    /**
140
     * BoundingBox Zmin
141
     */
142
    double myMmin = 0;
143

    
144
    /**
145
     * BoundingBox Zmax
146
     */
147
    double myMmax = 0;
148

    
149
    // notify about warnings.
150
    private boolean myWarning = true;
151

    
152
    /**
153
     * ShapeFileHeader constructor comment.
154
     */
155
    public ShpFileHeader() {
156
        super();
157
    }
158

    
159
    /** Return the file code. */
160
    public int getFileCode() {
161
        return myFileCode;
162
    }
163

    
164
    /** Return the version of the file. */
165
    public int getVersion() {
166
        return myVersion;
167
    }
168

    
169
    /** Get the extents of the shape file. */
170
    public java.awt.geom.Rectangle2D.Double getFileExtents() {
171
        return new java.awt.geom.Rectangle2D.Double(myXmin, myYmin,
172
                                                    myXmax - myXmin,
173
                                                    myYmax - myYmin);
174
    }
175

    
176
    /** Print warnings to system.out. */
177
    public void setWarnings(boolean inWarning) {
178
        myWarning = inWarning;
179
    }
180

    
181
    /**
182
     * Return the length of the header in 16 bit words..
183
     */
184
    public int getHeaderLength() {
185
        return 50;
186
    }
187

    
188
    /**
189
     * Return the number of 16 bit words in the shape file as recorded in the header
190
     */
191
    public int getFileLength() {
192
        return myFileLength;
193
    }
194

    
195
    /**
196
     * Read the header from the shape file.
197
     */
198
    public void readHeader(ByteBuffer in) {
199
        // the first four bytes are integers
200
        // in.setLittleEndianMode(false);
201
        in.order(ByteOrder.BIG_ENDIAN);
202
        myFileCode = in.getInt();
203

    
204
        if (myFileCode != 9994) {
205
            warn("File Code = " + myFileCode + " Not equal to 9994");
206
        }
207

    
208
        // From 4 to 8 are unused.
209
        myUnused1 = in.getInt();
210

    
211
        // From 8 to 12 are unused.
212
        myUnused2 = in.getInt();
213

    
214
        // From 12 to 16 are unused.
215
        myUnused3 = in.getInt();
216

    
217
        // From 16 to 20 are unused.
218
        myUnused4 = in.getInt();
219

    
220
        // From 20 to 24 are unused.
221
        myUnused5 = in.getInt();
222

    
223
        // From 24 to 28 are the file length.
224
        myFileLength = in.getInt();
225

    
226
        // From 28 to 32 are the File Version.
227
        in.order(ByteOrder.LITTLE_ENDIAN);
228
        myVersion = in.getInt();
229

    
230
        // From 32 to 36 are the Shape Type.
231
        myShapeType = in.getInt();
232

    
233
        // From 36 to 44 are Xmin.
234
        myXmin = in.getDouble(); // Double.longBitsToDouble(in.getLong());
235

    
236
        // From 44 to 52 are Ymin.
237
        myYmin = in.getDouble();
238

    
239
        // From 52 to 60 are Xmax.
240
        myXmax = in.getDouble();
241

    
242
        // From 60 to 68 are Ymax.
243
        myYmax = in.getDouble();
244

    
245
        // From 68 to 76 are Zmin.
246
        myZmin = in.getDouble();
247

    
248
        // From 76 to 84 are Zmax.
249
        myZmax = in.getDouble();
250

    
251
        // From 84 to 92 are Mmin.
252
        myMmin = in.getDouble();
253

    
254
        // From 92 to 100 are Mmax.
255
        myMmax = in.getDouble();
256

    
257
        // that is all 100 bytes of the header.
258
    }
259

    
260
    private void warn(String inWarn) {
261
        if (myWarning) {
262
            System.out.print("WARNING: ");
263
            System.out.println(inWarn);
264
        }
265
    }
266
}