Statistics
| Revision:

gvsig-3d / 2.1 / trunk / doc / Fase 1 / dt-visor-3d.rst @ 438

History | View | Annotate | Download (28.5 KB)

1
=================================================================
2
 Visor 3D básico que integra Nasa WW SDK
3
=================================================================
4

    
5
-------------------
6
 Diseño técnico
7
-------------------
8

    
9
:Company:   gvSIG Association 
10
:Author:    DiSiD Corporation, S.L.
11
:Revision:  $Rev: $
12
:Date:      $Date: $
13
:Copyright: All rigths reserved
14

    
15
.. contents::
16
   :depth: 2
17
   :backlinks: none
18

    
19
.. sectnum::
20
   :depth: 1
21
   :start: 1
22

    
23
.. |year| date:: %Y
24

    
25
.. header:: 
26
      
27
   .. class:: headertable
28

    
29
   +-----------------------+-------------------------+
30
   |.. class:: left        |.. class:: right         |
31
   |                       |                         |
32
   | Diseño técnico        |###Page###               |
33
   +-----------------------+-------------------------+ 
34

    
35

    
36
.. footer:: 
37

    
38
    .. include:: <isonum.txt>
39

    
40
    .. class:: left
41

    
42
    *Visor 3D básico que integra Nasa WW SDK - Diseño técnico*
43

    
44
    |copy| |year| ** 
45

    
46

    
47
Introducción
48
=============
49

    
50
.. note::
51
 Este documento esta en continua construcción. A medida que se avance en el proyecto se irá añadiendo nueva información y refinando la existente.
52

    
53
Este documento detalla el diseño técnico de las funcionalidades definidas y la arquitectura del nuevo visor 3D basado en la librería NASA WW SDK para gvSIG 2.1+. Para más información consulte:
54

    
55
* http://worldwind.arc.nasa.gov/java/
56
* http://goworldwind.org/
57

    
58
El diseño técnico tendrá en cuenta el análisis de requisitos y el análisis funcional realizados en:
59

    
60
* http://devel.gvsig.org/svn/gvsig-3d/2.1/trunk/doc/re-visor-3d.rst
61
* http://devel.gvsig.org/svn/gvsig-3d/2.1/trunk/doc/af-visor-3d.rst
62

    
63
Diseño técnico
64
=====================
65

    
66
Para tener un poco del contexto del diseño técnico, se expone como debería de funcionar de forma resumida el visor 3D. Seguidamente se detallará como se estructura la librería y la arquitectura de plugins.
67

    
68
Ejemplo de caso de uso
69
-------------------------------
70

    
71
A partir de una vista 2D, se desea representar la información cargada de forma tridimensional. Para ello, el usuario dispondrá de dos entradas de menú / botones para crear los dos tipos de visores: esférico y plano definidos en TYPE.SPHERE y TYPE.FLAT. Las dos entradas de menú ejecutarán una misma extensión, View3DExtension, la cual dependiendo del *action command* realizará una acción u otra. Pero antes de explicar la creación de visor el usuario debe definir parámetros o propiedades para la carga y gestión de las capas dentro del visor 3D.
72

    
73
Las capas tienen propiedades comunes, definidas en `LayerProperties3D`_, y especificas que varían en función del tipo de capa, definidas en las subclases ``RasterLayerProperties3D`` y ``VectorialLayerProperties3D``. La propiedades comunes son las siguientes:
74

    
75
* Nivel máximo de detalle: nivel máximo de detalle en la visualización de la capa. Cuanto más alto sea el número máximo de nivel de detalle más tiles se generarán y más espacio ocuparán en el disco.
76
* Nivel mínimo de detalle: nivel mínimo de detalle en la visualización de la capa. Cuanto más pequeño sea el número mínimo de nivel de detalle menos tiles se generarán y menos espacio ocuparán en el disco.
77

    
78
La librería WW permite dividir un raster, ya sea normal o de elevación, en varios niveles de detalle que se muestran dependiendo de lo cerca o lejos se encuentre el enfoque de la capa raster. Los niveles de detalle se estructuran en forma de pirámide, de menor resolución y número de tiles (nivel mínimo) a mayor nivel de resolución y número de tiles (nivel máximo). Para más información de como se gestionan los niveles de detalle y los tiles dentro de la librería WW consulte:
79

    
80
 http://www.microimages.com/documentation/TechGuides/78Worldwind.pdf
81

    
82
Además de las propiedades descritas anteriormente si la capa es de tipo vectorial tiene las siguientes propiedades:
83

    
84
* Modo de carga rasterizado: permite indicar si la capa vectorial se va a cargar en el visor de forma rasterizada. La rasterización de una capa vectorial consiste en la conversión de una imagen vectorial a una imagen formada por píxeles. Por defecto las capas vectoriales se cargan en el visor rasterizadas debido a que la carga de capas vectoriales sin rasterizar se abordará más adelante.  
85

    
86
Si la capa es de tipo raster tiene las siguientes propiedades:
87

    
88
* Modo de carga elevación: permite indicar si el raster es de tipo elevación o no. 
89

    
90
Una vez definidas las propiedades 3D de la capas, se procede a la creación de un visor 3D. La extensión obtendrá la instancia única mediante el Locator y ejecutará el método ``ViewPanel3DManager#createViewPanel3D(MapContext, TYPE)`` pasándole como parámetro el mapContext de la vista activa y el tipo de visor dependiendo del *action command*. En la creación del visor, se accederá a la capas del MapContext para cargarlas obteniendo las propiedades asociadas a las capas mediante ``ViewPanel3D#getLayerProperties3D(FLayer)`` para determinar que tipo de LayerConverter instanciar.
91

    
92
Instanciado el conversor para la obtención de una capa WW se ejecutará el método ``LayerConverter#convert(FLayer)`` el cual realizará todo lo necesario para obtener la capa WW correspondiente. Una vez obtenida la capa se debe de añadir al componente WW y mostrar la ventana mediante ``ViewPanel3D#show()``.
93

    
94
Por otra parte cuando se activa un visor, se activan dos entradas de menú adicionales: Refrescar visor y Sincronizar enfoques. La entrada de menú Refrescar visor esta asociada a la extensión RefreshView3DExtension la cual obtendrá el `MapControl3D`_ del visor activo y ejecutará el método ``MapControl3D#reloadLayers()``. La entrada de menú Sincronizar enfoques esta asociada a la extensión SynchronizeView3DExtension la cual obtendrá el enfoque de la vista 2D a la que esta enlazada para mover el enfoque del visor hasta que los dos enfoques estén sincronizados.
95

    
96
Integración con la librería NASA WW SDK
97
----------------------------------------
98

    
99
World Wind es una colección de componentes que de forma interactiva muestran información geográfica en 3D. Las aplicaciones o applets que usen la librería deberá integrar uno o más componentes dentro de su interfaz gráfica. World wind sigue el siguiente esquema:
100

    
101
.. image:: ../images/world-wind-diagram.png
102

    
103
* Globe: representa la forma del planeta y el terreno. Contiene un Tessellator el cual es el encargado de generar el terreno.
104
* Layer: las capas añaden las imágenes, objetos u otra información al globo. La capas se ajustan a la forma del globo y se mueven junto a el cuando el usuario navega por el espacio tridimensional.
105
* Model: junta el globo y las capas.
106
* View: determina la vista del usuario sobre el modelo. La vista se va modificando en base a los eventos de ususario que recibe.
107
* SceneController: asocia la vista con el modelo. Controla el tiempo y el renderizado del modelo.
108

    
109
Se pretende crear una nivel de abstracción que ofrezca a los consumidores de la librería la funcionalidades descritas en el análisis funcional de forma que no tengan que interactuar con la librería WW. La integración del plugin con la librería World Wind se ha diseñado del siguiente modo:
110

    
111
* El componente `ViewPanel3D`_ integra un componente ``WorldWindowGLJPanel``. ``WorldWindowGLJPanel`` es autocontenido y su propósito es servir la aplicación WorldWind mostrando el modelo definido (globo y capas).
112
* La librería posee unos archivos de configuración en XML que son cargados cuando la librería se registra. Estos archivos de configuración por un lado definen la clases que implementan los distintos servicios que ofrece la librería y por otro las capas que se cargan por defecto al crear un modelo básico.
113
* Además de esta configuración, es necesario configurar unos parámetros espeficios para crear un ``WorldWindowGLJPanel`` esférico o plano. Esta configuración se realiza al instanciar un objeto `ViewPanel3D`_. Dependiendo del modo indicado como parámetro, se establece una configuración u otra.
114
* La obtención de las capas WW a partir de capas de gvSIG se realiza mediante la clase `LayerConverter`_ la cual permite obtener la capa equivalente en WW a partir de una capa de gvSIG para añadirla a las capas del modelo WW. Se ha implementa un nuevo tipo de capa llamado RasterTiledImageLayer la cual gestiona la peticiones de tiles en tiempo para que se obtengan los datos directamente desde el DAL de gvSIG. Esta gestión se realiza mediante los objetos ``DefaultRetrieverFactory``, ``DefaultRasterRetriever``, ``DefaultRasterServer``, ``DefaultDataRasterReaderFactory``, ``DefaultDataRasterReader`` y ``DefaultDataRaster``.
115

    
116
SWING API
117
----------
118

    
119
Este es el API de la interfaz de usuario de la librería del visor 3D, la cual esta basada en el modelo de implementación simple API/IMPL.
120

    
121
* Project: org.gvsig.view3d/org.gvsig.view3d.swing/org.gvsig.view3d.swing.api
122
* Package: or.gvsig.view3d.swing.api
123

    
124
View3DManager
125
~~~~~~~~~~~~~~~~~~~~~~
126

    
127
Punto de entrada a la librería view3D. Proporciona métodos para la creación de visores, paneles de propiedades y obtención de las propiedades 3D de una capa.
128

    
129
* createViewPanel3D(MapContext theMapContext, TYPE type) : ViewPanel3D
130

    
131
  Crea un objeto `ViewPanel3D`_ pasándole como parámetro el MapContext y el tipo de panel.
132

    
133
* getLayerProperties3D(FLayer layer) : LayerProperties3D
134

    
135
  Obtiene las propiedades asociadas a un capa.
136

    
137
* setLayerProperties3D(FLayer layer, LayerProperties3D properties) : void
138

    
139
  Asigna las propiedades a la capa que recibe como parámetro.
140

    
141
.. note::
142
  Falta especificar las propiedades relacionadas con la vista, las propiedades generales y sus interfaces.
143

    
144
MapControl3D
145
~~~~~~~~~~~~~~~~~~~~~~
146

    
147
Define el API del componente 3D.
148

    
149
* getMapContext() : MapContext
150

    
151
  Obtiene el MapContext asociado al visor. Del MapContext asociado se extrae la información necesaria para la representación de los datos en 3D y la sincronización de enfoques.
152

    
153
* getType() : TYPE
154

    
155
  Obtiene el tipo del visor. Devuelve un objeto enum que puede ser TPYE.SPHERE o TYPE.FLAT (ver `TYPE`_).
156

    
157
* getVerticalExaggeration() : double
158

    
159
  Obtiene la exageración vertical del visor.
160

    
161
* reloadLayers() : void
162

    
163
  Elimina las capas cargadas. Accede al MapContext asociado al visor y carga de nuevo las capas. Se usa para actualizar el visor con los posibles cambios realizados sobre la vista 2D.
164

    
165
* setMapContext(MapContext theMapContext) : void
166

    
167
  Establece el MapContext al visor y recarga la información mediante reloadLayers().
168

    
169
* setVerticalExaggeration(double verticalExaggeration) : void
170

    
171
  Establece las exageración vertical del visor.
172

    
173
* setAtmosphereVisibility(boolean visibility) : void
174

    
175
  Asigna la visibilidad al componente que representa la atmósfera.
176

    
177
* setNortIndicatorVisibility(boolean visibility) : void
178

    
179
  Asigna la visibilidad al componente que indica el norte y la inclinación del plano.
180

    
181
* setMiniMapVisibility(boolean visibility) : void
182

    
183
  Asigna la visibilidad al componente minimapa.
184

    
185
* setScaleVisibility(boolean visibility) : void
186

    
187
  Asigna la visibilidad al componente que representa la escala.
188

    
189
* setStarBackgroundVisibility(boolean visibility) : void
190

    
191
  Asigna la visibilidad al componente que representa el fondo de estrellas.
192

    
193
* synchronizeViewPorts() : void
194

    
195
  Obtiene el ``ViewPort`` de la vista y realiza las transformaciones necesarias para el enfoque del visor 3D muestra la misma región. Hay que tener en cuenta si la opción "Animación en la sincronización de enfoques" esta marcada o no. En caso de que este marcada la sincronización se debe animar, en caso contrario, no.
196

    
197
* getAtmosphereVisibility() : boolean
198

    
199
  Obtiene la visibilidad del componente que representa la atmósfera.
200

    
201
* getMiniMapVisibility() : boolean
202

    
203
  Obtiene la visibilidad del componente que representa el minimapa.
204

    
205
* getStarBackgroundVisibility() : boolean
206

    
207
  Obtiene la visibilidad del componente que representa el fondo de estrellas.
208

    
209
* getNorthIndicatorVisibility() : boolean
210

    
211
  Obtiene la visibilidad del componente que representa el indicar del norte y el grado de inclinación.
212

    
213
* getScaleVisibility() : boolean
214

    
215
  Obtiene la visibilidad del componente que representa la escala.
216

    
217
ViewPanel3D
218
~~~~~~~~~~~~~~~~~~~~~~
219

    
220
Representa la ventana que contiene el componente `MapControl3D`_.
221

    
222
* show() : void
223

    
224
  Invoca al WindowManager para mostrar el visor en modo ventana.
225

    
226
* getMapControl3D() : MapControl3D
227

    
228
  Devuelve el componente asociado a la ventana.
229

    
230
TYPE
231
~~~~~~~~~~~~~~~~~~~~~~
232

    
233
Enumerado que representa los dos tipos posibles de un visor 3D. Los dos tipos son: SPHERE y FLAT.
234

    
235
LayerProperties3D
236
~~~~~~~~~~~~~~~~~~~~~~
237

    
238
Clase que representa la propiedades 3D de una capa.
239

    
240
* setMaxLevel(int maxLevel) : void
241

    
242
  Asigna el máximo nivel de detalle de la capa.
243

    
244
* getMaxLevel() : int
245

    
246
  Obtiene el máximo nivel de detalle de la capa.
247

    
248
* setMinLevel(int minLevel) : void
249

    
250
  Asigna el mínimo nivel de detalle de la capa.
251

    
252
* getMinLevel() : int
253

    
254
  Obtiene el mínimo nivel de detalle de la capa.
255

    
256
* setFileStore(String path) : void
257

    
258
  Asigna el directorio padre donde se ubicarán las diferentes capas cacheadas
259

    
260
* getFileStore() : String
261

    
262
  Obtiene el directorio padre donde se ubican las diferentes capas cacheadas.
263

    
264
* getCacheName() : String
265

    
266
  Obtiene el nombre único de la caché el cual da nombre a la carpeta dentro del file store que contiene los tiles cacheados y los archivos de configuración.
267

    
268
RasterLayerProperties3D extends LayerProperties3D
269
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
270

    
271
Clase que representa la propiedades 3D de una capa raster.
272

    
273
* setElevation(boolean elevation) : void
274

    
275
  Asigna a la capa si el modo de carga de la capa es de elevación o no.
276

    
277
* getElevation() : boolean
278

    
279
  Obtiene si el modo de carga de la capa raster es de elevación o no.
280

    
281
VectorialLayerProperties3D extends LayerProperties3D
282
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
283

    
284
Clase que representa la propiedades 3D de una capa vectorial.
285

    
286
* setRasterized(boolean rasterized) : void
287

    
288
  Asigna a la capa si el modo de carga de la capa es rasterizado o no.
289

    
290
* getRasterized() : boolean
291

    
292
  Obtiene si el modo de carga de la capa vectorial es rasterizado o no.
293

    
294
SWING IMPL
295
--------------
296

    
297
Este es la implementación de la interfaz de usuario de la librería del visor 3D.
298

    
299
* Project: org.gvsig.view3d/org.gvsig.view3d.swing/org.gvsig.view3d.swing.impl
300
* Package: or.gvsig.view3d.swing.impl
301

    
302
DefaultView3DManager implements View3DManager
303
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
304

    
305
Implementación por defecto del manager View3DManager
306

    
307
DefaultViewPanel3D implements ViewPanel3D
308
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
309

    
310
Implementación por defecto de los métodos descritos en la interfaz ViewPanel3D. Esta clase tendrá asociado un MapContext que permitirá obtener información acerca del enfoque, escucha eventos de cambio sobre capas y enfoque, versionado... 
311

    
312
* public DefaultViewPanel3D(MapContext mapContext, TYPE type);
313

    
314
  Constructor que permite instancia un nuevo visor 3D a partir de un MapContext y el tipo. Este constructor accederá a las capas del mapContext para añadirlas al componente de la librería WW. Para añadir una capa al componente WW es necesaria una transformación (``LayerConverter#convert(layer)``) de la capa gvSIG a una capa WW en base al modo de carga asociado especificado por el usuario.
315

    
316
LayerConverter
317
~~~~~~~~~~~~~~~~~~~~~~
318

    
319
Interfaz que permite convertir una capa gvSIG en una capa WW. Este proceso depende del tipo de capa y el modo de carga definido.
320

    
321
* convert(FLayer layer) : gov.nasa.worldwind.layers.Layer
322

    
323
  Método que a partir de una capa gvSIG obtiene la capa correspondiente en WW.
324

    
325
DefaultRasterLayerConverter implements LayerConverter
326
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
327

    
328
Implementación de la interfaz LayerConverter que permite convertir una capa FLyrRaster en RasterTiledImageLayer mediante ``LayerConverter#convert(FLayer layer)``. El proceso de conversión debe seguir los siguientes puntos:
329

    
330
* Configuración de los parámetros necesarios en un fichero XML para crear una capa del tipo RasterTileImageLayer. Los parámetros necesarios son:
331

    
332
 * DATA_CACHE_NAME: Nombre de la carpeta dentro de la cache donde se alojará los tiles generados en tiempo de ejecución. Este nombre debe ser único.
333
 * SECTOR: Zona geográfica del raster especificada en grados sobre la proyección EPSG:4326.
334
 * WIDTH: ancho en píxeles de la imagen raster.
335
 * HEIGHT: alto en píxeles de la imagen raster.
336
 * DISPLAY_NAME: Nombre de la capa.
337
 * FILE_STORE: almacén de archivos de la cache. Proporciona métodos para añadir / quitar localizaciones, buscar archivos, borra archivos...
338
 * IMAGE_FORMAT: formato de los tiles que se generan.
339
 * FORMAT_SUFFIX: sufijo de archivo de los tiles generados.
340

    
341
Además de estos parámetros también es necesario añadir en tiempo de ejecución la capa gvSIG que se desea convertir de la cual se obtendrá la información para la creación de tiles mediante la clave GVSIG_LAYER. Por otra parte, existen parámetros opcionales que si no se asigna ningún valor la librería asigna el valor por defecto. Debido al gran número de parámetros configurables se resaltan los siguientes:
342

    
343
 * Opciones de capas: opacidad, máxima y mínima altura de activación...
344
 * Estructura de niveles de detalle: nivel máximo y mínimo de nivel de detalle, niveles inactivos...
345
 * Generación de tiles: tamaño del tile, origen del primer tile, extensión de los tiles generados... 
346

    
347
* Crear la capa de tipo RasterTileImageLayer a partir de los parámetros y añadirla al modelo. Al instanciar una nueva capa RasterTileImageLayer, se configura una factoría del tipo DefaultRetrieverFactory la cual permite la creación de objetos DefaultRasterRetriever. Dichos objetos son los encargados de realizar la distintas peticiones a un objeto DefaultRasterServer el cual es el encargado de servir la información procedente de un DataRaster. Dependiendo del tipo de capa y el modo de carga será una implementación u otra. En el caso de casa raster con modo de carga imagen el tipo será RasterLayerDataRaster y para capas vectoriales rasterizadas RasterizedVectorialLayer.
348

    
349
La rasterización de capa vectoriales se realiza en VectorialLayerDataRaster en base a las peticiones que recibe por parte de DefaultRasterServer. El proceso se rasterización consistirá en usar el método ``FLyrVect#draw(image,graphics,viewport, scale)`` estableciendo el ViewPort a la zona o sección requerida para la obtención del tile.
350

    
351
DefaultElevationLayerConverter implements LayerConverter
352
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
353

    
354
Implementación de la interfaz LayerConverter que permite convertir una capa FLyrRaster en DefaultElevationModel mediante ``LayerConverter#convert(FLayer layer)``. El proceso de conversión debe seguir los siguientes puntos:
355

    
356
* Configuración de los parámetros necesarios en un fichero XML para crear una modelo de elevación ElevationModel. Los parámetros necesarios son:
357

    
358
  * DISPLAY_NAME: Nombre del modelo de elevación
359
  * SECTOR: Zona geográfica del raster especificada en grados sobre la proyección EPSG:4326.
360
  * WIDTH: ancho en píxeles de la imagen raster.
361
  * HEIGHT: alto en píxeles de la imagen raster.
362
  * FILE_STORE: almacén de archivos de la cache. Proporciona métodos para añadir / quitar localizaciones, buscar archivos, borra archivos...
363
  * IMAGE_FORMAT: formato de los tiles genera
364
  * DATA_TYPE: tipo de dato de la información del raster.
365
  * PIXEL_FORMAT: formato del pixel: AVKey.ELEVATION o AVKey.IMAGE
366
  * FORMAT_SUFFIX: sufijo de archivo de los tiles generados.
367

    
368
    Además de estos parámetros también es necesario añadir en tiempo de ejecución la capa gvSIG que se desea convertir de la cual se obtendrá la información para la creación de tiles mediante la clave GVSIG_LAYER. Por otra parte, existen parámetros opcionales que si no se asigna ningún valor la librería asigna el valor por defecto. Los parámetros opcionales son:
369

    
370
  * BYTE_ORDER: orden de los bytes. Little endian o big endian.
371
  * ELEVATION_MAX: elevación máxima y mínima.
372
  * ELEVATION_MIN: elevación mínima del raster.
373
  * EXPIRY_TIME: tiempo de expiración de un tile dentro de la cache.
374
  * MISSING_DATA_SIGNAL: Valor "no data"
375
  * MISSING_DATA_REPLACEMENT: Valor que se obtiene al obtener la elevación sobre un punto "no data".
376
  * NETWORK_RETRIEVAL_ENABLED: Indica el modo de trabajo online o offline.
377
  * ELEVATION_EXTREMES_FILE: ruta al fichero que contiene información sobre las elevaciones extremas.
378

    
379
* Crear el modelo de elevación DefaultElevationModel a partir de lo parámetros y añadirlo al modelo ya existente. El modelo existente será de tipo CompoundElevationModel el cual permite añadir varios modelos de elevación y mostrarlos a la vez. Al instanciar un nuevo modelo de elevación, se configura una factoría del tipo DefaultRetrieverFactory la cual permite la creación de objetos DefaultRasterRetriever. Dichos objetos son los encargados de realizar las distintas peticiones a un objeto DefaultRasterServer el cual es el encargado de servir la información procedente de un DataRaster. Para este caso el DataRaster será de tipo ElevationLayerDataRaster el cual atacará sobre la capa raster para obtener la información que se precise.
380

    
381
DefaultWMSLayerConverter implements LayerConverter
382
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
383

    
384
.. note::
385
  TODO en fases posteriores
386

    
387
DefaultVectorialLayerConverter implements LayerConverter
388
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
389

    
390
.. note::
391
  TODO en fases posteriores
392

    
393
RasterTiledImageLayer extends BasicTiledImageLayer
394
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
395

    
396
Implementación de una capa WW. Entre otras funcionalidades, esta capa gestiona las peticiones de texturas e imágenes que recibe por parte de la aplicación así como la composición de tiles para un sector en concreto, las diferentes resoluciones por nivel de detalle y la creación de tareas para la recuperación / generación de tiles.
397

    
398
Esta capa tiene enlazado un objeto DefaultRetrieverFactory que le permite a la capa crear objetos DefaultRasterRetriever para gestionar las peticiones de datos para la creación de tiles.
399

    
400
En principio solo que habrá que sobrescribir los constructores de la clase BasicTiledImageLayer para que cuando se instancie una capa RasterTiledImageLayer se instancie también un DefaultretrieverFactory a partir de los parámetros.
401

    
402
DefaultRetrieverFactory implements RetrieverFactory
403
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
404

    
405
Implementación por defecto de un RetrieverFactory. Representa la factoría para la creación de instancias de objetos Retriever.
406

    
407
* createRetriever(AVList params, RetrievalPostProcessor postProcessor) : Retriever
408

    
409
  Instancia una implementación de la interfaz Retriever a partir de una lista de parámetros y un RetrievalPostProcessor que recibe como parámetro y una instancia local de RasterServer.
410

    
411
DefaultRasterRetriever implements Retriever
412
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
413

    
414
Implementación por defecto de Retriever. Esta clase gestiona las peticiones de imágenes que recibe por parte de la capa. Permite configurar tiempos de respuesta como timeouts, tiempo de expiración... además permite saber el estado en que se encuentra el retriever.
415

    
416
DefaultRasterServer implements RasterServer
417
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
418

    
419
Implementación por defecto de la interfaz RasterServer. Como su nombre indica esta clase representa un servidor de raster que atiende a las peticiones realizadas por objetos Retriever. Cuando recibe una petición mediante el método ``RasterServer#getRasterAsByteBuffer()`` accede al DataRaster que tiene asociado obtiene la información que precisa y la devuelve en un objeto de tipo java.nio.ByteBuffer.
420

    
421
* getRasterAsByteBuffer(AVList params) : ByteBuffer
422

    
423
  Obtiene del DataRaster asociado la información definida en los parámetros que recibe y la devuelve en un objeto java.nio.ByteBuffer.
424

    
425
* getSector() : Sector
426

    
427
  Obtiene el sector del data raster asociado.
428

    
429
DefaulDataRasterReaderFactory extends BasicDataRasterReaderFactory
430
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
431

    
432
Factoría que permite la creación de nuestra implementación DefaultDataReaderRasterReader a partir de un objeto de tipo DataStore.
433

    
434
* findReaderFor(Object source, AVList params) : DataRasterReader
435

    
436
  Obtiene la instancia de DataRasterReader apropiada para la lectura de la fuente de datos.
437

    
438
DefaultDataRasterReader extends AbstractDataRasterReader
439
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
440

    
441
Permite saber si se puede leer y obtener objetos DataRaster a partir de DataStore validando lo parámetros y metadatos del almacén.
442

    
443
* canRead(Object source, AVList params) : boolean
444

    
445
  Obtiene si este DataRasterReader es capaz de leer la fuente de datos y crear objetos DataRaster.
446

    
447
* read(Object source, AVList params) throws java.io.IOException : DataRaster[]
448

    
449
  Lee de la fuente de datos y crea objetos DataRaster
450

    
451
* readMetadata(Object source, AVList params) throws java.io.IOException : AVList
452

    
453
  Obtiene los metadatos asociados a las fuente de datos. Los metadatos varían en función de la fuente y el DataRasterReader.
454

    
455
* isImageryRaster(Object source, AVList params) : boolean
456

    
457
  Obtiene si la fuente de datos es de tipo raster imagen.
458

    
459
* isElevationsRaster(Object source, AVList params) : boolean
460

    
461
  Obtiene si la fuente de datos es de tipo imagen
462

    
463
XXLayerDataRaster implements DataRaster
464
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
465

    
466
Representa información raster. Esta clase recibe peticiones de datos para la generación de tiles por lo que es la encargada de acceder al DAL de gvSIG mediante su API para obtener la información precisada. 
467

    
468
* getWidth() : int
469

    
470
  Obtiene el ancho en pixeles del raster.
471

    
472
* getHeiht() : int
473

    
474
  Obtiene el alto en pixeles del raster.
475

    
476
* drawOnTo(DataRaster canvas) : void
477

    
478
  Copia la información de este raster al espceficado por parámetro. Es usado para hacer peticiones de datos sobre zonas determindas por el tamaño y posición del DataRaster especificado.
479

    
480
* getSubRaster(AVList params) : DataRaster
481

    
482
  A partir de los parámetros que recibe obtiene una sección del raster.
483

    
484
* getSubRaster(int with, int height, Sector sector, AVList params) : DataRaster
485

    
486
  A partir de los parámetros que recibe obtiene una sección del raster.
487

    
488
View3D APP
489
----------------
490

    
491
Este es el módulo donde se encuentran los diferentes plugins de la librería. Se deben implementar en total cinco plugins. Por un lado, habrá un plugin llamada **org.gvsig.view3d.app.common** el cual contiene todas las extensiones de la librería y los paneles de preferencias de aplicación y de propiedades de vista. Además, debe de tener las dependencias comunes a todas las plataformas y el archivo de configuración "config.xml" para la creación de las entradas de menú y botones en gvSIG. Por otro lado, debe de haber un plugin por cada plataforma el cual no debe de contener ninguna clase debido a que ya se encuentran en el plugin "common". Este plugin solo debe de gestionar las dependencias nativas con la plataforma correspondiente y preparar el empaquetado JAR para que se despliegue como si fuera un plugin normal usando el archivo de configuración del plugin org.gvsig.view3d.app.common así como sus dependencias junto con las dependencias nativas. El resultado esperado debería ser:
492

    
493
* org.gvsig.view3d.app
494

    
495
  * about
496
  * i18n
497
  * images
498
  * lib
499

    
500
    * dependencias comunes
501
    * dependencias nativas de la plataforma
502

    
503
  * config.xml
504
  * package.info
505

    
506
Plugin common
507
~~~~~~~~~~~~~~~~~~~~~~
508

    
509
El plugin common (org.gvsig.view3d.app.common) estará compuesto por tres extensiones: View3DExtension, RefreshView3DExtension y SynchronizeView3DExtension. Además, gestionará la persistencia de las opciones establecidas por el usuario.
510

    
511
* View3DExtension: extensión de Andami asociada a dos acciones: "create-flat-view3d" y "create-spherical-view3d". Esta extensión deberá estar siempre visible y activa solo cuando se active una vista 2D con un capa o más. Las dos acciones obtendrán la instancia del View3DSwingManager, crearán el panel, añadirán las capas de la vista activa, y lo mostrarán.
512
* RefreshView3DExtension: extensión de Andami asociada a la acción: "refresh-view3d". Esta extensión deberá estar visible cuando se active un visor 3D y siempre activa. La extensión obtendrá la instancia de tipo ViewPanel3D y ejecutará la operación ``ViewPanel3D#reloadLayers()``.
513
* SynchronizeView3DExtension: extensión de Andami asociada a la acción: "synchronize-view3d". Esta extensión deberá estar visible cuando se active una vista3D y siempre activa. La extensión obtendrá la instancia de tipo ViewPanel3D y ejecutará la operación ``ViewPanel3D#synchronizeViewPorts()``.
514

    
515
Persistencia
516
~~~~~~~~~~~~~~~~~~~~~~
517

    
518
.. note::
519
  TODO en fases posteriores. Definir panales y gestión de preferencias.