[Gvsig_desarrolladores] dimensiones de las capas

Carlos Sánchez Periñán csanchez en prodevelop.es
Jue Mayo 29 13:15:10 CEST 2008


Hola de nuevo, 

Me olvidaba que en la clase ViewPort tienes varios métodos para manipular las dimensiones de las capas, ya sea la original o la ajustada a la vista, si lo que quieres es implementar u obtener cálculos de las dimensiones de las capas que se encuentran en la vista te recomiendo que utilices los métodos de esta clase. 

Algunos métodos que te pueden interesar son:

 

Los que más te pueden interesar son:

-getExtent()                                          : Cuando cambia el zoom el extent que cubre esa área es lo que devuelve este método. No es el área mostrada en la vista, porque no contempla el aspect ratio.

-getAdjustedExtent()                           : El area que contiene la vista actual. Si lo que buscas es el área completa mostrada actualmente utiliza este método que si contempla el aspect ratio.

 

Hay más metodos relacionados con el cálculo de areas siempre dentro de la vista:

-setAdjustable(boolean)                         : Activa/desactiva la opción de ajuste automática del Extent, si está activada se ajusta automáticamente la dimensión a la vista.

-setPreviousExtent()                              : Rellena el extent anterior como actúa (ViewPort contiene un historial con los extents visitados).

-setNextExtent()                                    : Rellena el extent anterior como actual.

-hasNextExtent()                                   : Obtener el siguiente extent

-hasPreviousExtent()                             : Obtener el anterior.                                         

-setExtent(Rectangle2D, boolean)          : establecer el área de la vista actual a partir de otra, y la almacena en el historial.

-refreshExtent(boolean)                         : Refresca el área recalculando la transformación Afín y teniendo en cuenta el aspecto ratio. 

-getScale()                                           : Obtiene la escala de la proyección.

-getAffineTransform()                             : Devuelve la matriz de transformación afín sobre el área

-getImageSize()                                    : Devuelve el tamaño de una imagen.

-setImageSize(Dimension)                     : Establece las dimensiones de una imagen y las clacula.

-calculateAffineTransform()                     : Calcula la matriz de transformación.

-getExtents()                                        : Devuelve el historial de extents (areas) visitadas.

 

Y mas métodos con cálculos sobre el zoom y Pan...

Si, el cálculo de las dimensiones del área en gvSIG te va a depender siempre de las proyecciones y de las vistas de las capas seleccionadas en ese instante. Como dice Francisco Jose Peñarrubia el getFullExtent() si que calcula el area total que ocupan todas las capas, pero dentro de la vista, y una proyección. Si necesitas las dimensiones del área que ocupan todas las capas independientemente de la vista y/o de proyecciones lo puedes implementar.

Saludos.

 

Carlos Sánchez Periñán

Equipo desarrollo GIS

Prodevelop S.L.

Tel :  963510612

E-mail : csanchez en prodevelop.es

________________________________

De: gvsig_desarrolladores-bounces en runas.cap.gva.es [mailto:gvsig_desarrolladores-bounces en runas.cap.gva.es] En nombre de Carlos Sánchez Periñán
Enviado el: jueves, 29 de mayo de 2008 10:50
Para: Lista de Desarrolladores de gvSIG
Asunto: RE: [Gvsig_desarrolladores] dimensiones de las capas

 

Hola Juan,

No se seguro que frontera es la que quieres obtener, pero como tu dices el método getFullExtent(); del MapContext te devuelve la frontera (o dimensión) de una capa concreta, y por tanto te devuelve la dimensión concreta de la capa que la llama. En MapCotext deberias tener otro método que se llama "getAllLayersExtent()", y que recorre todas las capas existentes añadiendo las dimensiones de cada una de ellas, obteniendo al final la máxima dimensión, o frontera que abarca todas las capas.

Si no tienes el método lo puedes implementar tu, seria algo así:

 

    private ArrayList layers = new ArrayList();

 

    public Rectangle2D getAllLayersExtent() {

        int size = layers.size();

 

        if (size == 0) {

            return null;

        }

 

        Rectangle2D resp = null;

 

        for (int i = 0; i < size; i++) {

            FLayer lyr = ((FLayer) layers.get(i));

 

            if (resp == null) {

                try {

                    resp = lyr.getFullExtent();

                }

                catch (FMapDriverException e) {

                    logger.error("While getting selected layer's extent: " +

                        e.getMessage());

                }

            }

            else {

                try {

                    resp.add(lyr.getFullExtent());

                }

                catch (FMapDriverException e) {

                    logger.error("While getting selected layer's extent: " +

                        e.getMessage());

                }

            }

        }

 

        return resp;

    }

 

Obviamente si el contenido de layers son solo las capas seleccionadas no te cogerá el máximo de las capas sino el de las capas seleccionadas, si pretendes ignorar la selección del usuario, tendrás que meter en "layers" todas las capas existentes (no conozco si ya hay implementado algún método que lo haga ya en estos momentos).

Espero haberte ayudado.

Saludos.

 

Carlos Sánchez Periñán

Equipo desarrollo GIS

Prodevelop S.L.

Tel :  963510612

E-mail : csanchez en prodevelop.es

________________________________

De: gvsig_desarrolladores-bounces en runas.cap.gva.es [mailto:gvsig_desarrolladores-bounces en runas.cap.gva.es] En nombre de Juan Lopez
Enviado el: miércoles, 28 de mayo de 2008 17:27
Para: gvSIG Desarrolladores
Asunto: [Gvsig_desarrolladores] dimensiones de las capas

 

Hola a todos...
Hasta ahora habia cometido un grave error, y era el pensar que el getFullExtent del mapContext (internamente llama al de FLayers) se refería a la dimension de sus capas (es decir, a la maxima de las dimensiones de sus capas).
Me he dado cuenta de que no es así, sino que devuelve el extent seleccionado por el usuario en ese momento.

¿Como puedo conocer la dimension de un conjunto de capas, es decir la maxima de las dimensiones?Esto deberia ser independiente de la seleccion del usuario.

gracias

------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://runas.cap.gva.es/pipermail/gvsig_desarrolladores/attachments/20080529/82fe5b84/attachment.htm


Más información sobre la lista de distribución gvSIG_desarrolladores