org.cresques.io
Class EcwFile

java.lang.Object
  extended byorg.cresques.io.GeoFile
      extended byorg.cresques.io.GeoRasterFile
          extended byorg.cresques.io.EcwFile
All Implemented Interfaces:
Extent.Has, Projected

public class EcwFile
extends GeoRasterFile

Soporte para los ficheros .ecw de ErMapper.
NOTA: El SDK que ermapper ha puesto a disposición del público en java es una versión 2.45, de 19/11/2001. Está implementada usando JNI que se apoya en tres librerías dinámicas (dll), y presenta deficiencias muy graves a la hora de acceder a la información. Hasta el momento hemos detectado 3 de ellas:
1º.- No soporta ampliaciones superiores a 1:1. si se intenta acceder a un ecw con un zoom mayor da una excepción del tipo com.ermapper.ecw.JNCSInvalidSetViewException, que de no ser tenida encuenta acaba tirando abajo la máquina virtual de java.
2º.- La longitud máxima de línea que adminte el método readLineRGBA es de unos 2500 pixeles, lo que hace el uso para la impresión en formatos superiorea a A4 a 300 ppp o más inviable.
3º.- La actualización progresiva usando el interface JNCSProgressiveUpdate con el JNCSFile hace que el equipo genere un error severo y se apague. Este error imposibilita esta técnica de acceso a ECW.

Para saltarnos la limitación del bug#1 pedimos la ventana correspondiente al zoom 1:1 para el view que nos han puesto, y la resizeamos al tamaño que nos pide el usuario.
Como consecuencia del bug#2, para tamaños de ventana muy grandes (los necesarios para imprimir a más de A4 a 300DPI), hay que hacer varias llamadas al fichero con varios marcos contiguos, y los devolvemos 'pegados' en una sola imagen (esto se realiza de manera transparente para el usuario dentro de la llamada a updateImage.

Author:
"Luis W. Sevilla"

Field Summary
 
Fields inherited from class org.cresques.io.GeoRasterFile
bandCount, bBandNr, BLUE_BAND, doTransparency, gBandNr, GREEN_BAND, rBandNr, RED_BAND, tFilter, updatable
 
Fields inherited from class org.cresques.io.GeoFile
bytesReaded, extent, lineCnt
 
Constructor Summary
EcwFile(IProjection proj, java.lang.String fName)
           
 
Method Summary
 void close()
          Cierra el fichero y libera los recursos.
 int getBlockSize()
          Devuelve el tamaño de bloque
 java.lang.Object getData(int x, int y, int band)
          Obtiene el valor del raster en la coordenada que se le pasa.
 java.lang.String getGeogCS()
          Obtiene el sistema de coordenadas geograficas
 int getHeight()
          Devuelve el alto de la imagen
 int getUTM()
          Devuelve el número de zona UTM
 Extent getView()
          Obtiene el extent asignado
 int getWidth()
          Devuelve el ancho de la imagen
 byte[] getWindow(int ulX, int ulY, int sizeX, int sizeY, int band)
          Devuelve los datos de una ventana solicitada
 boolean getZone()
          Obtiene la zona (Norte / Sur)
 GeoFile load()
          Carga un ECW.
 void refreshUpdate(int nWidth, int nHeight, double dWorldTLX, double dWorldTLY, double dWorldBRX, double dWorldBRY)
          Soporte para actualización de la imagen
 void refreshUpdate(int nWidth, int nHeight, int dDatasetTLX, int dDatasetTLY, int dDatasetBRX, int dDatasetBRY)
           
 void reProject(ICoordTrans rp)
          Reproyecta el raster.
 void setMultifile(boolean mult)
           
protected  void setRGBLine(java.awt.image.BufferedImage image, int startX, int startY, int w, int h, int[] rgbArray, int offset, int scansize)
          Asigna al objeto Image los valores con los dato de la imagen contenidos en el vector de enteros.
protected  void setRGBLine(java.awt.image.BufferedImage image, int startX, int startY, int w, int h, int[] rgbArray, int offset, int scansize, int flags)
          Asigna al objeto Image la mezcla entre los valores que ya tiene y los valores con los dato de la imagen contenidos en el vector de enteros.
protected  void setRGBLine(java.awt.image.BufferedImage image, int startX, int startY, int w, int h, int[] rgbArray, int offset, int scansize, int origBand, int destBandFlag)
          Asigna al objeto Image la mezcla entre los valores que ya tiene y los valores con los dato de la imagen contenidos en el vector de enteros.
 void setView(Extent e)
          Asigna un nuevo Extent
 java.awt.Image updateImage(int width, int height, ICoordTrans rp)
          Obtiene un trozo de imagen (determinado por la vista y los parámetros.
 java.awt.Image updateImage(int width, int height, ICoordTrans rp, java.awt.Image img, int origBand, int destBandFlag)
          Actualiza la/s banda/s especificadas en la imagen.
 
Methods inherited from class org.cresques.io.GeoRasterFile
cornersToWorldFile, fileIsSupported, getAlpha, getBand, getBandCount, getContour, getDataType, getObjects, getTransparency, openFile, printWF, registerExtension, saveWF, setAlpha, setBand, setDataType, setTransparency, setTransparency, setUpdatable
 
Methods inherited from class org.cresques.io.GeoFile
filterWS, getExtent, getFileSize, getName, getProjection, getTime, setFileSize, setName, setProjection
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

EcwFile

public EcwFile(IProjection proj,
               java.lang.String fName)
Method Detail

setView

public void setView(Extent e)
Description copied from class: GeoRasterFile
Asigna un nuevo Extent

Specified by:
setView in class GeoRasterFile
Parameters:
e - Extent

getView

public Extent getView()
Description copied from class: GeoRasterFile
Obtiene el extent asignado

Specified by:
getView in class GeoRasterFile
Returns:
Extent

load

public GeoFile load()
Carga un ECW.

Specified by:
load in class GeoRasterFile

close

public void close()
Description copied from class: GeoRasterFile
Cierra el fichero y libera los recursos.

Specified by:
close in class GeoRasterFile

getWidth

public int getWidth()
Devuelve el ancho de la imagen

Specified by:
getWidth in class GeoRasterFile
Returns:
Ancho de la imagen

getHeight

public int getHeight()
Devuelve el alto de la imagen

Specified by:
getHeight in class GeoRasterFile
Returns:
Ancho de la imagen

setMultifile

public void setMultifile(boolean mult)

updateImage

public java.awt.Image updateImage(int width,
                                  int height,
                                  ICoordTrans rp)
Obtiene un trozo de imagen (determinado por la vista y los parámetros.

Specified by:
updateImage in class GeoRasterFile
Parameters:
width -
height -
rp - Reproyección
Returns:
img

reProject

public void reProject(ICoordTrans rp)
Reproyecta el raster.

Specified by:
reProject in interface Projected
Specified by:
reProject in class GeoRasterFile
Parameters:
rp - Coordenadas de la transformación

refreshUpdate

public void refreshUpdate(int nWidth,
                          int nHeight,
                          double dWorldTLX,
                          double dWorldTLY,
                          double dWorldBRX,
                          double dWorldBRY)
Soporte para actualización de la imagen

See Also:
com.ermapper.ecw.JNCSProgressiveUpdate#refreshUpdate(int, int, double, double, double, double)

refreshUpdate

public void refreshUpdate(int nWidth,
                          int nHeight,
                          int dDatasetTLX,
                          int dDatasetTLY,
                          int dDatasetBRX,
                          int dDatasetBRY)

setRGBLine

protected void setRGBLine(java.awt.image.BufferedImage image,
                          int startX,
                          int startY,
                          int w,
                          int h,
                          int[] rgbArray,
                          int offset,
                          int scansize)
Asigna al objeto Image los valores con los dato de la imagen contenidos en el vector de enteros.

Parameters:
image - imagen con los datos actuales
startX - inicio de la posición en X dentro de la imagen
startY - inicio de la posición en X dentro de la imagen
w - Ancho de la imagen
h - Alto de la imagen
rgbArray - vector que contiene la banda que se va a sustituir
offset - desplazamiento
scansize - tamaño de imagen recorrida por cada p

setRGBLine

protected void setRGBLine(java.awt.image.BufferedImage image,
                          int startX,
                          int startY,
                          int w,
                          int h,
                          int[] rgbArray,
                          int offset,
                          int scansize,
                          int flags)
Asigna al objeto Image la mezcla entre los valores que ya tiene y los valores con los dato de la imagen contenidos en el vector de enteros. De los valores RGB que ya contiene se mantienen las bandas que no coinciden con el valor de flags. La banda correspondiente a flags es sustituida por los datos del vector.

Parameters:
image - imagen con los datos actuales
startX - inicio de la posición en X dentro de la imagen
startY - inicio de la posición en X dentro de la imagen
w - Ancho de la imagen
h - Alto de la imagen
rgbArray - vector que contiene la banda que se va a sustituir
offset - desplazamiento
scansize - tamaño de imagen recorrida por cada paso
flags - banda que se va a sustituir (Ctes de GeoRasterFile)

setRGBLine

protected void setRGBLine(java.awt.image.BufferedImage image,
                          int startX,
                          int startY,
                          int w,
                          int h,
                          int[] rgbArray,
                          int offset,
                          int scansize,
                          int origBand,
                          int destBandFlag)
Asigna al objeto Image la mezcla entre los valores que ya tiene y los valores con los dato de la imagen contenidos en el vector de enteros. De los valores RGB que ya contiene se mantienen las bandas que no coinciden con el valor de flags. La banda correspondiente a flags es sustituida por los datos del vector.

Parameters:
image - imagen con los datos actuales
startX - inicio de la posición en X dentro de la imagen
startY - inicio de la posición en X dentro de la imagen
w - Ancho de la imagen
h - Alto de la imagen
rgbArray - vector que contiene la banda que se va a sustituir
offset - desplazamiento
scansize - tamaño de imagen recorrida por cada paso
origBand - Banda origen del GeoRasterFile
destBandFlag - banda que se va a sustituir (Ctes de GeoRasterFile)

updateImage

public java.awt.Image updateImage(int width,
                                  int height,
                                  ICoordTrans rp,
                                  java.awt.Image img,
                                  int origBand,
                                  int destBandFlag)
Description copied from class: GeoRasterFile
Actualiza la/s banda/s especificadas en la imagen.

Specified by:
updateImage in class GeoRasterFile
Parameters:
width - ancho
height - alto
rp - reproyección
img - imagen
Returns:
img

getData

public java.lang.Object getData(int x,
                                int y,
                                int band)
Description copied from class: GeoRasterFile
Obtiene el valor del raster en la coordenada que se le pasa. El valor será Double, Int, Byte, etc. dependiendo del tipo de raster.

Specified by:
getData in class GeoRasterFile
Parameters:
x - coordenada X
y - coordenada Y
Returns:

getWindow

public byte[] getWindow(int ulX,
                        int ulY,
                        int sizeX,
                        int sizeY,
                        int band)
Devuelve los datos de una ventana solicitada

Specified by:
getWindow in class GeoRasterFile
Parameters:
ulX - coordenada X superior izda.
ulY - coordenada Y superior derecha.
sizeX - tamaño en X de la ventana.
sizeY - tamaño en Y de la ventana.
band - Banda solicitada.

getZone

public boolean getZone()
Obtiene la zona (Norte / Sur)

Returns:
true si la zona es norte y false si es sur

getUTM

public int getUTM()
Devuelve el número de zona UTM

Returns:
Número de zona

getGeogCS

public java.lang.String getGeogCS()
Obtiene el sistema de coordenadas geograficas

Returns:
Sistema de coordenadas geográficas

getBlockSize

public int getBlockSize()
Devuelve el tamaño de bloque

Specified by:
getBlockSize in class GeoRasterFile
Returns:
Tamaño de bloque