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 |
} |