Revision 12522

View differences:

trunk/libraries/libRaster/src-test/org/gvsig/raster/dataset/io/rmf/TestRmfWrite.java
1
/*
2
 * Created on 9-ago-2006
3
 *
4
 * To change the template for this generated file go to
5
 * Window>Preferences>Java>Code Generation>Code and Comments
6
 */
7 1
/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
8 2
 *
9
 * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
3
 * Copyright (C) 2007 IVER T.I. and Generalitat Valenciana.
10 4
 *
11 5
 * This program is free software; you can redistribute it and/or
12 6
 * modify it under the terms of the GNU General Public License
......
45 39
import org.gvsig.raster.datastruct.GeoPoint;
46 40
import org.gvsig.raster.datastruct.Histogram;
47 41
import org.gvsig.raster.datastruct.ViewPortData;
48
import org.gvsig.raster.datastruct.serializer.ColorTableRmfSerializer;
49 42
import org.gvsig.raster.datastruct.serializer.HistogramRmfSerializer;
50 43

  
51 44
/**
......
114 107
		
115 108
		//Tabla de color
116 109
		colorTable.setName("Prueba Tabla de Color");
117
		ColorTableRmfSerializer ser1 = new ColorTableRmfSerializer(colorTable);
110
		//ColorTableRmfSerializer ser1 = new ColorTableRmfSerializer(colorTable);
118 111
		//manager.addClient(ser1);
119 112
		
120 113
		//Estadisticas
trunk/libraries/libRaster/src-test/org/gvsig/raster/dataset/io/rmf/TestRmfRead.java
32 32
import org.gvsig.raster.dataset.RasterDriverException;
33 33
import org.gvsig.raster.dataset.properties.DatasetStatistics;
34 34
import org.gvsig.raster.dataset.serializer.GeoInfoRmfSerializer;
35
import org.gvsig.raster.dataset.serializer.GeoPointRmfSerializer;
35 36
import org.gvsig.raster.dataset.serializer.StatisticsRmfSerializer;
36 37
import org.gvsig.raster.datastruct.ColorTable;
38
import org.gvsig.raster.datastruct.GeoPoint;
37 39
import org.gvsig.raster.datastruct.Histogram;
38 40
import org.gvsig.raster.datastruct.HistogramClass;
39 41
import org.gvsig.raster.datastruct.serializer.ColorTableRmfSerializer;
......
50 52
public class TestRmfRead extends TestCase {
51 53

  
52 54
	private String baseDir = "./test-images/";
53
	private RasterDataset	testDataset = null;
54 55
	private RmfBlocksManager manager = null;
55
	private Histogram histogram = null;
56 56
	public String file = "readtest.rmf";
57 57
	private RasterDataset f1 = null;
58 58
	private String path1 = baseDir + "03AUG23153350-M2AS-000000122423_01_P001-BROWSE.jpg";
......
85 85
		ColorTableRmfSerializer ser1 = new ColorTableRmfSerializer();
86 86
		StatisticsRmfSerializer ser2 = new StatisticsRmfSerializer();
87 87
		GeoInfoRmfSerializer ser3 = new GeoInfoRmfSerializer(f1);
88
		GeoPointRmfSerializer ser4 = new GeoPointRmfSerializer();
89
		
88 90
		manager.addClient(ser);
89 91
		manager.addClient(ser1);
90 92
		manager.addClient(ser2);
91 93
		manager.addClient(ser3);
94
		manager.addClient(ser4);
92 95

  
93 96
		try {
94 97
			manager.read(null);
......
102 105
					testStatistics((DatasetStatistics)manager.getClient(i).getResult());
103 106
				if(client instanceof GeoInfoRmfSerializer)
104 107
					testGeoInfo((RasterDataset)manager.getClient(i).getResult());
108
				if(client instanceof GeoPointRmfSerializer)
109
					testGeoPoints((GeoPoint[])manager.getClient(i).getResult());
105 110
			}
106 111

  
107 112
		} catch (ParsingException e) {
......
227 232
	}
228 233

  
229 234
	public void testGeoInfo(RasterDataset dataset) {
230
		String proj = "";
235
		//String proj = "";
231 236
		//TODO: TEST: Terminar test de acceso a la georreferenciaci?n.
232
		if(dataset.getProjection() != null)
233
			proj = dataset.getProjection().getAbrev();
237
		//if(dataset.getProjection() != null)
238
			//proj = dataset.getProjection().getAbrev();
234 239
		double x = dataset.getExtent().getMin().getX();
235 240
		double y = dataset.getExtent().getMax().getY();
236 241

  
237 242
		assertEquals((int)x, 5000);
238 243
		assertEquals((int)y, 5000);
239 244
	}
245
	
246
	public void testGeoPoints(GeoPoint[] gpList) {
247
		GeoPoint p = gpList[0];
248
		
249
		assertEquals((int)p.pixelPoint.getX(), 10);
250
		assertEquals((int)p.pixelPoint.getY(), 10);
251
		assertEquals((int)p.mapPoint.getX(), 34223);
252
		assertEquals((int)p.mapPoint.getY(), 2344);
253
		
254
		assertEquals(p.active, true);
255
		
256
		assertEquals((int)p.leftCenterPoint.getX(), 24223);
257
		assertEquals((int)p.leftCenterPoint.getY(), 3244);
258
		assertEquals((int)p.rightCenterPoint.getX(), 2433);
259
		assertEquals((int)p.rightCenterPoint.getY(), 6244);
260
		
261
		assertEquals((int)p.leftViewPort.getExtent().minX(), 30032);
262
		assertEquals((int)p.leftViewPort.getExtent().maxY(), 2103);
263
		
264
		assertEquals((int)p.rightViewPort.getExtent().minX(), 30032);
265
		assertEquals((int)p.rightViewPort.getExtent().maxY(), 2103);
266
		
267
		assertEquals((int)p.zoomLeft, 1);
268
		assertEquals((int)p.zoomRight, 1);
240 269

  
270
	}
271

  
241 272
}
trunk/libraries/libRaster/src/org/gvsig/raster/dataset/serializer/GeoPointRmfSerializer.java
18 18
 */
19 19
package org.gvsig.raster.dataset.serializer;
20 20

  
21
import java.awt.geom.AffineTransform;
22
import java.awt.geom.Point2D;
21 23
import java.io.IOException;
22 24
import java.io.Reader;
23 25
import java.io.StringReader;
......
25 27

  
26 28
import org.gvsig.raster.dataset.io.rmf.ClassSerializer;
27 29
import org.gvsig.raster.dataset.io.rmf.ParsingException;
30
import org.gvsig.raster.datastruct.Extent;
28 31
import org.gvsig.raster.datastruct.GeoPoint;
32
import org.gvsig.raster.datastruct.ViewPortData;
29 33
import org.kxml2.io.KXmlParser;
30 34
import org.xmlpull.v1.XmlPullParserException;
31 35

  
......
132 136
	public GeoPointRmfSerializer() {
133 137
	}
134 138
			
135
	private void parserCenterPoint(GeoPoint gp, KXmlParser parser, String tag) {
136
		
139
	/**
140
	 * Parsea un bloque correspondiente a un punto central
141
	 * @param gp 
142
	 * @param parser
143
	 * @param parseableTag
144
	 * @throws NumberFormatException
145
	 * @throws XmlPullParserException
146
	 * @throws IOException
147
	 */
148
	private void parserCenterPoint(GeoPoint gp, KXmlParser parser, String parseableTag) throws NumberFormatException, XmlPullParserException, IOException {
149
		boolean end = false;
150
		boolean tagOk = false;
151
		int tag = parser.next();
152
		while (!end) {
153
			switch(tag) {
154
			case KXmlParser.START_TAG:
155
				if(parser.getName() != null){
156
					if (parser.getName().compareTo(parseableTag) == 0)
157
						tagOk = true;
158
				}		    	    
159
				break;
160
			case KXmlParser.END_TAG:
161
				if (parser.getName().compareTo(parseableTag) == 0)
162
					end = true;
163
				break;
164
			case KXmlParser.TEXT:
165
				if(tagOk) {
166
					if(parseableTag.compareTo("LeftCenterPoint") == 0) {
167
						double x = Double.valueOf(parserString(parser, X, null)).doubleValue();
168
						double y = Double.valueOf(parserString(parser, Y, null)).doubleValue();
169
						gp.leftCenterPoint = new Point2D.Double(x, y);
170
					}
171
					if(parseableTag.compareTo("RightCenterPoint") == 0) {
172
						double x = Double.valueOf(parserString(parser, X, null)).doubleValue();
173
						double y = Double.valueOf(parserString(parser, Y, null)).doubleValue();
174
						gp.rightCenterPoint = new Point2D.Double(x, y);
175
					}
176
					tagOk = false;
177
				}
178
				break;
179
			}
180
			if (!end)
181
				tag = parser.next();
182
		}
137 183
	}
138 184
	
139
	private void parserViewPort(GeoPoint gp, KXmlParser parser, String tag) {
140
		
185
	/**
186
	 * Parsea un bloque correspondiente a un punto central
187
	 * @param gp 
188
	 * @param parser
189
	 * @param parseableTag
190
	 * @throws NumberFormatException
191
	 * @throws XmlPullParserException
192
	 * @throws IOException
193
	 */
194
	private void parserBoundingBox(GeoPoint gp, KXmlParser parser, String parseableTag) throws NumberFormatException, XmlPullParserException, IOException {
195
		boolean end = false;
196
		boolean tagOk = false;
197
		int tag = parser.next();
198
		while (!end) {
199
			switch(tag) {
200
			case KXmlParser.START_TAG:
201
				if(parser.getName() != null){
202
					if (parser.getName().compareTo(BBOX) == 0)
203
						tagOk = true;
204
				}		    	    
205
				break;
206
			case KXmlParser.END_TAG:
207
				if (parser.getName().compareTo(BBOX) == 0)
208
					end = true;
209
				break;
210
			case KXmlParser.TEXT:
211
				if(tagOk) {
212
					if(parseableTag.compareTo("LeftViewPort") == 0) {
213
						double x = Double.valueOf(parserString(parser, PX, null)).doubleValue();
214
						double y = Double.valueOf(parserString(parser, PY, null)).doubleValue();
215
						double w = Double.valueOf(parserString(parser, WCWIDTH, null)).doubleValue();
216
						double h = Double.valueOf(parserString(parser, WCHEIGHT, null)).doubleValue();
217
						gp.leftViewPort.setExtent(new Extent(x, y, x + w, y - h));
218
					}
219
					if(parseableTag.compareTo("RightViewPort") == 0) {
220
						double x = Double.valueOf(parserString(parser, PX, null)).doubleValue();
221
						double y = Double.valueOf(parserString(parser, PY, null)).doubleValue();
222
						double w = Double.valueOf(parserString(parser, WCWIDTH, null)).doubleValue();
223
						double h = Double.valueOf(parserString(parser, WCHEIGHT, null)).doubleValue();
224
						gp.rightViewPort.setExtent(new Extent(x, y, x + w, y - h));
225
					}
226
					tagOk = false;
227
				}
228
				break;
229
			}
230
			if (!end)
231
				tag = parser.next();
232
		}
141 233
	}
142 234
	
235
	/**
236
	 * Parsea un bloque correspondiente a un punto central
237
	 * @param gp 
238
	 * @param parser
239
	 * @param parseableTag
240
	 * @throws NumberFormatException
241
	 * @throws XmlPullParserException
242
	 * @throws IOException
243
	 */
244
	private void parserDimension(GeoPoint gp, KXmlParser parser, String parseableTag) throws NumberFormatException, XmlPullParserException, IOException {
245
		boolean end = false;
246
		boolean tagOk = false;
247
		int tag = parser.next();
248
		while (!end) {
249
			switch(tag) {
250
			case KXmlParser.START_TAG:
251
				if(parser.getName() != null){
252
					if (parser.getName().compareTo(PDIM) == 0)
253
						tagOk = true;
254
				}		    	    
255
				break;
256
			case KXmlParser.END_TAG:
257
				if (parser.getName().compareTo(PDIM) == 0)
258
					end = true;
259
				break;
260
			case KXmlParser.TEXT:
261
				if(tagOk) {
262
					if(parseableTag.compareTo("LeftViewPort") == 0) {
263
						double x = Double.valueOf(parserString(parser, WIDTH, null)).doubleValue();
264
						double y = Double.valueOf(parserString(parser, HEIGHT, null)).doubleValue();
265
						//gp.leftViewPort.setSize(x, y);
266
					}
267
					if(parseableTag.compareTo("RightViewPort") == 0) {
268
						double x = Double.valueOf(parserString(parser, WIDTH, null)).doubleValue();
269
						double y = Double.valueOf(parserString(parser, HEIGHT, null)).doubleValue();
270
						//gp.rightViewPort.setSize(x, y);
271
					}
272
					tagOk = false;
273
				}
274
				break;
275
			}
276
			if (!end)
277
				tag = parser.next();
278
		}
279
	}
280
	
281
	/**
282
	 * Parsea un viewport contenido en un punto de control
283
	 * @param gp
284
	 * @param parser
285
	 * @param parseableTag
286
	 * @throws XmlPullParserException
287
	 * @throws IOException
288
	 */
289
	private void parserViewPort(GeoPoint gp, KXmlParser parser, String parseableTag) throws XmlPullParserException, IOException {
290
		boolean end = false;
291
		if(parseableTag.compareTo("LeftViewPort") == 0) {
292
			gp.leftViewPort = new ViewPortData();
293
			gp.leftViewPort.mat = new AffineTransform();
294
		}
295
		if(parseableTag.compareTo("RightViewPort") == 0) { 
296
			gp.rightViewPort = new ViewPortData();
297
			gp.rightViewPort.mat = new AffineTransform();
298
		}
299
		int tag = parser.next();
300
		while (!end) {
301
			switch(tag) {
302
			case KXmlParser.START_TAG:
303
				if(parser.getName() != null){
304
					if (parser.getName().compareTo(parseableTag) == 0) {
305
						String proj = parserString(parser, PROJ, null);
306
						parserBoundingBox(gp, parser, parseableTag);
307
						parserDimension(gp, parser, parseableTag);
308
						if(parseableTag.compareTo("LeftViewPort") == 0)
309
							gp.zoomLeft = Double.valueOf(parserString(parser, ZOOM, null)).doubleValue();
310
						if(parseableTag.compareTo("RightViewPort") == 0)
311
							gp.zoomRight = Double.valueOf(parserString(parser, ZOOM, null)).doubleValue();
312
					}
313
				}		    	    
314
				break;
315
			case KXmlParser.END_TAG:
316
				if (parser.getName().compareTo(parseableTag) == 0)
317
					end = true;
318
				break;
319
			case KXmlParser.TEXT:
320
				break;
321
			}
322
			if (!end)
323
				tag = parser.next();
324
		}
325
	}
326
	
327
	/**
328
	 * Parsea un punto de control completo
329
	 * @param gp 
330
	 * @param parser
331
	 * @param xml
332
	 * @param tag
333
	 * @throws XmlPullParserException
334
	 * @throws IOException
335
	 */
336
	public void parserGeoPoint(GeoPoint gp, KXmlParser parser, String xml, int tag) throws XmlPullParserException, IOException  {
337
		double px = Double.parseDouble(parserString(parser, PIXELX, null));
338
		double py = Double.parseDouble(parserString(parser, PIXELY, null));
339
		gp.pixelPoint = new Point2D.Double(px, py);
340
		double mx = Double.parseDouble(parserString(parser, MAPX, null));
341
		double my = Double.parseDouble(parserString(parser, MAPY, null));
342
		gp.mapPoint = new Point2D.Double(mx, my);
343
		gp.active = Boolean.valueOf(parserString(parser, ACTIVE, null)).booleanValue();
344
		parserCenterPoint(gp, parser, "LeftCenterPoint");
345
		parserCenterPoint(gp, parser, "RightCenterPoint");
346
		parserViewPort(gp, parser, "LeftViewPort");
347
		parserViewPort(gp, parser, "RightViewPort");
348
	}
349
		
143 350
	/*
144 351
	 * (non-Javadoc)
145 352
	 * @see org.gvsig.raster.dataset.io.rmf.IRmfBlock#read(java.lang.String)
146 353
	 */
147 354
	public void read(String xml) throws ParsingException {
148 355
		ArrayList list = new ArrayList();
149
		GeoPoint gp = new GeoPoint();
356
		GeoPoint gp = null;
357
		boolean init = false;
358
		int nPoint = -1;
359
		boolean tagOk = false;
150 360
		
151 361
		KXmlParser parser = new KXmlParser();
152 362
		Reader reader = new StringReader(xml);
......
163 373
				while(tag != KXmlParser.END_DOCUMENT) {
164 374
					switch(tag) {
165 375
						case KXmlParser.START_TAG:
166
							if (parser.getName().compareTo(MAIN_TAG) == 0) {
167
								double px = Double.parseDouble(parserString(parser, PIXELX, null));
168
								double py = Double.parseDouble(parserString(parser, PIXELY, null));
169
								gp.pixelPoint.setLocation(px, py);
170
								double mx = Double.parseDouble(parserString(parser, MAPX, null));
171
								double my = Double.parseDouble(parserString(parser, MAPY, null));
172
								gp.mapPoint.setLocation(mx, my);
173
								gp.active = Boolean.valueOf(parserString(parser, ACTIVE, null)).booleanValue();
174
								parserCenterPoint(gp, parser, "LeftCenterPoint");
175
								parserCenterPoint(gp, parser, "RightCenterPoint");
176
								parserViewPort(gp, parser, "LeftViewPort");
177
								parserViewPort(gp, parser, "RightViewPort");
376
							if (parser.getName().compareTo(MAIN_TAG) == 0) 
377
								init = true;
378
							if(init) {
379
								if (parser.getName().compareTo(GEOPOINT) == 0) {
380
									gp = new GeoPoint();
381
									tagOk = true;
382
									nPoint++;
383
								}
178 384
							}
179 385
							break;
180 386
						case KXmlParser.END_TAG:								
181 387
							break;
182
						case KXmlParser.TEXT:							
388
						case KXmlParser.TEXT:		
389
							if(tagOk) {
390
								parserGeoPoint(gp, parser, xml,tag);
391
								tagOk = false;
392
								list.add(gp);
393
							}
183 394
							break;
184 395
					}
185 396
					tag = parser.next();
......
194 405
		}
195 406
		
196 407
		gpList = new GeoPoint[list.size()];
197
		for (int i = 0; i < list.size(); i++)
408
		for (int i = 0; i < list.size(); i++) 
198 409
			gpList[i] = (GeoPoint)list.get(i);
410

  
199 411
	}
200 412

  
201 413
	/*
......
207 419
				
208 420
		b.append("<" + MAIN_TAG + ">\n");
209 421
		for (int i = 0; i < gpList.length; i++) {
210
			b.append("\t<" + GEOPOINT + " n=" + i + ">\n");
422
			b.append("\t<" + GEOPOINT + " n=\"" + i + "\">\n");
211 423
			putProperty(b, PIXELX, gpList[i].pixelPoint.getX(), 2);
212 424
			putProperty(b, PIXELY, gpList[i].pixelPoint.getY(), 2);
213 425
			putProperty(b, MAPX, gpList[i].mapPoint.getX(), 2);
......
226 438
			
227 439
			b.append("\t\t<" + LEFTVP + ">\n");
228 440
			
441
			String proj = "";
229 442
			if(gpList[i].leftViewPort.getProjection() != null)
230
				putProperty(b, PROJ, gpList[i].leftViewPort.getProjection().getAbrev(), 2);
443
				proj = gpList[i].leftViewPort.getProjection().getAbrev();
444
			putProperty(b, PROJ, proj, 3);
231 445
			b.append("\t\t\t<" + BBOX + ">\n");
232 446
			putProperty(b, PX, gpList[i].leftViewPort.getExtent().getMin().getX(), 4);
233 447
			putProperty(b, PY, gpList[i].leftViewPort.getExtent().getMax().getY(), 4);
......
238 452
			b.append("\t\t\t<" + PDIM + ">\n");
239 453
			putProperty(b, WIDTH, GeoPoint.WIDTH_WINDOW, 4);
240 454
			putProperty(b, HEIGHT, GeoPoint.HEIGHT_WINDOW, 4);
241
			putProperty(b, ZOOM, gpList[i].zoomLeft, 4);
242
			b.append("\t\t\t<" + PDIM + ">\n");
455
			b.append("\t\t\t</" + PDIM + ">\n");
456
			putProperty(b, ZOOM, gpList[i].zoomLeft, 3);
243 457
			
244 458
			b.append("\t\t</" + LEFTVP + ">\n");
245 459
			
246 460
			b.append("\t\t<" + RIGHTVP + ">\n");
247 461
			
462
			proj = "";
248 463
			if(gpList[i].rightViewPort.getProjection() != null)
249
				putProperty(b, PROJ, gpList[i].rightViewPort.getProjection().getAbrev(), 2);
464
				proj = gpList[i].rightViewPort.getProjection().getAbrev();
465
			putProperty(b, PROJ, proj, 3);
250 466
			b.append("\t\t\t<" + BBOX + ">\n");
251 467
			putProperty(b, PX, gpList[i].rightViewPort.getExtent().getMin().getX(), 4);
252 468
			putProperty(b, PY, gpList[i].rightViewPort.getExtent().getMax().getY(), 4);
......
257 473
			b.append("\t\t\t<" + PDIM + ">\n");
258 474
			putProperty(b, WIDTH, GeoPoint.WIDTH_WINDOW, 4);
259 475
			putProperty(b, HEIGHT, GeoPoint.HEIGHT_WINDOW, 4);
260
			putProperty(b, ZOOM, gpList[i].zoomRight, 4);
261
			b.append("\t\t\t<" + PDIM + ">\n");
476
			b.append("\t\t\t</" + PDIM + ">\n");
477
			putProperty(b, ZOOM, gpList[i].zoomRight, 3);
262 478
			
263 479
			b.append("\t\t</" + RIGHTVP + ">\n");
264 480
			

Also available in: Unified diff