Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.compat.cdc / org.gvsig.fmap.geometry / org.gvsig.fmap.geometry.jts / src / test / java / org / gvsig / fmap / geom / jts / operation / towkb / TestOGCWKBEncoder.java @ 47432

History | View | Annotate | Download (17.3 KB)

1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (C) 2007-2013 gvSIG Association.
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 3
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21
 * For any additional information, do not hesitate to contact us
22
 * at info AT gvsig.com, or visit our website www.gvsig.com.
23
 */
24
package org.gvsig.fmap.geom.jts.operation.towkb;
25

    
26
import org.gvsig.fmap.geom.Geometry;
27
import org.gvsig.fmap.geom.GeometryLocator;
28
import org.gvsig.fmap.geom.GeometryManager;
29
import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase;
30

    
31

    
32
public class TestOGCWKBEncoder extends AbstractLibraryAutoInitTestCase {
33

    
34
    private static class Data {
35
    
36
        public String wkt;
37
        public String wkb;
38
        public int byteOrder;
39
        public boolean skip;
40
        
41
        public Data(String wkt, String wkb, int byteOrder, boolean skip) {
42
            this.wkt = wkt;
43
            this.wkb = wkb;
44
            this.byteOrder = byteOrder;
45
            this.skip = skip;
46
        }
47
        
48
    }
49
    
50
    @Override
51
    protected void doSetUp() throws Exception {
52
    }
53
    
54
    public String bytearray(byte[] data) {
55
        StringBuilder builder = new StringBuilder();
56
        builder.append("0x");
57
        for (byte abyte : data) {
58
            int v = abyte & 0xff;
59
            builder.append(String.format("%02x", v));
60
        }
61
        return builder.toString();
62
    }
63
    
64
    public void test1() throws Exception {
65
        GeometryManager manager = GeometryLocator.getGeometryManager();
66
        Data[] allData = new Data[] {
67
            new Data(
68
                "POINT (30 10)",
69
                "0x01010000000000000000003E400000000000002440",
70
                OGCWKBEncoder.wkbByteOrder.wkbNDR,
71
                false
72
            ),
73
            new Data(
74
                "LINESTRING (30 10, 10 30, 40 40)",
75
                "0x0102000000030000000000000000003E40000000000000244000000000000024400000000000003E4000000000000044400000000000004440",
76
                OGCWKBEncoder.wkbByteOrder.wkbNDR,
77
                false
78
            ),
79
            new Data(
80
                "POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))",
81
                "0x010300000001000000050000000000000000003E4000000000000024400000000000004440000000000000444000000000000034400000000000004440000000000000244000000000000034400000000000003E400000000000002440",
82
                OGCWKBEncoder.wkbByteOrder.wkbNDR,
83
                false
84
            ),
85
            new Data(
86
                "POLYGON ((35 10, 45 45, 15 40, 10 20, 35 10),(20 30, 35 35, 30 20, 20 30))",
87
                "0x0103000000020000000500000000000000008041400000000000002440000000000080464000000000008046400000000000002E40000000000000444000000000000024400000000000003440000000000080414000000000000024400400000000000000000034400000000000003E40000000000080414000000000008041400000000000003E40000000000000344000000000000034400000000000003E40",
88
                OGCWKBEncoder.wkbByteOrder.wkbNDR,
89
                false
90
            ),
91
            new Data(
92
                "MULTIPOINT ((10 40), (40 30), (20 20), (30 10))",
93
                "0x010400000004000000010100000000000000000024400000000000004440010100000000000000000044400000000000003E4001010000000000000000003440000000000000344001010000000000000000003E400000000000002440",
94
                OGCWKBEncoder.wkbByteOrder.wkbNDR,
95
                false
96
            ),
97
            new Data(
98
                "MULTIPOINT (10 40, 40 30, 20 20, 30 10)",
99
                "0x010400000004000000010100000000000000000024400000000000004440010100000000000000000044400000000000003E4001010000000000000000003440000000000000344001010000000000000000003E400000000000002440",
100
                OGCWKBEncoder.wkbByteOrder.wkbNDR,
101
                false
102
            ),
103
            new Data(
104
                "MULTILINESTRING ((10 10, 20 20, 10 40),(40 40, 30 30, 40 20, 30 10))",
105
                "0x010500000002000000010200000003000000000000000000244000000000000024400000000000003440000000000000344000000000000024400000000000004440010200000004000000000000000000444000000000000044400000000000003E400000000000003E40000000000000444000000000000034400000000000003E400000000000002440",
106
                OGCWKBEncoder.wkbByteOrder.wkbNDR,
107
                false
108
            ),
109
            new Data(
110
                "MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)),((15 5, 40 10, 10 20, 5 10, 15 5)))",
111
                "0x010600000002000000010300000001000000040000000000000000003E40000000000000344000000000008046400000000000004440000000000000244000000000000044400000000000003E400000000000003440010300000001000000050000000000000000002E4000000000000014400000000000004440000000000000244000000000000024400000000000003440000000000000144000000000000024400000000000002E400000000000001440",
112
                OGCWKBEncoder.wkbByteOrder.wkbNDR,
113
                false
114
            ),
115
            new Data(
116
                "MULTIPOLYGON (((40 40, 20 45, 45 30, 40 40)),((20 35, 10 30, 10 10, 30 5, 45 20, 20 35),(30 20, 20 15, 20 25, 30 20)))",
117
                "0x01060000000200000001030000000100000004000000000000000000444000000000000044400000000000003440000000000080464000000000008046400000000000003E4000000000000044400000000000004440010300000002000000060000000000000000003440000000000080414000000000000024400000000000003E40000000000000244000000000000024400000000000003E4000000000000014400000000000804640000000000000344000000000000034400000000000804140040000000000000000003E40000000000000344000000000000034400000000000002E40000000000000344000000000000039400000000000003E400000000000003440",
118
                OGCWKBEncoder.wkbByteOrder.wkbNDR,
119
                false
120
            ),
121
            new Data(
122
                "POLYGON ((710847.97223687172 4368973.1207255824, 720362.03232662566 4368973.1207255824, 720362.03232662566 4373121.8750170888, 710847.97223687172 4373121.8750170888, 710847.97223687172 4368973.1207255824))",
123
                "0x010300000001000000050000000008C9F17FB12541CBF7B94793AA5041901D8D10D4FB2541CBF7B94793AA5041901D8D10D4FB2541AD470078A0AE50410008C9F17FB12541AD470078A0AE50410008C9F17FB12541CBF7B94793AA5041",
124
                OGCWKBEncoder.wkbByteOrder.wkbNDR,
125
                false
126
            ),        
127
        
128
            new Data(
129
                "POINT Z (30 10 20)",
130
                "0x01e90300000000000000003e4000000000000024400000000000003440",
131
                OGCWKBEncoder.wkbByteOrder.wkbNDR,
132
                false
133
            ),
134

    
135
            new Data(
136
                "POINT M (30 10 30)",
137
                "0x01d10700000000000000003e4000000000000024400000000000003e40",
138
                OGCWKBEncoder.wkbByteOrder.wkbNDR,
139
                false
140
            ),
141

    
142
            new Data(
143
                "POINT ZM (30 10 20 30)",
144
                "0x01b90b00000000000000003e40000000000000244000000000000034400000000000003e40",
145
                OGCWKBEncoder.wkbByteOrder.wkbNDR,
146
                false
147
            ),
148
            
149
            new Data(
150
                "POLYGON Z ((30 10 10, 40 40 10, 20 40 10, 10 20 10, 30 10 10))",
151
                "0x01eb03000001000000050000000000000000003e40000000000000244000000000000024400000000000004440000000000000444000000000000024400000000000003440000000000000444000000000000024400000000000002440000000000000344000000000000024400000000000003e4000000000000024400000000000002440",
152
                OGCWKBEncoder.wkbByteOrder.wkbNDR,
153
                false
154
            ),
155

    
156
            new Data(
157
                "POLYGON M ((30 10 100, 40 40 200, 20 40 300, 10 20 400, 30 10 500))",
158
                "0x01d307000001000000050000000000000000003e4000000000000024400000000000005940000000000000444000000000000044400000000000006940000000000000344000000000000044400000000000c072400000000000002440000000000000344000000000000079400000000000003e4000000000000024400000000000407f40",
159
                OGCWKBEncoder.wkbByteOrder.wkbNDR,
160
                false
161
            ),
162

    
163
            new Data(
164
                "POLYGON ZM ((30 10 10 100, 40 40 10 200, 20 40 10 300, 10 20 10 400, 30 10 10 500))",
165
                "0x01bb0b000001000000050000000000000000003e4000000000000024400000000000002440000000000000594000000000000044400000000000004440000000000000244000000000000069400000000000003440000000000000444000000000000024400000000000c0724000000000000024400000000000003440000000000000244000000000000079400000000000003e40000000000000244000000000000024400000000000407f40",
166
                OGCWKBEncoder.wkbByteOrder.wkbNDR,
167
                false
168
            ),
169

    
170
            new Data(
171
                "MULTIPOINT Z ((10 40 10), (40 30 10), (20 20 10), (30 10 10))",
172
                "0x01ec0300000400000001e903000000000000000024400000000000004440000000000000244001e903000000000000000044400000000000003e40000000000000244001e903000000000000000034400000000000003440000000000000244001e90300000000000000003e4000000000000024400000000000002440",
173
                OGCWKBEncoder.wkbByteOrder.wkbNDR,
174
                false
175
            ),
176

    
177
            new Data(
178
                "MULTIPOINT M ((10 40 100), (40 30 200), (20 20 300), (30 10 400))",
179
                "0x01d40700000400000001d107000000000000000024400000000000004440000000000000594001d107000000000000000044400000000000003e40000000000000694001d1070000000000000000344000000000000034400000000000c0724001d10700000000000000003e4000000000000024400000000000007940",
180
                OGCWKBEncoder.wkbByteOrder.wkbNDR,
181
                false
182
            ),
183

    
184
            new Data(
185
                "MULTIPOINT ZM ((10 40 10 100), (40 30 10 200), (20 20 10 300), (30 10 10 400))",
186
                "0x01bc0b00000400000001b90b0000000000000000244000000000000044400000000000002440000000000000594001b90b000000000000000044400000000000003e400000000000002440000000000000694001b90b00000000000000003440000000000000344000000000000024400000000000c0724001b90b00000000000000003e40000000000000244000000000000024400000000000007940",
187
                OGCWKBEncoder.wkbByteOrder.wkbNDR,
188
                false
189
            ),
190
            
191
            new Data(
192
                "MULTIPOINT Z (10 40 10, 40 30 10, 20 20 10, 30 10 10)",
193
                "0x01ec0300000400000001e903000000000000000024400000000000004440000000000000244001e903000000000000000044400000000000003e40000000000000244001e903000000000000000034400000000000003440000000000000244001e90300000000000000003e4000000000000024400000000000002440",
194
                OGCWKBEncoder.wkbByteOrder.wkbNDR,
195
                false
196
            ),
197

    
198
            new Data(
199
                "MULTIPOINT M (10 40 100, 40 30 200, 20 20 300, 30 10 400)",
200
                "0x01d40700000400000001d107000000000000000024400000000000004440000000000000594001d107000000000000000044400000000000003e40000000000000694001d1070000000000000000344000000000000034400000000000c0724001d10700000000000000003e4000000000000024400000000000007940",
201
                OGCWKBEncoder.wkbByteOrder.wkbNDR,
202
                false
203
            ),
204

    
205
            new Data(
206
                "MULTIPOINT ZM (10 40 10 100, 40 30 10 200, 20 20 10 300, 30 10 10 400)",
207
                "0x01bc0b00000400000001b90b0000000000000000244000000000000044400000000000002440000000000000594001b90b000000000000000044400000000000003e400000000000002440000000000000694001b90b00000000000000003440000000000000344000000000000024400000000000c0724001b90b00000000000000003e40000000000000244000000000000024400000000000007940",
208
                OGCWKBEncoder.wkbByteOrder.wkbNDR,
209
                false
210
            ),
211
            
212
            new Data(
213
                "MULTIPOLYGON Z (((30 20 10, 45 40 10, 10 40 10, 30 20 10)),((15 5 10, 40 10 10, 10 20 10, 5 10 10, 15 5 10)))",
214
                "0x01ee0300000200000001eb03000001000000040000000000000000003e40000000000000344000000000000024400000000000804640000000000000444000000000000024400000000000002440000000000000444000000000000024400000000000003e400000000000003440000000000000244001eb03000001000000050000000000000000002e40000000000000144000000000000024400000000000004440000000000000244000000000000024400000000000002440000000000000344000000000000024400000000000001440000000000000244000000000000024400000000000002e4000000000000014400000000000002440",
215
                OGCWKBEncoder.wkbByteOrder.wkbNDR,
216
                false
217
            ),
218
            
219
            new Data(
220
                "MULTIPOLYGON M (((30 20 100, 45 40 200, 10 40 300, 30 20 400)),((15 5 20, 40 10 500, 10 20 600, 5 10 700, 15 5 800)))",
221
                "0x01d60700000200000001d307000001000000040000000000000000003e4000000000000034400000000000005940000000000080464000000000000044400000000000006940000000000000244000000000000044400000000000c072400000000000003e400000000000003440000000000000794001d307000001000000050000000000000000002e4000000000000014400000000000003440000000000000444000000000000024400000000000407f40000000000000244000000000000034400000000000c08240000000000000144000000000000024400000000000e085400000000000002e4000000000000014400000000000008940",
222
                OGCWKBEncoder.wkbByteOrder.wkbNDR,
223
                false
224
            ),
225
            
226
            new Data(
227
                "MULTIPOLYGON ZM (((30 20 10 100, 45 40 10 200, 10 40 10 300, 30 20 10 400)),((15 5 10 500, 40 10 10 600, 10 20 10 700, 5 10 10 800, 15 5 10 900)))",
228
                "0x01be0b00000200000001bb0b000001000000040000000000000000003e4000000000000034400000000000002440000000000000594000000000008046400000000000004440000000000000244000000000000069400000000000002440000000000000444000000000000024400000000000c072400000000000003e4000000000000034400000000000002440000000000000794001bb0b000001000000050000000000000000002e40000000000000144000000000000024400000000000407f400000000000004440000000000000244000000000000024400000000000c082400000000000002440000000000000344000000000000024400000000000e0854000000000000014400000000000002440000000000000244000000000000089400000000000002e40000000000000144000000000000024400000000000208c40",
229
                OGCWKBEncoder.wkbByteOrder.wkbNDR,
230
                false
231
            ),
232

    
233
            new Data(
234
                "LINESTRING M (30 10 100, 10 30  200, 40 40 300)",
235
                "0x01d2070000030000000000000000003e400000000000002440000000000000594000000000000024400000000000003e400000000000006940000000000000444000000000000044400000000000c07240",
236
                OGCWKBEncoder.wkbByteOrder.wkbNDR,
237
                false
238
            ),
239
            
240
            new Data(
241
                "LINESTRING ZM (30 10 20 100, 10 30 20 200, 40 40 20 300)",
242
                "0x01ba0b0000030000000000000000003e4000000000000024400000000000003440000000000000594000000000000024400000000000003e40000000000000344000000000000069400000000000004440000000000000444000000000000034400000000000c07240",
243
                OGCWKBEncoder.wkbByteOrder.wkbNDR,
244
                false
245
            ),
246
            
247
            new Data(
248
                "MULTILINESTRING M ((10 10 100, 20 20 200, 10 40 300),(40 40 400, 30 30 500, 40 20  600, 30 10 700))",
249
                "0x01d50700000200000001d207000003000000000000000000244000000000000024400000000000005940000000000000344000000000000034400000000000006940000000000000244000000000000044400000000000c0724001d2070000040000000000000000004440000000000000444000000000000079400000000000003e400000000000003e400000000000407f40000000000000444000000000000034400000000000c082400000000000003e4000000000000024400000000000e08540",
250
                OGCWKBEncoder.wkbByteOrder.wkbNDR,
251
                false
252
            ),
253
            
254
            new Data(
255
                "MULTILINESTRING ZM ((10 10 20  100, 20 20 20 200, 10 40 20 300),(40 40 20 400, 30 30 20 500, 40 20 20 600, 30 10 20 700))",
256
                "0x01bd0b00000200000001ba0b000003000000000000000000244000000000000024400000000000003440000000000000594000000000000034400000000000003440000000000000344000000000000069400000000000002440000000000000444000000000000034400000000000c0724001ba0b00000400000000000000000044400000000000004440000000000000344000000000000079400000000000003e400000000000003e4000000000000034400000000000407f400000000000004440000000000000344000000000000034400000000000c082400000000000003e40000000000000244000000000000034400000000000e08540",
257
                OGCWKBEncoder.wkbByteOrder.wkbNDR,
258
                false
259
            ),
260
            
261

    
262
        };
263
    
264
        System.out.println("# Test:: test1");
265
        for (Data data : allData) {            
266
            if( data.skip ) {
267
                continue;
268
            }
269
            System.out.println("# WKT:: " + data.wkt);
270
            Geometry geom = manager.createFrom(data.wkt);
271
            OGCWKBEncoder encoder = new OGCWKBEncoder(data.byteOrder);
272
            byte[] wbk = encoder.encode(geom);
273
//            byte[] wbk = point.convertToWKB();
274
            System.out.println("# WKB-E:: " + data.wkb);
275
            System.out.println("# WKB-R:: " + bytearray(wbk));
276
            assertEquals(data.wkb.toUpperCase(),bytearray(wbk).toUpperCase());  
277
            Geometry geom2 = manager.createFrom(wbk);
278
            assertNotNull(geom2);
279
            assertEquals(geom.getGeometryType(), geom2.getGeometryType());
280
            assertEquals(geom, geom2);
281
        }
282
    }
283
}