Revision 198

View differences:

org.gvsig.raster.app/trunk/org.gvsig.raster.app/org.gvsig.raster.app.tools/src/main/java/org/gvsig/raster/app/extension/raster/bean/createlayer/CreateLayerPanel.java
60 60
	}
61 61
	
62 62
	/**
63
	 * Disables the new layer option. It is useful for remote
64
	 * services
65
	 */
66
	public void disableNewLayer() {
67
		getRadioOnlyView().setSelected(true);
68
		getRadioNewLayer().setEnabled(false);
69
	}
70
	
71
	/**
63 72
	 * Devuelve el panel principal
64 73
	 * @return
65 74
	 */
org.gvsig.raster.app/trunk/org.gvsig.raster.app/org.gvsig.raster.app.tools/src/main/java/org/gvsig/raster/app/extension/tool/enhanced/ui/EnhancedDialog.java
134 134
	public CreateLayerPanel getNewOrSaveLayerPanel() {
135 135
		 if (layerPanel == null) {
136 136
			 layerPanel = new CreateLayerPanel(lyr);
137
			 if(lyr.isRemote())
138
				 layerPanel.disableNewLayer();
137 139
		 }
138 140
		 return layerPanel;
139 141
	 }
org.gvsig.raster.app/trunk/org.gvsig.raster.app/org.gvsig.raster.app.tools/src/main/java/org/gvsig/raster/app/extension/tool/filter/ui/FilterPanel.java
169 169
	public CreateLayerPanel getNewLayerPanel() {
170 170
		if (newLayerPanel == null) {
171 171
			newLayerPanel = new CreateLayerPanel(layer);
172
			 if(layer.isRemote())
173
				 newLayerPanel.disableNewLayer();
172 174
		}
173 175
		return newLayerPanel;
174 176
	}
org.gvsig.raster.app/trunk/org.gvsig.raster.app/org.gvsig.raster.app.wmsclient/src/main/java/org/gvsig/raster/app/extension/wmsclient/layer/FLyrWMS.java
28 28
import java.awt.Point;
29 29
import java.awt.Rectangle;
30 30
import java.awt.geom.AffineTransform;
31
import java.awt.geom.NoninvertibleTransformException;
31 32
import java.awt.geom.Point2D;
32 33
import java.awt.geom.Rectangle2D;
33 34
import java.awt.image.BufferedImage;
......
45 46

  
46 47
import org.cresques.cts.ICoordTrans;
47 48
import org.cresques.cts.IProjection;
49
import org.gvsig.andami.PluginServices;
48 50
import org.gvsig.compat.net.ICancellable;
49 51
import org.gvsig.fmap.dal.DALLocator;
50 52
import org.gvsig.fmap.dal.DataStore;
......
82 84
import org.gvsig.fmap.mapcontext.layers.operations.ComposedLayer;
83 85
import org.gvsig.fmap.mapcontext.layers.operations.IHasImageLegend;
84 86
import org.gvsig.fmap.mapcontext.rendering.legend.ILegend;
87
import org.gvsig.raster.app.extension.wmsclient.wmc.WebMapContextTags;
88
import org.gvsig.raster.app.extension.wmsclient.wmc.XmlBuilder;
85 89
import org.gvsig.raster.fmap.layers.DefaultFLyrRaster;
86 90
import org.gvsig.raster.fmap.layers.IRasterLayerActions;
87 91
import org.gvsig.raster.fmap.layers.NotAvailableStateException;
92
import org.gvsig.raster.impl.datastruct.WMSLayerNode;
88 93
import org.gvsig.raster.impl.provider.RemoteRasterProvider;
89 94
import org.gvsig.raster.impl.store.DefaultRemoteRasterStore;
90 95
import org.gvsig.raster.util.CancelTaskImpl;
......
136 141
	private static final GeometryManager geomManager               = GeometryLocator.getGeometryManager();
137 142
	private static final Logger          logger                    = LoggerFactory.getLogger(FLyrWMS.class);
138 143
	private boolean 					 isPrinting                = false;
139
	private boolean 					 mustTileDraw              = false;
144
	private boolean 					 mustTileDraw              = true;
145
	private boolean 					 mustTilePrint             = true;
140 146
	private final int 					 maxTileDrawWidth          = 1023;
141 147
	private final int 					 maxTileDrawHeight         = 1023;
142 148
	private final int 					 maxTilePrintWidth         = 1023;
......
369 375
	 * (non-Javadoc)
370 376
	 * @see org.gvsig.raster.fmap.layers.DefaultFLyrRaster#draw(java.awt.image.BufferedImage, java.awt.Graphics2D, org.gvsig.fmap.mapcontext.ViewPort, org.gvsig.tools.task.Cancellable, double)
371 377
	 */
372
	@SuppressWarnings("deprecation")
373 378
	public void draw(BufferedImage image, Graphics2D g, ViewPort viewPort,
374 379
			Cancellable cancel, double scale) throws ReadException {
375 380
		CancelTaskImpl cancellable = new CancelTaskImpl(cancel);
......
386 391
		enableStopped();
387 392

  
388 393
		if (isWithinScale(scale)) {
389
			Point2D p = viewPort.getOffset();
390
			// p will be (0, 0) when drawing a view or other when painting onto
391
			// the Layout.
392
			Envelope vpEnvelope = viewPort.getAdjustedExtent();
393 394

  
394 395
			if(mustTileDraw) {
396
				Point2D p = viewPort.getOffset();
395 397
				Rectangle r = new Rectangle((int) p.getX(), (int) p.getY(), viewPort.getImageWidth(), viewPort.getImageHeight());
396 398
				Tiling tiles = new Tiling(maxTileDrawWidth, maxTileDrawHeight, r);
397 399
				tiles.setAffineTransform((AffineTransform) viewPort.getAffineTransform().clone());
398 400

  
399
				/*MultiRasterDataset[][] datasets = new MultiRasterDataset[tiles.getNumRows()][tiles.getNumCols()];
400
				Buffer[][] buf = new Buffer[tiles.getNumRows()][tiles.getNumCols()];
401
				layerRaster = new FLyrRasterSE[tiles.getNumTiles()];
402 401
				lastNColumns = tiles.getNumCols();
403 402
				lastNRows = tiles.getNumRows();
404 403
				for (int tileNr = 0; tileNr < tiles.getNumTiles(); tileNr++) {
405 404
					// drawing part
406 405
					try {
407 406
						ViewPort vp = tiles.getTileViewPort(viewPort, tileNr);
408
						boolean painted = drawTile(g, vp, cancel, tileNr, scale, tileNr);
409
						if(	layerRaster != null && 
410
								layerRaster[tileNr] != null && 
411
								painted) {
412
							datasets[(int)(tileNr / tiles.getNumCols())][tileNr % tiles.getNumCols()] = (MultiRasterDataset)layerRaster[tileNr].getDataSource().newDataset();
413
							buf[(int)(tileNr / tiles.getNumCols())][tileNr % tiles.getNumCols()] = layerRaster[tileNr].getRender().getLastRenderBuffer();
414
						}
415
					} catch (NoninvertibleTransformException e) {
416
						e.printStackTrace();
407
						drawTile(g, vp, cancellable, scale);
417 408
					} catch (LoadLayerException e) {
418
						// TODO Auto-generated catch block
419
						e.printStackTrace();
409
						throw new ReadException(e.getMessage(), e);
410
					} catch (NoninvertibleTransformException e) {
411
						throw new ReadException(e.getMessage(), e);
420 412
					}
421 413
				}
422
				try {
423
					if(datasets != null && datasets[0][0] != null) {
424
						dataset = new CompositeDataset(datasets);
425
						initializeRasterLayer(datasets, buf);
426
						buf = null;
427
					}
428
				} catch (MosaicNotValidException e) {
429
					throw new ReadException(
430
							"No hay continuidad en el mosaico.", e);
431
				} catch (LoadLayerException e) {
432
					throw new ReadException("Error inicializando la capa.",
433
							e);
434
				}*/
435 414
			} else {
436 415
				try {
437 416
					drawTile(g, viewPort, cancellable, scale);
438 417
				} catch (LoadLayerException e) {
439
					// TODO Auto-generated catch block
440
					e.printStackTrace();
418
					throw new ReadException(e.getMessage(), e);
441 419
				}
442 420
			}
443 421

  
......
452 430
	 * @throws ReadDriverException
453 431
	 * @return true when a tile has been painted
454 432
	 */
455
	private boolean drawTile(Graphics2D g, ViewPort vp, ICancellable cancel, double scale) throws LoadLayerException, ReadException {
433
	@SuppressWarnings("deprecation")
434
	private void drawTile(Graphics2D g, ViewPort vp, ICancellable cancel, double scale) throws LoadLayerException, ReadException {
456 435
		callCount++;
457 436
	
458 437
		// Compute the query geometry
......
460 439
		Envelope envelope = getFullEnvelope();
461 440
		Envelope vpEnv = vp.getAdjustedExtent();
462 441
		if (!vpEnv.intersects(envelope)) {
463
			return false;
442
			return;
464 443
		}
465 444

  
466 445
		// 2. Compute extent to be requested.
......
477 456
		Dimension sz = new Dimension(wImg, hImg);
478 457

  
479 458
		if ((wImg <= 0) || (hImg <= 0)) {
480
			return false;
459
			return;
481 460
		}
482 461

  
483 462
		try {
......
486 465
			Rectangle2D.Double vpExtent = this.getRectable2DFromEnvelope(vpEnv);
487 466
			Rectangle2D.intersect(vpExtent, bBox, extent);
488 467
			
489
			Extent ex = rManager.getDataStructFactory().createExtent(vp.getAdjustedEnvelope().getMinimum(0), 
468
			Extent ex = rManager.getDataStructFactory().createExtent(
469
					vp.getAdjustedEnvelope().getMinimum(0), 
490 470
					vp.getAdjustedEnvelope().getMaximum(1), 
491 471
					vp.getAdjustedEnvelope().getMaximum(0), 
492 472
					vp.getAdjustedEnvelope().getMinimum(1));
......
526 506
			}
527 507
		}
528 508
		callCount--;
529
		return true;
509
		return;
530 510
	}
531 511

  
532 512
	/**
......
536 516
	 */
537 517
	public void print(Graphics2D g, ViewPort viewPort, Cancellable cancel, double scale, PrintRequestAttributeSet properties)
538 518
	throws ReadException {
539

  
519
		CancelTaskImpl cancellable = new CancelTaskImpl(cancel);
520
		
521
		if (isVisible() && isWithinScale(scale)){
522
			isPrinting = true;
523
			if (!mustTilePrint) {
524
				draw(null, g, viewPort, cancel,scale);
525
			} else {
526
				Tiling tiles = new Tiling(maxTilePrintWidth, maxTilePrintHeight, g.getClipBounds());
527
				tiles.setAffineTransform((AffineTransform) viewPort.getAffineTransform().clone());
528
				for (int tileNr = 0; tileNr < tiles.getNumTiles(); tileNr++) {
529
					// Parte que dibuja
530
					try {
531
						ViewPort vp = tiles.getTileViewPort(viewPort, tileNr);
532
						drawTile(g, vp, cancellable, scale);
533
					} catch (NoninvertibleTransformException e) {
534
						throw new ReadException(e.getMessage(), e);
535
					} catch (LoadLayerException e) {
536
						throw new ReadException(e.getMessage(), e);
537
					}
538
				}
539
			}
540
			isPrinting = false;
541
		}
540 542
	}
541 543

  
542 544
	public void _print(Graphics2D g, ViewPort viewPort, Cancellable cancel,
......
617 619
			HashMap xmlAttrs = new HashMap();
618 620

  
619 621
			// <Layer>
620
			xmlAttrs.put(WebMapContextTags.HIDDEN, !isVisible()+"");
621
			xmlAttrs.put(WebMapContextTags.QUERYABLE, queryable+"");
622
			xmlAttrs.put(WebMapContextTags.HIDDEN, !isVisible() + "");
623
			xmlAttrs.put(WebMapContextTags.QUERYABLE, queryable + "");
622 624
			xml.openTag(WebMapContextTags.LAYER, xmlAttrs);
623 625
			xmlAttrs.clear();
624 626
			if (mapContextVersion.equals("1.1.0") || mapContextVersion.equals("1.0.0")) {
625 627
				// <Server>
626 628
				xmlAttrs.put(WebMapContextTags.SERVICE, WebMapContextTags.WMS);
627
				xmlAttrs.put(WebMapContextTags.VERSION, drv.getVersion());
628
				xmlAttrs.put(WebMapContextTags.SERVER_TITLE, drv.getServiceTitle());
629
				xmlAttrs.put(WebMapContextTags.VERSION, explorer.getVersion());
630
				xmlAttrs.put(WebMapContextTags.SERVER_TITLE, explorer.getServiceTitle());
629 631
				xml.openTag(WebMapContextTags.SERVER, xmlAttrs);
630 632
				xmlAttrs.clear();
631 633

  
632 634
				// <OnlineResource>
633 635
				xmlAttrs.put(WebMapContextTags.XLINK_TYPE, "simple");
634
				xmlAttrs.put(WebMapContextTags.XLINK_HREF, getHost().toString());
636
				xmlAttrs.put(WebMapContextTags.XLINK_HREF, getParameters().getHost().toString());
635 637
				xml.writeTag(WebMapContextTags.ONLINE_RESOURCE, xmlAttrs);
636 638
				xmlAttrs.clear();
637 639
				// </OnlineResource>
......
665 667

  
666 668
				// <FormatList>
667 669
				xml.openTag(WebMapContextTags.FORMAT_LIST);
668
				strings = (String[]) drv.getFormats().toArray(new String[0]);
670
				strings = (String[]) explorer.getFormats().toArray(new String[0]);
669 671
				for (int j = 0; j < strings.length; j++) {
670 672
					// <Format>
671 673
					String str = strings[j].trim();
672
					if (str.equals(getFormat())) {
674
					if (str.equals(explorer.getFormat())) {
673 675
						xml.writeTag(WebMapContextTags.FORMAT, str, WebMapContextTags.CURRENT, "1");
674 676
					} else {
675 677
						xml.writeTag(WebMapContextTags.FORMAT, str);
......
721 723

  
722 724
					// <Title>
723 725
					xml.writeTag(WebMapContextTags.TITLE, "default");
724
					// </Title>
725

  
726
					//							// <LegendURL width="180" format="image/gif" height="50">
727
					//							xmlAttrs.put(WebMapContextTags.WIDTH, "0");
728
					//							xmlAttrs.put(WebMapContextTags.HEIGHT, "0");
729
					//							xmlAttrs.put(WebMapContextTags.FORMAT.toLowerCase(), "image/gif");
730
					//							xml.openTag(WebMapContextTags.LEGEND_URL, xmlAttrs);
731
					//							xmlAttrs.clear();
732
					//								// <OnlineResource xlink:type="simple" xlink:href="http://globe.digitalearth.gov/globe/en/icons/colorbars/NATIONAL.gif"/>
733
					//								xmlAttrs.put(WebMapContextTags.XLINK_TYPE, "simple");
734
					//								xmlAttrs.put(WebMapContextTags.XLINK_HREF, "http://globe.digitalearth.gov/globe/en/icons/colorbars/NATIONAL.gif");
735
					//								xml.writeTag(WebMapContextTags.ONLINE_RESOURCE, xmlAttrs);
736
					//								// </OnlineResource>
737
					//						    // </LegendURL>
738
					//							xml.closeTag();
739
					// </Style>
740 726
					xml.closeTag();
741 727
				}
742 728
				// </StyleList>
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.api/src/main/java/org/gvsig/fmap/dal/coverage/explorer/WMSServerExplorer.java
125 125
	public Rectangle2D getBoundingBox(String[] layerNames, String srs);
126 126

  
127 127
    public boolean isQueryable();
128
    
129
    /**
130
     * @return The title of the service offered by the WMS server.
131
     */
132
    public String getServiceTitle();
128 133

  
129 134
}
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.io/org.gvsig.raster.io.base/src/main/java/org/gvsig/fmap/dal/coverage/dataset/io/server/WMSServerExplorerImpl.java
302 302
	public String getTitle() {
303 303
		return null;
304 304
	}
305
	
306
    /**
307
     * @return The title of the service offered by the WMS server.
308
     */
309
    public String getServiceTitle() {
310
		return connector.getServiceTitle();
311
    }
305 312

  
306 313
	public DataServerExplorerProviderServices getServerExplorerProviderServices() {
307 314
		// TODO Auto-generated method stub
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.io/org.gvsig.raster.io.base/src/main/java/org/gvsig/fmap/dal/coverage/dataset/io/wms/WMSConnector.java
321 321
    public String getHost(){
322 322
    	return client.getHost();
323 323
    }
324
   
324 325
}
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.io/org.gvsig.raster.io.base/src/main/java/org/gvsig/fmap/dal/coverage/dataset/io/wms/WMSDriver.java
367 367
	
368 368
	/**
369 369
	 * When the remote layer has fixed size this method downloads the file and return its reference. 
370
	 * File layer has in the long side FIXED_SIZE pixels and the bounding box is complete.
370
	 * File layer has in the long side FIXED_SIZE pixels and the bounding box is complete. This file could be
371
	 * useful to build an histogram or calculate statistics. This represents a sample of data.
371 372
	 * @return
372 373
	 * @throws RasterDriverException
373 374
	 */
......
376 377
			return fileLayerPixelSize;
377 378
		
378 379
		WMSStoreParametersImpl p = (WMSStoreParametersImpl)parameters;
379
		if(p.isSizeFixed()) {
380
			Extent e = getExtent();
381
			Rectangle2D bBox = new Rectangle2D.Double(e.getULX(), e.getULY(), e.width(), e.height());
382
			WMSStatus wmsStatus = loadWMSStatus(bBox);
380
		Extent e = getExtent();
381
		Rectangle2D bBox = new Rectangle2D.Double(e.getULX(), e.getLRY(), e.width(), e.height());
382
		WMSStatus wmsStatus = loadWMSStatus(bBox);
383
		
384
		if(!p.isSizeFixed()) {
383 385
			int w = 0;
384 386
			int h = 0;
385 387
			if(e.width() > e.height()) {
......
389 391
				h = FIXED_SIZE;
390 392
				w = (int)((e.width() * FIXED_SIZE) / e.height());
391 393
			}
392

  
394
			wmsStatus.setWidth(w);
395
			wmsStatus.setHeight(h);
393 396
			fileLayerPixelSize = downloadFile(wmsStatus, e.getULX(), e.getULY(), e.getLRX(), e.getLRY(), w, h);
397
		} else {
398
			fileLayerPixelSize = downloadFile(wmsStatus, e.getULX(), e.getULY(), e.getLRX(), e.getLRY(), 
399
					p.getFixedSize().width, p.getFixedSize().height);
394 400
		}
395
		return null;
401
		return fileLayerPixelSize;
396 402
	}
397 403

  
398
	/*
399
	 * (non-Javadoc)
400
	 * @see org.gvsig.raster.impl.provider.DefaultRasterProvider#readBlock(int, int)
404
	/**
405
	 * Reads a complete block of data and returns an tridimensional array of the right type. This function is useful
406
	 * to read a file very fast without setting a view. In a WMS service when the size is fixed then it will read the
407
	 * entire image but when the source hasn't pixel size it will read a sample of data. This set of data will have
408
	 * the size defined in FIXED_SIZE. 
409
	 * 
410
	 * @param pos Posici?n donde se empieza  a leer
411
	 * @param blockHeight Altura m?xima del bloque leido
412
	 * @return Object que es un array tridimendional del tipo de datos del raster. (Bandas X Filas X Columnas)
413
	 * @throws InvalidSetViewException
414
	 * @throws FileNotOpenException
415
	 * @throws RasterDriverException
401 416
	 */
402 417
	public Object readBlock(int pos, int blockHeight) 
403
		throws InvalidSetViewException, FileNotOpenException, RasterDriverException, ProcessInterruptedException {
418
	throws InvalidSetViewException, FileNotOpenException, RasterDriverException, ProcessInterruptedException {
404 419
		WMSStoreParametersImpl p = (WMSStoreParametersImpl)parameters;
405
		if(p.isSizeFixed()) {
406
			File lastFile = getFileLayer();
407
			BandList bandList = new BandListImpl();
408
			for (int i = 0; i < 3; i++) {
409
				try {
410
					bandList.addBand(new DatasetBandImpl(lastFile.getPath(), pos, Buffer.TYPE_BYTE), pos);
411
				} catch (BandNotFoundInListException e1) {
412
				}
413
			}
414
			bandList.setDrawableBands(new int[]{0, 1, 2});
415
			
420
		//if(p.isSizeFixed()) {
421
		File lastFile = getFileLayer();
422
		BandList bandList = new BandListImpl();
423
		for (int i = 0; i < 3; i++) {
416 424
			try {
417
				GdalDriver driver = new GdalDriver(lastFile.getPath());
418
				return driver.readBlock(pos, blockHeight);
419
			} catch (NotSupportedExtensionException exc) {
420
				throw new RasterDriverException("Error building GdalDriver", exc);
425
				bandList.addBand(new DatasetBandImpl(lastFile.getPath(), pos, Buffer.TYPE_BYTE), pos);
426
			} catch (BandNotFoundInListException e1) {
421 427
			}
422 428
		}
423
		return null;
429
		bandList.setDrawableBands(new int[]{0, 1, 2});
430

  
431
		try {
432
			GdalDriver driver = new GdalDriver(lastFile.getPath());
433
			return driver.readBlock(pos, blockHeight);
434
		} catch (NotSupportedExtensionException exc) {
435
			throw new RasterDriverException("Error building GdalDriver", exc);
436
		}
437
		/*} else {
438
			getFileLayer();
439
		}
440
		return null;*/
424 441
	}
425 442

  
426 443
	/*
......
500 517
		} catch (WMSException e) {
501 518
			throw new RasterDriverException(e.getMessage(), e);
502 519
		}
520
		
521
		if(lastRequest == null)
522
			return null;
523
		
503 524
		String nameWorldFile = getWorldFile(lastRequest.getPath());
504 525
		try {
505 526
			if(p.isSizeFixed()) {

Also available in: Unified diff