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 / fromwkb / TestWKBParser.java @ 42771

History | View | Annotate | Download (24 KB)

1
package org.gvsig.fmap.geom.jts.operation.fromwkb;
2

    
3
import org.gvsig.fmap.geom.Geometry;
4
import org.gvsig.fmap.geom.aggregate.MultiLine;
5
import org.gvsig.fmap.geom.aggregate.MultiPoint;
6
import org.gvsig.fmap.geom.aggregate.MultiPolygon;
7
import org.gvsig.fmap.geom.exception.CreateGeometryException;
8
import org.gvsig.fmap.geom.operation.GeometryOperationException;
9
import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
10
import org.gvsig.fmap.geom.primitive.Curve;
11
import org.gvsig.fmap.geom.primitive.Line;
12
import org.gvsig.fmap.geom.primitive.Point;
13
import org.gvsig.fmap.geom.primitive.Polygon;
14
import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase;
15

    
16
public class TestWKBParser extends AbstractLibraryAutoInitTestCase {
17

    
18
        public void testPoint2DM() throws CreateGeometryException, GeometryOperationNotSupportedException, GeometryOperationException{
19
                String wkbHex = "01010000403CDBA337DCC351C06D37C1374D3748400000000000002840";
20
                // SELECT ST_GeomFromEWKT('POINTM(-71.060316 48.432044 12)');
21
                
22
                byte[] wkb = getWKB(wkbHex);
23
                assertEquals(wkbHex, getWKBHex(wkb));
24
                PostGISEWKBParser parser = new PostGISEWKBParser();
25
                Geometry geom = parser.parse(wkb);
26
                assertEquals(geom.getType(), Geometry.TYPES.POINT);
27
                assertEquals(geom.getGeometryType().getSubType(), Geometry.SUBTYPES.GEOM2DM);
28
                assertEquals(geom.getGeometryType().hasM(), true);
29
                assertEquals(geom.getGeometryType().hasZ(), false);
30
                assertEquals(geom.getDimension(), 3);
31
                Point point = (Point) geom;
32
                assertEquals(point.getX(), -71.060316);
33
                assertEquals(point.getY(), 48.432044);
34
                assertEquals(point.getCoordinateAt(2), 12.0);
35
                
36
                byte[] bytes = geom.convertToEWKB();
37
                assertEquals(wkbHex, getWKBHex(bytes));
38
        }
39
        
40
        public void testPoint3DM() throws CreateGeometryException, GeometryOperationNotSupportedException, GeometryOperationException{
41
                String wkbHex = "01010000C03CDBA337DCC351C06D37C1374D37484000000000000024400000000000002840";
42
                // SELECT ST_GeomFromEWKT('POINTZM(-71.060316 48.432044 12)');
43
                
44
                byte[] wkb = getWKB(wkbHex);
45
                assertEquals(wkbHex, getWKBHex(wkb));
46
                PostGISEWKBParser parser = new PostGISEWKBParser();
47
                Geometry geom = parser.parse(wkb);
48
                assertEquals(geom.getType(), Geometry.TYPES.POINT);
49
                assertEquals(geom.getGeometryType().getSubType(), Geometry.SUBTYPES.GEOM3DM);
50
                assertEquals(geom.getGeometryType().hasM(), true);
51
                assertEquals(geom.getGeometryType().hasZ(), true);
52
                assertEquals(geom.getDimension(), 4);
53
                Point point = (Point) geom;
54
                assertEquals(point.getX(), -71.060316);
55
                assertEquals(point.getY(), 48.432044);
56
                assertEquals(point.getCoordinateAt(2), 10.0);
57
                assertEquals(point.getCoordinateAt(3), 12.0);
58
                
59
                byte[] bytes = geom.convertToEWKB();
60
                assertEquals(wkbHex, getWKBHex(bytes));
61
        }
62
        
63
        
64
        public void testLine2DM() throws CreateGeometryException, GeometryOperationNotSupportedException, GeometryOperationException{
65
                String wkbHex = "0102000040030000003CDBA337DCC351C06D37C1374D37484000000000000028403CDBA337DC8351C06D37C1374D37484000000000000026403CDBA337DCC351C06D37C1374DB747400000000000002440";
66
                // SELECT ST_GeomFromEWKT('LINESTRINGM(-71.060316 48.432044 12, -70.060316 48.432044 11, -71.060316 47.432044 10 )');
67
                
68
                byte[] wkb = getWKB(wkbHex);
69
                assertEquals(wkbHex, getWKBHex(wkb));
70
                PostGISEWKBParser parser = new PostGISEWKBParser();
71
                Geometry geom = parser.parse(wkb);
72
                assertEquals(geom.getType(), Geometry.TYPES.LINE);
73
                assertEquals(geom.getGeometryType().getSubType(), Geometry.SUBTYPES.GEOM2DM);
74
                assertEquals(geom.getDimension(), 3);
75
                assertEquals(geom.getGeometryType().hasM(), true);
76
                assertEquals(geom.getGeometryType().hasZ(), false);
77
                Curve line = (Curve) geom;
78
                
79
                Point vert1 = line.getVertex(0);
80
                assertEquals(vert1.getX(), -71.060316);
81
                assertEquals(vert1.getY(), 48.432044);
82
                assertEquals(vert1.getCoordinateAt(2), 12.0);
83
                
84
                Point vert2 = line.getVertex(1);
85
                assertEquals(vert2.getX(), -70.060316);
86
                assertEquals(vert2.getY(), 48.432044);
87
                assertEquals(vert2.getCoordinateAt(2), 11.0);
88
                
89
                Point vert3 = line.getVertex(2);
90
                assertEquals(vert3.getX(), -71.060316);
91
                assertEquals(vert3.getY(), 47.432044);
92
                assertEquals(vert3.getCoordinateAt(2), 10.0);
93
                
94
                byte[] bytes = geom.convertToEWKB();
95
                assertEquals(wkbHex, getWKBHex(bytes));
96
        }
97
        
98
        public void testLine3DM() throws CreateGeometryException, GeometryOperationNotSupportedException, GeometryOperationException{
99
                String wkbHex = "01020000C0030000003CDBA337DCC351C06D37C1374D374840000000000000224000000000000028403CDBA337DC8351C06D37C1374D374840000000000000204000000000000026403CDBA337DCC351C06D37C1374DB747400000000000001C400000000000002440";
100
                // SELECT ST_GeomFromEWKT('LINESTRINGM(-71.060316 48.432044 12, -70.060316 48.432044 11, -71.060316 47.432044 10 )');
101
                
102
                byte[] wkb = getWKB(wkbHex);
103
                assertEquals(wkbHex, getWKBHex(wkb));
104
                PostGISEWKBParser parser = new PostGISEWKBParser();
105
                Geometry geom = parser.parse(wkb);
106
                assertEquals(geom.getType(), Geometry.TYPES.LINE);
107
                assertEquals(geom.getGeometryType().getSubType(), Geometry.SUBTYPES.GEOM3DM);
108
                assertEquals(geom.getDimension(), 4);
109
                assertEquals(geom.getGeometryType().hasM(), true);
110
                assertEquals(geom.getGeometryType().hasZ(), true);
111
                Curve line = (Curve) geom;
112
                
113
                Point vert1 = line.getVertex(0);
114
                assertEquals(vert1.getX(), -71.060316);
115
                assertEquals(vert1.getY(), 48.432044);
116
                assertEquals(vert1.getCoordinateAt(2), 9.0);
117
                assertEquals(vert1.getCoordinateAt(3), 12.0);
118
                
119
                Point vert2 = line.getVertex(1);
120
                assertEquals(vert2.getX(), -70.060316);
121
                assertEquals(vert2.getY(), 48.432044);
122
                assertEquals(vert2.getCoordinateAt(2), 8.0);
123
                assertEquals(vert2.getCoordinateAt(3), 11.0);
124
                
125
                Point vert3 = line.getVertex(2);
126
                assertEquals(vert3.getX(), -71.060316);
127
                assertEquals(vert3.getY(), 47.432044);
128
                assertEquals(vert3.getCoordinateAt(2), 7.0);
129
                assertEquals(vert3.getCoordinateAt(3), 10.0);
130
                
131
                byte[] bytes = geom.convertToEWKB();
132
                assertEquals(wkbHex, getWKBHex(bytes));
133
        }
134
        
135
        public void testPolygon2DM() throws CreateGeometryException, GeometryOperationNotSupportedException, GeometryOperationException{
136
                String wkbHex = "010300004001000000040000003CDBA337DCC351C06D37C1374D37484000000000000028403CDBA337DC8351C06D37C1374D37484000000000000026403CDBA337DCC351C06D37C1374DB7474000000000000024403CDBA337DCC351C06D37C1374D3748400000000000002840";
137
                // SELECT ST_GeomFromEWKT('POLYGONM((-71.060316 48.432044 12, -70.060316 48.432044 11, -71.060316 47.432044 10, -71.060316 48.432044 12))');
138
                
139
                byte[] wkb = getWKB(wkbHex);
140
                assertEquals(wkbHex, getWKBHex(wkb));
141
                PostGISEWKBParser parser = new PostGISEWKBParser();
142
                Geometry geom = parser.parse(wkb);
143
                assertEquals(geom.getType(), Geometry.TYPES.POLYGON);
144
                assertEquals(geom.getGeometryType().getSubType(), Geometry.SUBTYPES.GEOM2DM);
145
                assertEquals(geom.getDimension(), 3);
146
                assertEquals(geom.getGeometryType().hasM(), true);
147
                assertEquals(geom.getGeometryType().hasZ(), false);
148
                Polygon line = (Polygon) geom;
149
                
150
                Point vert1 = line.getVertex(0);
151
                assertEquals(vert1.getX(), -71.060316);
152
                assertEquals(vert1.getY(), 48.432044);
153
                assertEquals(vert1.getCoordinateAt(2), 12.0);
154
                
155
                Point vert2 = line.getVertex(1);
156
                assertEquals(vert2.getX(), -70.060316);
157
                assertEquals(vert2.getY(), 48.432044);
158
                assertEquals(vert2.getCoordinateAt(2), 11.0);
159
                
160
                Point vert3 = line.getVertex(2);
161
                assertEquals(vert3.getX(), -71.060316);
162
                assertEquals(vert3.getY(), 47.432044);
163
                assertEquals(vert3.getCoordinateAt(2), 10.0);
164
                
165
                Point vert4 = line.getVertex(3);
166
                assertEquals(vert4.getX(), -71.060316);
167
                assertEquals(vert4.getY(), 48.432044);
168
                assertEquals(vert4.getCoordinateAt(2), 12.0);
169
                
170
                byte[] bytes = geom.convertToEWKB();
171
                assertEquals(wkbHex, getWKBHex(bytes));
172
        }
173
        
174
        public void testPolygon3DM() throws CreateGeometryException, GeometryOperationNotSupportedException, GeometryOperationException{
175
                String wkbHex = "01030000C001000000040000003CDBA337DCC351C06D37C1374D374840000000000000224000000000000028403CDBA337DC8351C06D37C1374D3748400000000000002040"
176
                                + "00000000000026403CDBA337DCC351C06D37C1374DB747400000000000001C4000000000000024403CDBA337DCC351C06D37C1374D37484000000000000022400000000000002840";
177
                // SELECT ST_GeomFromEWKT('POLYGONM((-71.060316 48.432044 12, -70.060316 48.432044 11, -71.060316 47.432044 10, -71.060316 48.432044 12))');
178
                
179
                byte[] wkb = getWKB(wkbHex);
180
                assertEquals(wkbHex, getWKBHex(wkb));
181
                PostGISEWKBParser parser = new PostGISEWKBParser();
182
                Geometry geom = parser.parse(wkb);
183
                assertEquals(geom.getType(), Geometry.TYPES.POLYGON);
184
                assertEquals(geom.getGeometryType().getSubType(), Geometry.SUBTYPES.GEOM3DM);
185
                assertEquals(geom.getDimension(), 4);
186
                assertEquals(geom.getGeometryType().hasM(), true);
187
                assertEquals(geom.getGeometryType().hasZ(), true);
188
                Polygon line = (Polygon) geom;
189
                
190
                Point vert1 = line.getVertex(0);
191
                assertEquals(vert1.getX(), -71.060316);
192
                assertEquals(vert1.getY(), 48.432044);
193
                assertEquals(vert1.getCoordinateAt(2), 9.0);
194
                assertEquals(vert1.getCoordinateAt(3), 12.0);
195
                
196
                Point vert2 = line.getVertex(1);
197
                assertEquals(vert2.getX(), -70.060316);
198
                assertEquals(vert2.getY(), 48.432044);
199
                assertEquals(vert2.getCoordinateAt(2), 8.0);
200
                assertEquals(vert2.getCoordinateAt(3), 11.0);
201
                
202
                Point vert3 = line.getVertex(2);
203
                assertEquals(vert3.getX(), -71.060316);
204
                assertEquals(vert3.getY(), 47.432044);
205
                assertEquals(vert3.getCoordinateAt(2), 7.0);
206
                assertEquals(vert3.getCoordinateAt(3), 10.0);
207
                
208
                Point vert4 = line.getVertex(3);
209
                assertEquals(vert4.getX(), -71.060316);
210
                assertEquals(vert4.getY(), 48.432044);
211
                assertEquals(vert4.getCoordinateAt(2), 9.0);
212
                assertEquals(vert4.getCoordinateAt(3), 12.0);
213
                
214
                byte[] bytes = geom.convertToEWKB();
215
                assertEquals(wkbHex, getWKBHex(bytes));
216
        }
217
        
218
        public void testMultiPoint2DM() throws CreateGeometryException, GeometryOperationNotSupportedException, GeometryOperationException{
219
                String wkbHex = "01040000400200000001010000403CDBA337DCC351C06D37C1374D374840000000000000284001010000403CDBA337DC8351C06D3"
220
                                + "7C1374D3748400000000000002640";
221
                // SELECT ST_GeomFromEWKT('MULTIPOINTM((-71.060316 48.432044 12), (-70.060316 48.432044 11))');
222
                
223
                byte[] wkb = getWKB(wkbHex);
224
                assertEquals(wkbHex, getWKBHex(wkb));
225
                PostGISEWKBParser parser = new PostGISEWKBParser();
226
                Geometry geom = parser.parse(wkb);
227
                assertEquals(geom.getType(), Geometry.TYPES.MULTIPOINT);
228
                assertEquals(geom.getGeometryType().getSubType(), Geometry.SUBTYPES.GEOM2DM);
229
                assertEquals(geom.getGeometryType().hasM(), true);
230
                assertEquals(geom.getGeometryType().hasZ(), false);
231
                assertEquals(geom.getDimension(), 3);
232
                MultiPoint mpoint = (MultiPoint) geom;
233
                Point point = mpoint.getPointAt(0);
234
                assertEquals(point.getX(), -71.060316);
235
                assertEquals(point.getY(), 48.432044);
236
                assertEquals(point.getCoordinateAt(2), 12.0);
237
                
238
                Point point1 = mpoint.getPointAt(1);
239
                assertEquals(point1.getX(), -70.060316);
240
                assertEquals(point1.getY(), 48.432044);
241
                assertEquals(point1.getCoordinateAt(2), 11.0);
242
                
243
                byte[] bytes = geom.convertToEWKB();
244
                assertEquals(wkbHex, getWKBHex(bytes));
245
        }
246
        
247
        public void testMultiPoint3DM() throws CreateGeometryException, GeometryOperationNotSupportedException, GeometryOperationException{
248
                String wkbHex ="01040000C00200000001010000C03CDBA337DCC351C06D37C1374D37484000000000000024400000000000002840010"
249
                                + "10000C03CDBA337DC8351C06D37C1374D37484000000000000022400000000000002640";
250
                // SELECT ST_GeomFromEWKT('MULTIPOINTZM((-71.060316 48.432044 10 12), (-70.060316 48.432044 9 11))');;
251
                
252
                byte[] wkb = getWKB(wkbHex);
253
                assertEquals(wkbHex, getWKBHex(wkb));
254
                PostGISEWKBParser parser = new PostGISEWKBParser();
255
                Geometry geom = parser.parse(wkb);
256
                assertEquals(geom.getType(), Geometry.TYPES.MULTIPOINT);
257
                assertEquals(geom.getGeometryType().getSubType(), Geometry.SUBTYPES.GEOM3DM);
258
                assertEquals(geom.getGeometryType().hasM(), true);
259
                assertEquals(geom.getGeometryType().hasZ(), true);
260
                assertEquals(geom.getDimension(), 4);
261
                MultiPoint mpoint = (MultiPoint) geom;
262
                Point point = mpoint.getPointAt(0);
263
                assertEquals(point.getX(), -71.060316);
264
                assertEquals(point.getY(), 48.432044);
265
                assertEquals(point.getCoordinateAt(2), 10.0);
266
                assertEquals(point.getCoordinateAt(3), 12.0);
267
                
268
                Point point1 = mpoint.getPointAt(1);
269
                assertEquals(point1.getX(), -70.060316);
270
                assertEquals(point1.getY(), 48.432044);
271
                assertEquals(point1.getCoordinateAt(2), 9.0);
272
                assertEquals(point1.getCoordinateAt(3), 11.0);
273
                
274
                byte[] bytes = geom.convertToEWKB();
275
                assertEquals(wkbHex, getWKBHex(bytes));
276
        }
277
        
278
        
279
        public void testMultiLine2DM() throws CreateGeometryException, GeometryOperationNotSupportedException, GeometryOperationException{
280
                String wkbHex = "0105000040020000000102000040030000003CDBA337DCC351C06D37C1374D37484000000000000028403CDBA337DC8351C06D37C1374D3748400000000000"
281
                                + "0026403CDBA337DCC351C06D37C1374DB7474000000000000024400102000040030000003CDBA337DC0352C06D37C1374DB7474000000000000028403CDBA337DCC351C06D37C1374DB7474000000000000026403CDBA337DC0352C06D37C1374D3747400000000000002440";
282
                // SELECT ST_GeomFromEWKT('MULTILINESTRINGM((-71.060316 48.432044 12, -70.060316 48.432044 11, -71.060316 47.432044 10),(-72.060316 47.432044 12, -71.060316 47.432044 11, -72.060316 46.432044 10))');
283
                
284
                byte[] wkb = getWKB(wkbHex);
285
                assertEquals(wkbHex, getWKBHex(wkb));
286
                PostGISEWKBParser parser = new PostGISEWKBParser();
287
                Geometry geom = parser.parse(wkb);
288
                assertEquals(geom.getType(), Geometry.TYPES.MULTILINE);
289
                assertEquals(geom.getGeometryType().getSubType(), Geometry.SUBTYPES.GEOM2DM);
290
                assertEquals(geom.getDimension(), 3);
291
                assertEquals(geom.getGeometryType().hasM(), true);
292
                assertEquals(geom.getGeometryType().hasZ(), false);
293
                MultiLine mline = (MultiLine) geom;
294
                
295
                Line line = (Line) mline.getCurveAt(0);
296
                Point vert1 = line.getVertex(0);
297
                assertEquals(vert1.getX(), -71.060316);
298
                assertEquals(vert1.getY(), 48.432044);
299
                assertEquals(vert1.getCoordinateAt(2), 12.0);
300
                
301
                Point vert2 = line.getVertex(1);
302
                assertEquals(vert2.getX(), -70.060316);
303
                assertEquals(vert2.getY(), 48.432044);
304
                assertEquals(vert2.getCoordinateAt(2), 11.0);
305
                
306
                Point vert3 = line.getVertex(2);
307
                assertEquals(vert3.getX(), -71.060316);
308
                assertEquals(vert3.getY(), 47.432044);
309
                assertEquals(vert3.getCoordinateAt(2), 10.0);
310
                
311
                Line line1 = (Line) mline.getCurveAt(1);
312
                vert1 = line1.getVertex(0);
313
                assertEquals(vert1.getX(), -72.060316);
314
                assertEquals(vert1.getY(), 47.432044);
315
                assertEquals(vert1.getCoordinateAt(2), 12.0);
316
                
317
                vert2 = line1.getVertex(1);
318
                assertEquals(vert2.getX(), -71.060316);
319
                assertEquals(vert2.getY(), 47.432044);
320
                assertEquals(vert2.getCoordinateAt(2), 11.0);
321
                
322
                vert3 = line1.getVertex(2);
323
                assertEquals(vert3.getX(), -72.060316);
324
                assertEquals(vert3.getY(), 46.432044);
325
                assertEquals(vert3.getCoordinateAt(2), 10.0);
326
                
327
                byte[] bytes = geom.convertToEWKB();
328
                assertEquals(wkbHex, getWKBHex(bytes));
329
        }
330
        
331
        public void testMultiLine3DM() throws CreateGeometryException, GeometryOperationNotSupportedException, GeometryOperationException{
332
                String wkbHex ="01050000C00200000001020000C0030000003CDBA337DCC351C06D37C1374D374840000000000000F03F00000000000028403CDBA337DC8351C06D37C1374D3748400000"
333
                                + "00000000004000000000000026403CDBA337DCC351C06D37C1374DB747400000000000000840000000000000244001020000C0030000003CDBA337DC0352C06D37C1374DB74740"
334
                                + "000000000000104000000000000028403CDBA337DCC351C06D37C1374DB74740000000000000144000000000000026403CDBA337DC0352C06D37C1374D37474000000000000018400000000000002440";
335
                // SELECT ST_GeomFromEWKT('MULTILINESTRINGZM((-71.060316 48.432044 1 12, -70.060316 48.432044 2 11, -71.060316 47.432044 3 10),(-72.060316 47.432044 4 12, -71.060316 47.432044 5 11, -72.060316 46.432044 6 10))');
336
                
337
                byte[] wkb = getWKB(wkbHex);
338
                assertEquals(wkbHex, getWKBHex(wkb));
339
                PostGISEWKBParser parser = new PostGISEWKBParser();
340
                Geometry geom = parser.parse(wkb);
341
                assertEquals(geom.getType(), Geometry.TYPES.MULTILINE);
342
                assertEquals(geom.getGeometryType().getSubType(), Geometry.SUBTYPES.GEOM3DM);
343
                assertEquals(geom.getDimension(), 4);
344
                assertEquals(geom.getGeometryType().hasM(), true);
345
                assertEquals(geom.getGeometryType().hasZ(), true);
346
                MultiLine mline = (MultiLine) geom;
347
                
348
                Line line = (Line) mline.getCurveAt(0);
349
                Point vert1 = line.getVertex(0);
350
                assertEquals(vert1.getX(), -71.060316);
351
                assertEquals(vert1.getY(), 48.432044);
352
                assertEquals(vert1.getCoordinateAt(2), 1.0);
353
                assertEquals(vert1.getCoordinateAt(3), 12.0);
354
                
355
                Point vert2 = line.getVertex(1);
356
                assertEquals(vert2.getX(), -70.060316);
357
                assertEquals(vert2.getY(), 48.432044);
358
                assertEquals(vert2.getCoordinateAt(2), 2.0);
359
                assertEquals(vert2.getCoordinateAt(3), 11.0);
360
                
361
                Point vert3 = line.getVertex(2);
362
                assertEquals(vert3.getX(), -71.060316);
363
                assertEquals(vert3.getY(), 47.432044);
364
                assertEquals(vert3.getCoordinateAt(2), 3.0);
365
                assertEquals(vert3.getCoordinateAt(3), 10.0);
366
                
367
                Line line1 = (Line) mline.getCurveAt(1);
368
                vert1 = line1.getVertex(0);
369
                assertEquals(vert1.getX(), -72.060316);
370
                assertEquals(vert1.getY(), 47.432044);
371
                assertEquals(vert1.getCoordinateAt(2), 4.0);
372
                assertEquals(vert1.getCoordinateAt(3), 12.0);
373
                
374
                vert2 = line1.getVertex(1);
375
                assertEquals(vert2.getX(), -71.060316);
376
                assertEquals(vert2.getY(), 47.432044);
377
                assertEquals(vert2.getCoordinateAt(2), 5.0);
378
                assertEquals(vert2.getCoordinateAt(3), 11.0);
379
                
380
                vert3 = line1.getVertex(2);
381
                assertEquals(vert3.getX(), -72.060316);
382
                assertEquals(vert3.getY(), 46.432044);
383
                assertEquals(vert3.getCoordinateAt(2), 6.0);
384
                assertEquals(vert3.getCoordinateAt(3), 10.0);
385
                
386
                byte[] bytes = geom.convertToEWKB();
387
                assertEquals(wkbHex, getWKBHex(bytes));
388
        }
389
        
390
        
391
        public void testMultiPolygon2DM() throws CreateGeometryException, GeometryOperationNotSupportedException, GeometryOperationException{
392
                String wkbHex = "010600004002000000010300004001000000040000003CDBA337DCC351C06D37C1374D37484000000000000028403CDBA337DC8351C06D37C1374D37"
393
                                + "484000000000000026403CDBA337DCC351C06D37C1374DB7474000000000000024403CDBA337DCC351C06D37C1374D3748400000000000002840010300004001"
394
                                + "000000040000003CDBA337DC8351C06D37C1374DB7474000000000000028403CDBA337DC8351C06D37C1374D37484000000000000026403CDBA337DCC351C06D"
395
                                + "37C1374DB7474000000000000024403CDBA337DC8351C06D37C1374DB747400000000000002840";
396
                // SELECT ST_GeomFromEWKT('MULTIPOLYGONM(((-71.060316 48.432044 12, -70.060316 48.432044 11, -71.060316 47.432044 10, -71.060316 48.432044 12)),((-70.060316 47.432044 12, -70.060316 48.432044 11, -71.060316 47.432044 10, -70.060316 47.432044 12)))');
397
                
398
                byte[] wkb = getWKB(wkbHex);
399
                assertEquals(wkbHex, getWKBHex(wkb));
400
                PostGISEWKBParser parser = new PostGISEWKBParser();
401
                Geometry geom = parser.parse(wkb);
402
                assertEquals(geom.getType(), Geometry.TYPES.MULTIPOLYGON);
403
                assertEquals(geom.getGeometryType().getSubType(), Geometry.SUBTYPES.GEOM2DM);
404
                assertEquals(geom.getDimension(), 3);
405
                assertEquals(geom.getGeometryType().hasM(), true);
406
                assertEquals(geom.getGeometryType().hasZ(), false);
407
                MultiPolygon mpol = (MultiPolygon) geom;
408
                
409
                Polygon pol = (Polygon) mpol.getSurfaceAt(0);
410
                Point vert1 = pol.getVertex(0);
411
                assertEquals(vert1.getX(), -71.060316);
412
                assertEquals(vert1.getY(), 48.432044);
413
                assertEquals(vert1.getCoordinateAt(2), 12.0);
414
                
415
                Point vert2 = pol.getVertex(1);
416
                assertEquals(vert2.getX(), -70.060316);
417
                assertEquals(vert2.getY(), 48.432044);
418
                assertEquals(vert2.getCoordinateAt(2), 11.0);
419
                
420
                Point vert3 = pol.getVertex(2);
421
                assertEquals(vert3.getX(), -71.060316);
422
                assertEquals(vert3.getY(), 47.432044);
423
                assertEquals(vert3.getCoordinateAt(2), 10.0);
424
                
425
                Point vert4 = pol.getVertex(3);
426
                assertEquals(vert4.getX(), -71.060316);
427
                assertEquals(vert4.getY(), 48.432044);
428
                assertEquals(vert4.getCoordinateAt(2), 12.0);
429
                
430
                
431
                pol = (Polygon) mpol.getSurfaceAt(1);
432
                vert1 = pol.getVertex(0);
433
                assertEquals(vert1.getX(), -70.060316);
434
                assertEquals(vert1.getY(), 47.432044);
435
                assertEquals(vert1.getCoordinateAt(2), 12.0);
436
                
437
                vert2 = pol.getVertex(1);
438
                assertEquals(vert2.getX(), -70.060316);
439
                assertEquals(vert2.getY(), 48.432044);
440
                assertEquals(vert2.getCoordinateAt(2), 11.0);
441
                
442
                vert3 = pol.getVertex(2);
443
                assertEquals(vert3.getX(), -71.060316);
444
                assertEquals(vert3.getY(), 47.432044);
445
                assertEquals(vert3.getCoordinateAt(2), 10.0);
446
                
447
                vert4 = pol.getVertex(3);
448
                assertEquals(vert4.getX(), -70.060316);
449
                assertEquals(vert4.getY(), 47.432044);
450
                assertEquals(vert4.getCoordinateAt(2), 12.0);
451
                
452
                byte[] bytes = geom.convertToEWKB();
453
                assertEquals(wkbHex, getWKBHex(bytes));
454
        }
455
        
456
        
457
        public void testMultiPolygon3DM() throws CreateGeometryException, GeometryOperationNotSupportedException, GeometryOperationException{
458
                String wkbHex = "01060000C00200000001030000C001000000040000003CDBA337DCC351C06D37C1374D374840000000000000F03F00000000000028403CDBA3"
459
                                + "37DC8351C06D37C1374D374840000000000000004000000000000026403CDBA337DCC351C06D37C1374DB74740000000000000084000000000000024"
460
                                + "403CDBA337DCC351C06D37C1374D374840000000000000F03F000000000000284001030000C001000000040000003CDBA337DC8351C06D37C1374DB7"
461
                                + "4740000000000000104000000000000028403CDBA337DC8351C06D37C1374D374840000000000000144000000000000026403CDBA337DCC351C06D37"
462
                                + "C1374DB74740000000000000184000000000000024403CDBA337DC8351C06D37C1374DB7474000000000000010400000000000002840";
463
                // SELECT ST_GeomFromEWKT('MULTIPOLYGONZM(((-71.060316 48.432044 1 12, -70.060316 48.432044 2 11, -71.060316 47.432044 3 10, -71.060316 48.432044 1 12)),((-70.060316 47.432044 4 12, -70.060316 48.432044 5 11, -71.060316 47.432044 6 10, -70.060316 47.432044 4 12)))');
464
                
465
                byte[] wkb = getWKB(wkbHex);
466
                assertEquals(wkbHex, getWKBHex(wkb));
467
                PostGISEWKBParser parser = new PostGISEWKBParser();
468
                Geometry geom = parser.parse(wkb);
469
                assertEquals(geom.getType(), Geometry.TYPES.MULTIPOLYGON);
470
                assertEquals(geom.getGeometryType().getSubType(), Geometry.SUBTYPES.GEOM3DM);
471
                assertEquals(geom.getDimension(), 4);
472
                assertEquals(geom.getGeometryType().hasM(), true);
473
                assertEquals(geom.getGeometryType().hasZ(), true);
474
                MultiPolygon mpol = (MultiPolygon) geom;
475
                
476
                Polygon pol = (Polygon) mpol.getSurfaceAt(0);
477
                Point vert1 = pol.getVertex(0);
478
                assertEquals(vert1.getX(), -71.060316);
479
                assertEquals(vert1.getY(), 48.432044);
480
                assertEquals(vert1.getCoordinateAt(2), 1.0);
481
                assertEquals(vert1.getCoordinateAt(3), 12.0);
482
                
483
                Point vert2 = pol.getVertex(1);
484
                assertEquals(vert2.getX(), -70.060316);
485
                assertEquals(vert2.getY(), 48.432044);
486
                assertEquals(vert2.getCoordinateAt(2), 2.0);
487
                assertEquals(vert2.getCoordinateAt(3), 11.0);
488
                
489
                Point vert3 = pol.getVertex(2);
490
                assertEquals(vert3.getX(), -71.060316);
491
                assertEquals(vert3.getY(), 47.432044);
492
                assertEquals(vert3.getCoordinateAt(2), 3.0);
493
                assertEquals(vert3.getCoordinateAt(3), 10.0);
494
                
495
                Point vert4 = pol.getVertex(3);
496
                assertEquals(vert4.getX(), -71.060316);
497
                assertEquals(vert4.getCoordinateAt(2), 1.0);
498
                assertEquals(vert4.getCoordinateAt(3), 12.0);
499
                
500
                
501
                pol = (Polygon) mpol.getSurfaceAt(1);
502
                vert1 = pol.getVertex(0);
503
                assertEquals(vert1.getX(), -70.060316);
504
                assertEquals(vert1.getY(), 47.432044);
505
                assertEquals(vert1.getCoordinateAt(2), 4.0);
506
                assertEquals(vert1.getCoordinateAt(3), 12.0);
507
                
508
                vert2 = pol.getVertex(1);
509
                assertEquals(vert2.getX(), -70.060316);
510
                assertEquals(vert2.getY(), 48.432044);
511
                assertEquals(vert2.getCoordinateAt(2), 5.0);
512
                assertEquals(vert2.getCoordinateAt(3), 11.0);
513
                
514
                vert3 = pol.getVertex(2);
515
                assertEquals(vert3.getX(), -71.060316);
516
                assertEquals(vert3.getY(), 47.432044);
517
                assertEquals(vert3.getCoordinateAt(2), 6.0);
518
                assertEquals(vert3.getCoordinateAt(3), 10.0);
519
                
520
                vert4 = pol.getVertex(3);
521
                assertEquals(vert4.getX(), -70.060316);
522
                assertEquals(vert4.getY(), 47.432044);
523
                assertEquals(vert4.getCoordinateAt(2), 4.0);
524
                assertEquals(vert4.getCoordinateAt(3), 12.0);
525
                
526
                byte[] bytes = geom.convertToEWKB();
527
                assertEquals(wkbHex, getWKBHex(bytes));
528
        }
529
        
530
        
531
        
532
        private String getWKBHex(byte[] bytes) {
533
                StringBuilder sbuilder = new StringBuilder();
534
                for(int i=0; i<bytes.length; i++){
535
                        String s = Integer.toHexString(bytes[i]);
536
                        if(s.length() < 2){
537
                                s="0"+s;
538
                        }else if(bytes[i]<0){
539
                                s=s.substring(6);
540
                        }
541
                        sbuilder.append(s);
542
                }
543
                return sbuilder.toString().toUpperCase();
544
        }
545

    
546

    
547
        private byte[] getWKB(String wkbHex){
548
                byte[] aux = new byte[wkbHex.length()/2];
549
                for(int i=0; i<aux.length; i++){
550
                        int n = Integer.parseInt(wkbHex.substring(i*2, i*2+2), 16);
551
                        aux[i] = (byte) n;
552
                }
553
                return aux;
554
        }
555

    
556

    
557
        @Override
558
        protected void doSetUp() throws Exception {
559
                // TODO Auto-generated method stub
560
                
561
        }
562
}