|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.cresques.io.GeoFile org.cresques.io.GeoRasterFile org.cresques.io.EcwFile
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.
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 |
public EcwFile(IProjection proj, java.lang.String fName)
Method Detail |
public void setView(Extent e)
GeoRasterFile
setView
in class GeoRasterFile
e
- Extentpublic Extent getView()
GeoRasterFile
getView
in class GeoRasterFile
public GeoFile load()
load
in class GeoRasterFile
public void close()
GeoRasterFile
close
in class GeoRasterFile
public int getWidth()
getWidth
in class GeoRasterFile
public int getHeight()
getHeight
in class GeoRasterFile
public void setMultifile(boolean mult)
public java.awt.Image updateImage(int width, int height, ICoordTrans rp)
updateImage
in class GeoRasterFile
width
- height
- rp
- Reproyección
public void reProject(ICoordTrans rp)
reProject
in interface Projected
reProject
in class GeoRasterFile
rp
- Coordenadas de la transformaciónpublic void refreshUpdate(int nWidth, int nHeight, double dWorldTLX, double dWorldTLY, double dWorldBRX, double dWorldBRY)
com.ermapper.ecw.JNCSProgressiveUpdate#refreshUpdate(int, int, double, double, double, double)
public void refreshUpdate(int nWidth, int nHeight, int dDatasetTLX, int dDatasetTLY, int dDatasetBRX, int dDatasetBRY)
protected void setRGBLine(java.awt.image.BufferedImage image, int startX, int startY, int w, int h, int[] rgbArray, int offset, int scansize)
image
- imagen con los datos actualesstartX
- inicio de la posición en X dentro de la imagenstartY
- inicio de la posición en X dentro de la imagenw
- Ancho de la imagenh
- Alto de la imagenrgbArray
- vector que contiene la banda que se va a sustituiroffset
- desplazamientoscansize
- tamaño de imagen recorrida por cada pprotected void setRGBLine(java.awt.image.BufferedImage image, int startX, int startY, int w, int h, int[] rgbArray, int offset, int scansize, int flags)
image
- imagen con los datos actualesstartX
- inicio de la posición en X dentro de la imagenstartY
- inicio de la posición en X dentro de la imagenw
- Ancho de la imagenh
- Alto de la imagenrgbArray
- vector que contiene la banda que se va a sustituiroffset
- desplazamientoscansize
- tamaño de imagen recorrida por cada pasoflags
- banda que se va a sustituir (Ctes de GeoRasterFile)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)
image
- imagen con los datos actualesstartX
- inicio de la posición en X dentro de la imagenstartY
- inicio de la posición en X dentro de la imagenw
- Ancho de la imagenh
- Alto de la imagenrgbArray
- vector que contiene la banda que se va a sustituiroffset
- desplazamientoscansize
- tamaño de imagen recorrida por cada pasoorigBand
- Banda origen del GeoRasterFiledestBandFlag
- banda que se va a sustituir (Ctes de GeoRasterFile)public java.awt.Image updateImage(int width, int height, ICoordTrans rp, java.awt.Image img, int origBand, int destBandFlag)
GeoRasterFile
updateImage
in class GeoRasterFile
width
- anchoheight
- altorp
- reproyecciónimg
- imagen
public java.lang.Object getData(int x, int y, int band)
GeoRasterFile
getData
in class GeoRasterFile
x
- coordenada Xy
- coordenada Y
public byte[] getWindow(int ulX, int ulY, int sizeX, int sizeY, int band)
getWindow
in class GeoRasterFile
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.public boolean getZone()
public int getUTM()
public java.lang.String getGeogCS()
public int getBlockSize()
getBlockSize
in class GeoRasterFile
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |