SIGI - Manual de Uso - Comunidad de Madrid

Anuncio
Librería SIGI
FRAMEWORK JAVA 2.1
LIBRERÍA SIGI
Versión 3.0
AGOSTO 2006
Área de Integración y Arquitectura de Aplicaciones
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 1
Librería SIGI
FRAMEWORK JAVA 2.1
1
2
3
4
Introducción................................................................................................. 3
Ejemplo de mapas ...................................................................................... 4
Obtención de coordenadas XY ................................................................... 6
Mapa callejero............................................................................................. 7
4.1
Capas base.......................................................................................... 8
4.2
Capas extendidas o tablas externas .................................................... 9
4.3
Capa entidades resaltadas ................................................................ 10
4.4
Capa entidades rotuladas .................................................................. 10
4.5
Obtención de las capas de un mapa callejero ................................... 13
4.6
Generación de un mapa a partir de los nombres de municipio y calle.
14
4.7
Generación de un mapa a partir de las coordenadas del mapa......... 15
4.8
Generación de una vista de un municipio. ......................................... 15
4.9
Tamaño de los mapas........................................................................ 15
4.10 Ejemplo de creación de un mapa a partir de unas coordenadas X e Y
17
4.11 Ejemplo de creación de un mapa a partir de una dirección ............... 18
4.12 Ejemplo de creación de un mapa de un municipio............................. 19
4.13 Página JSP. ....................................................................................... 20
5
Funciones auxiliares................................................................................ 23
5.1. obtenerRangoPuntos ............................................................................. 23
5.2. obtenerCapas ........................................................................................ 23
5.1. mueveMapa ........................................................................................... 24
6 Mapa Guia................................................................................................. 25
7 Mapa Fit .................................................................................................... 26
8 Mapa temático........................................................................................... 26
9 Código para generar un mapa temático .................................................... 27
9.1
Definición de los datos a representar................................................. 28
9.2
Rango automático a partir de un color inicial y color final .................. 29
9.3
Rango definido por la amplitud de los tramos .................................... 29
9.4
Rango definido por el nº de tramos.................................................... 30
9.5
Definición del area del mapa.............................................................. 30
9.6
Rango en el que se detallan cada uno de los tramos ........................ 31
10
Fichero de configuración ....................................................................... 35
Área de Integración y Arquitectura de Aplicaciones
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 2
Librería SIGI
FRAMEWORK JAVA 2.1
1 Introducción
Para generar mapas de Geomedia se ha creado un webservice que accede al
servicio de Geomedia para solicitar los mapas.
Nota importante: determinadas funcionalidades de la versión 2.0 de la
librería funcionará únicamente con la nueva versión del webservice. En
concreto, únicamente se pueden incluir clausulas where en las capas
base con la última versión del webservice (ver sección 4.1).
En las aplicaciones que necesiten crear mapas se va a utilizar un módulo en
Java que accede al webservice y se conecta a él para solicitar el mapa. La
comunicación entre Java y el webservice va a ser mediante mensajes xml.
Si la aplicación está desarrollada en forms accederá al módulo Java llamando a
la Url correspondiente y pasándole mediante un GET los parámetros que
necesite.
El siguiente diagrama muestra los distintos componentes que participan en la
comunicación para la creación de mapas.
Forms
Java
xml
WebServiceSI
GI
Servicio
Geomedia
SIGI
Van a existir distintos webservices que se parametrizarán para cada Consejería
o incluso Dirección General y en cada uno de estos webservices se configuran
las capas que se pueden tratar.
Área de Integración y Arquitectura de Aplicaciones
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 3
Librería SIGI
FRAMEWORK JAVA 2.1
Se ha creado una librería para la obtención de mapas del SIGI. Esta librería se
llama SIGI y facilita la creación de los distintos ficheros xml y la conexión con el
webservice. Actualmente se puede descargar desde la web de soporte una
nueva versión con diversas mejoras, entre las cuales se incluyen un conjunto
de etiquetas jsp para evitar escribir código repetitivo, así como el uso de la
técnica de Remote Scripting para mejorar el funcionamiento de la librería.
Mediante esta librería se pueden obtener distintos tipos de mapas desde la
programación Java. Los tipos de mapas que se pueden obtener son:
Mapa
callejero
A partir de una posición X e Y
o de los datos de una
dirección: municipio + calle +
portal se obtiene un mapa
Mapa guía o
índice
Mapa
general
de
la
Comunidad de Madrid en el
que se sitúa destacada la
zona del mapa en la que
estamos.
Mapa fit
Mapa
general
de
la
Comunidad de Madrid que
nos permite ir profundizando
en él hasta acceder a la
información que nos interese
Mapa
temático
Mapa de municipios en los
que los valores de un dato de
cada
municipio
se
representan mediante colores
2 Ejemplo de mapas
Se ha incluido en la web de soporte java un ejemplo de aplicación con mapas.
El ejemplo se llama ejemplo_mapas y se puede acceder a él como
http://icmweb01.icm.es/ejemplo_mapas.
Área de Integración y Arquitectura de Aplicaciones
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 4
Librería SIGI
FRAMEWORK JAVA 2.1
Así mismo en la web de soporte java se puede descargar el código y la web del
ejemplo en http://icmweb01.icm.es/soja/framework2_0/ejemplos.htm.
La última versión de la librería
http://icmweb01/soja/librerias.htm.
SIGI
Para
más
documentación
http://icmaplic01.icm.es:8081/SoporteSIGI.
se
puede
descargar
sobre
Área de Integración y Arquitectura de Aplicaciones
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
en
mapas:
Página: 5
Librería SIGI
FRAMEWORK JAVA 2.1
3 Obtención de coordenadas XY
Alguno de los mapas necesitan información de la coordenadas X e Y del
elemento que se desea visualizar. Para obtener esta información se va a partir
de los datos de una dirección según los códigos que se encuentran en las
tablas de SUCA.
Para la obtención de las coordenadas de una calle se han creado dos Paquetes
en Base de Datos, un Paquete Local (B.DD. desarrollo) y otro Remoto (B.DD.
Sigi) al cual accedemos mediante Databaselink desde las BB.DD locales.
El Paquete Local se llama SIS_PAQ_GEO y consta de dos Procedures que
están ‘sobrecargadas’, es decir, dos Procedures con el mismo nombre
(Obtener_Coordenadas) pero con número de Parámetros diferentes. En el
Paquete Remoto es donde se realiza la Query para obtener las coordenadas de
la calle solicitada, hay que tener en cuenta que si le pasamos un Portal que no
existe, la Query está construida para que recoja las coordenadas del Portal
anterior.
Desde las diferentes Aplicaciones se hará una llamada al Paquete Local, ésta
llamada se puede realizar de dos maneras diferentes dependiendo de si
conocemos o no el campo dscalificador de la calle, este campo dscalificador
lo encontramos en calles que tienen Portales con un mismo número y letras (por
ejemplo Princesa 3, Princesa 3A).
* Si NO conocemos el valor del Parámetro dscalificador, la llamada se
realizará con los siguientes Parámetros:
Parámetros de entrada (in):
- Código de Municipio (suca_vial.cdmuni).
- Código del Vial (suca_vial.cdvial).
- Portal de la calle.
Parámetros de salida (out):
- xx (coordenadas x).
- yy (coordenadas y).
Quedando la llamada al Paquete de la siguiente manera:
SIS_PAQ_GEO.Obtener_Coordenadas (:CDMUNI, :CDVIAL, :PORTAL, xx, yy);
* Si conocemos el valor del campo dscalificador, realizaremos la llamada con los
siguientes Parámetros:
Parámetros de entrada (in):
- Código de Municipio (suca_vial.cdmuni).
Área de Integración y Arquitectura de Aplicaciones
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 6
Librería SIGI
-
FRAMEWORK JAVA 2.1
Código del Vial (suca_vial.cdvial).
Portal de la calle.
Valor dscalificador.
Parámetros de salida (out):
- xx (coordenadas x).
- yy (coordenadas y).
Llamando al Paquete como se detalla a continuación:
SIS_PAQ_GEO.Obtener_Coordenadas(:CDMUNI, :CDVIAL, :PORTAL,
dscalificador, xx, yy);
Cualquiera de las dos llamadas nos debería devolver las coordenadas xx e yy
de la calle solicitada, si los valores que devuelven son nulos es porque no se
han encontrado dichos valores.
4 Mapa callejero
Este tipo de mapa se puede obtener a partir de una posición X e Y o de los
datos de una dirección: municipio + calle + portal. (Información de SUCA)
El mapa obtenido es en formato CGM y para poder visualizarlo hace falta un
ActiveX. Las aplicaciones Java deben incluir el ActiveX para que se descargue
automáticamente cuando no está presente. En la librería esta incluída una
etiqueta JSP que contiene el código necesario para incluir ese ActiveX en la
página.
En el ejemplo en la página JSP se han incluido unos botones de navegación
que nos permiten modificar la visualización del mapa. Estos controles se
pueden incluir utilizando una etiqueta JSP para cada uno de ellos:
Permite realizar un acercamiento sobre el mapa sobre el
punto central del mapa presentado.
Área de Integración y Arquitectura de Aplicaciones
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 7
Librería SIGI
FRAMEWORK JAVA 2.1
Permite realizar un alejamiento sobre el mapa sobre el
punto central del mapa presentado.
Permite acercar la vista en función de un área definida
por dos puntos marcados por el usuario sobre el mapa
Ajusta el mapa a una visualización completa de toda la
Comunidad
Pulsando uno de estos botones el mapa se desplaza en
la dirección señalada según una distancia definida fija.
Estos controles están incluídos en la etiqueta que
también dibuja el mapa, por lo que si se diseña una
página para realizar búsquedas por calle, que no
permite la utilización de esta etiqueta, se deben incluir
directamente en la página.
Estos botones no es obligatorio ponerlos en las aplicaciones, se ponen como
ejemplo de lo que se puede hacer.
Como se ha comentado anteriormente van a existir varios webservices
parametrizados para cada Consejería o Dirección General. A continuación se
muestran las distintas capas que se han definido en el webservice del ejemplo:
4.1 Capas base
En este tipo de mapas se pueden reflejar las siguientes capas base:
o
o
o
o
o
o
o
o
o
o
o
o
o
MUNICIPIOS
FONDOS
MANZANAS
PARCELAS
EDIFICIOS
CALLEJERO
PORTALES
ORTOIRS2002
ORTOFOTO
ROTULO
RIOS
CANALES
EMBALSES
Área de Integración y Arquitectura de Aplicaciones
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 8
Librería SIGI
FRAMEWORK JAVA 2.1
o ARROYOS
Estas capas bases se pueden definir en el fichero de configuración de la
aplicación en la variable:
sigi.capa.base =
MUNICIPIOS,FONDOS,MANZANAS,EDIFICIOS,CALLEJERO,PORTALES
También se pueden definir las capas base a través de código de la aplicación;
para eso, se define una lista de objetos sigi.bean.CapaBean que tienen los
siguientes campos:
Nombre
Where
Reglas
Atributos
Nombre de la capa.
Condición opcional que, en caso de incluirla, debe
cumplirse para que se muestre la capa.
Condición opcional. Hace referencia al fichero de texto
donde va definida la regla que ha de aplicarse para
dibujar la capa. Ver documento explicativo.
Condición opcional. Indicar el atributo para el que se
aplicará la/s regla/s (si es contorno, color de relleno
etc…).
Ver documento explicativo.
Se pueden añadir capas base con reglas de manera automática si en el fichero
de configuración se incluyen en la entrada sigi.capa.base.dinamicas. La
estructura es:
sigi.capa.base.dinamicas=CAPA1:regla1,regla2,..,reglan:atributo1,atributo2,..,atributon;CAPA2:regla1,regla2,..,reglan:atributo1,atributo2,..,atributonn;.......;CAPAn:regla1,regla2,..,reglan:atributo1,atributo2,..,atributo-n
Ej:
sigi.capa.base.dinamicas=PORTALES:colorPortales,simbPortales:fillcolor,symbolname
4.2 Capas extendidas o tablas externas
Una capa extendida nos permite dibujar elementos propios de la aplicación
dentro del mapa. Por ejemplo podríamos pintar un símbolo en las coordenadas
de los ayuntamientos, colegios, etc.
En el ejemplo se ha incluido una capa extendida para los Ayuntamientos. Al
incluir esta capa se incluye un símbolo en el mapa para los ayuntamientos y en
las direcciones en las que aparezcan un ayuntamiento aparecerá ese símbolo.
(En este caso un círculo verde)
Área de Integración y Arquitectura de Aplicaciones
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 9
Librería SIGI
FRAMEWORK JAVA 2.1
La elección de las capas extendidas se va a definir en el fichero de
configuración de la aplicación en la variable:
sigi.capa.extendida= Pruebas de Farmacias,Casas Consistoriales
(Mostraría situación de farmacias y ayuntamientos)
Para crear una capa extendida es necesario crear una tabla externa en la que
se tengan al menos los siguientes campos:




CD_ELEMENTO:
Código del elemento. Ha de ser una clave única que identifique al
elemento.
DS_ELEMENTO:
Descripción del elemento que puede ser usado al pasar por
encima del mapa.
COORDX
Coordenada x del elemento.
COORDY
Coordenada y del elemento.
Los nombres de los campos pueden variar de unos webservices a otros.
A la capa extendida le vamos a dar un nombre lógico para que desde nuestra
aplicación podamos hacer referencia a ella, le tendremos que asignar un
símbolo y podemos poner una url a la que se va a llamar cuando se pulse
encima el elemento.
4.3 Capa entidades resaltadas
Una entidad resaltada es una entidad base que aparece con un color diferente
en el mapa para diferenciarla de las otras. Por ejemplo si queremos resaltar el
portal de la dirección que hemos buscado, en este caso la entidad resaltada es
PORTALES.
Área de Integración y Arquitectura de Aplicaciones
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 10
Librería SIGI
FRAMEWORK JAVA 2.1
Las entidades resaltadas que se quieren se especifican a través de código
utilizando una serie de beans. Para ilustrarlo se muestra un ejemplo de cómo
hacerlo:
/* Se almacena una lista con las capas */
CdidBean bean = new CdidBean();
bean.setNombre("cdid");
bean.setValor("981406");
CdidBean bean2 = new CdidBean();
bean2.setNombre("cdid");
bean2.setValor("981357");
CdidBean bean3 = new CdidBean();
bean3.setNombre("cdid");
bean3.setValor("981356");
EntidadResaltadaBean ent_res = new EntidadResaltadaBean();
ent_res.setNombreCapa("PARCELAS");
ent_res.addCdid(bean);
ent_res.addCdid(bean2);
ent_res.addCdid(bean3);
LinkedList lis = new LinkedList();
lis.add(ent_res);
/* Otra lista de capas */
EntidadResaltadaBean ent_res2 = new EntidadResaltadaBean();
ent_res2.setNombreCapa("PARCELAS2");
ent_res2.setWhere("cdmunicipio=180");
lis.add(ent_res2);
request.setAttribute("ListaEntidadesResaltadas",lis);
Las entidades resaltadas se pueden especificar de dos maneras:

Indicando el tipo de elemento y el código (en este caso cdid y el valor del
cdid), así como el nombre de la capa. Se pueden indicar tantos
elementos como se quiera.

Indicando el nombre de la capa y una condición where en la que se
indica qué deben cumplir las entidades resaltadas para que aparezcan
en el mapa.
Como puede verse, en ambos casos se almacenan objetos del tipo
EntidadResaltadaBean. Se pueden incluir en la petición tantos objetos de este
tipo como se quiera. En este ejemplo, se esta utilizando una etiqueta para
pintar el mapa, por lo que se almacena la lista de objetos
EntidadResaltadaBean en el objeto request. En caso de no utilizar etiquetas, se
almacena la lista en el objeto PeticionBean:
for (int k = 0;k < lista_resaltadas.size();k++) {
peticion.addEntidadResaltada((EntidadResaltadaBean)lista_resaltadas.get(k));
}
En el siguiente mapa se muestra resaltado el portal:
Área de Integración y Arquitectura de Aplicaciones
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 11
Librería SIGI
FRAMEWORK JAVA 2.1
4.4 Capa entidades rotuladas
Una entidad rotulada es una entidad base a la que se le añade como rótulo uno
o varios campos de la entidad.
Las entidades rotuladas que se quieren se especifican a través de código
utilizando una serie de beans. Para ilustrarlo se muestra un ejemplo de cómo
hacerlo:
String entRot=Config.get("sigi.entidadRotulada.nombre");
String where=Config.get("sigi.entidadRotulada.where");
if (entRot != null ){
EntidadRotuladaBean entRotBean = new EntidadRotuladaBean();
entRotBean.setNombreCapa(entRot);
entRotBean.setModo("gtp");
entRotBean.setWhere(where);
peticion.addEntidadRotulada(entRotBean);
}
mmBean = m_mapa.construye_mapa(peticion, con);
Las entidades rotuladas se especifican indicando el nombre de la capa y una
condición where en la que se indica qué deben cumplir las entidades resaltadas
para que aparezcan en el mapa.
Se pueden incluir en la petición tantos objetos de tipo EntidadRotuladaBean
como se quiera.
En el siguiente mapa se muestra rotuladas la entidad viales:
Área de Integración y Arquitectura de Aplicaciones
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 12
Librería SIGI
FRAMEWORK JAVA 2.1
4.5 Obtención de las capas de un mapa callejero
Se puede obtener las capas que aparecerán en un determinado mapa; estas
capas dependerán del area cubierta por el mapa1. Para ello, existen dos
métodos en la librería: obtenerCapas(x1,x2) y obtenerCapas(distancia). La
diferencia entre ambos esta en los parámetros de entrada: en el primero llegan
las dos coordenadas X del mapa, mientras que en el segundo llega el tamaño.
Ambos retornan una lista de objetos sigi.bean.CapaBean, que únicamente
tiene dos atributos: el id de la capa y el nombre de la capa.
1
El area cubierta por un mapa es función de la distancia del observador al mapa y del tamaño
del propio mapa. Esta distancia del observador al mapa (que no es otra cosa que la altura)
determina qué capas son visibles; dicho de otro modo, cada capa es visible desde una
determinada franja de altura. Por ejemplo, puede ser que la ortofoto sea visible desde los 300 a
los 1000 metros de altura. Las capas obtenidas en este método son las capas visibles para una
determinada altura, que puede venir definida bien por el propio valor de la altura o bien por las
coordenadas X1 y X2 del mapa.
Área de Integración y Arquitectura de Aplicaciones
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 13
Librería SIGI
FRAMEWORK JAVA 2.1
Código para la generación del mapa callejero
4.6 Generación de un mapa a partir de los nombres de
municipio y calle.
Para generar un mapa a partir de los nombres del municipio y la calle,
necesitamos crear un objeto PeticionBean que contiene los datos de la
petición.
El objeto PeticionBean tiene las siguientes propiedades:
Básicas de la consulta:
Metros
Distancia en metros a la que se observa
el mapa.
capaBase
Lista
de
beans
del
tipo
sigi.beans.CapaBean.
Cada
capa
puede tener una clausula where en la
que se indica una condición a cumplir
para que aparezca la capa en el mapa.
Si no viene se obtiene del fichero de
configuración
del
parámetro
sigi.capa.base
capaExtendida
Nombre de la capa extendida. En el caso
de que haya varias estas irán separadas
por comas. Si no viene se obtiene del
fichero de configuración del parámetro
sigi.capa.extendida
capaResaltada
Nombre de la capa resaltada. En el caso
de que haya varias estas irán separadas
por comas. Si no viene se obtiene del
fichero de configuración del parámetro
sigi.capa.entidad_resaltada
lista_entidades_resaltadas Lista de elementos resaltados que se van
a mostrar en el mapa.
lista_entidades_rotuladas Lista de elementos que se van a rotular
en el mapa.
tipoMapa
Tipo del mapa generado. Si no se indica,
se toma del parámetro sigi.tipomapa
Para incluir la dirección:
Municipio
TipoVia
Via
Numero
Municipio sobre el que se hace una consulta de una
dirección.
Tipo de vía.
Nombre de la vía en SUCA.
Número del portal.
Área de Integración y Arquitectura de Aplicaciones
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 14
Librería SIGI
FRAMEWORK JAVA 2.1
Para especificar el tamaño del mapa en pantalla:
ancho_mapa Ancho del mapa mostrado en pantalla, en píxels
alto_mapa
Alto del mapa mostrado en pantalla, en píxels.
Si se desea generar un fichero con la leyenda:
leyenda
Extensión y nombre del fichero de leyenda
4.7 Generación de un mapa a partir de las coordenadas del
mapa.
En caso de que se quiera solicitar un mapa a partir de las coordenadas del
mapa, ya sea utilizando las coordenadas de 1 punto y el tamaño o las
coordenadas de dos esquinas del mapa, se utiliza una etiqueta JSP en la que
se pueden definir varios parámetros (explicados más adelante) por lo que no es
necesario crear ninguna instancia del objeto PeticionBean, aunque sería
posible generar un mapa a partir de las coordenadas utilizando el objeto
PeticionBean. Posteriormente se puede ver un ejemplo de creación de mapas
utilizando exclusivamente etiquetas JSP.
4.8 Generación de una vista de un municipio.
Si se quiere crear una vista de todo un municipio, se puede utilizar el método
construye_mapaMunicipio. Este método tiene como parámetros un objeto del
tipo PeticionBean y la conexión a base de datos. El objeto PeticionBean debe
tener el campo Municipio o el campo CdMunicipio (o los dos, aunque esto no
es necesario), así como el tamaño del mapa. Se retorna un bean MapaBean
con los datos del mapa, del mismo modo que cualquier otro mapa generado.
4.9 Tamaño de los mapas.
El tamaño del mapa que aparecerá en pantalla esta indicado tanto por los
parámetros especificados en el bean (o bien por los del fichero de
configuración, si no se indica tamaño) y por el tamaño del objeto visor en la
página JSP. El tamaño del visor se indica en la etiqueta OBJECT del JSP:
<OBJECT id="AXCGM" classid="clsid:F5D98C43-DB16-11CF-8ECA0000C0FD59C7" codebase="ACGM/acgm.cab#version=7,0,5,0" width="200"
height="200">
o si se utiliza la etiqueta JSP incluída en la librería, se indica en la propia
etiqueta:
Área de Integración y Arquitectura de Aplicaciones
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 15
Librería SIGI
FRAMEWORK JAVA 2.1
<sigi:crearMapaCalles ancho="400" alto="300" />
Si el mapa solicitado es mayor que el visor, éste ajustará el tamaño para poder
visualizar el mapa entero en el visor; si ambos tamaños son iguales, el mapa
aparece tal y como se ha solicitado. Y si el mapa es menor, nuevamente el
visor ajusta el mapa a su propio tamaño:
Este mapa esta solicitado con un tamaño de 300 píxels de alto y 200 de ancho,
mientras que el visor tiene un tamaño de 400 píxels de ancho por 300 de alto.
A continuación, se muestra el mismo mapa haciendo coincidir el ancho y alto
tanto del mapa como del visor (que además generalmente es la situación
ideal):
Área de Integración y Arquitectura de Aplicaciones
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 16
Librería SIGI
FRAMEWORK JAVA 2.1
4.10 Ejemplo de creación de un mapa a partir de unas
coordenadas X e Y
En este caso hay dos posibilidades. Una de ellas es poner parámetros en la
etiqueta para indicar el mapa que se quiere crear:
<sigi:crearMapaCalles ancho="400" alto="300" x= "435010" y="4353434"
metros="100"/>
La otra posibilidad es crear una acción en la que se almacenen los datos en el
request y después revolver la página, teniendo en cuenta que en este caso la
etiqueta no llevaría parámetros:
String x,y;
String NOMBRE_VISTA = "muestra_mapa";
sigi.beans.MapaBean bean_sesion = null;
bean_sesion =
(sigi.beans.MapaBean)request.getSession().getAttribute("muestra_mapa_Bean");
String fuerza_recarga = request.getParameter("fuerzaRecarga")
String metros = null;
if (request.getParameter("metros") != null)
Área de Integración y Arquitectura de Aplicaciones
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 17
Librería SIGI
FRAMEWORK JAVA 2.1
metros = request.getParameter("metros");
else
metros = Config.get("sigi.distancia");
request.setAttribute("X",request.getParameter("X1"));
request.setAttribute("Y",request.getParameter("Y1"));
request.setAttribute("X2",request.getParameter("X2"));
request.setAttribute("Y2",request.getParameter("Y2"));
request.setAttribute("FUERZA_RECARGA",fuerza_recarga);
request.setAttribute("MTS",metros);
return NOMBRE_VISTA;
Entonces, la etiqueta sería:
<sigi:crearMapaCalles />
4.11 Ejemplo de creación de un mapa a partir de una dirección
La creación de mapas a partir de una dirección no es posible realizarla
utilizando la etiqueta JSP, por lo que es necesario utilizar la librería del
siguiente modo:
PeticionBean peticion = new PeticionBean();
//se establecen los datos de la dirección a visualizar en el mapa
peticion.setMunicipio(ds_municipio);
peticion.setVia(ds_calle);
peticion.setNumero(numero);
peticion.setTipoVia(tipo_via);
peticion.setMetros(metros);
sigi.MapaSigi m_mapa = new sigi.MapaSigi();
sigi.beans.MapaBean mmBean = new sigi.beans.MapaBean();
//Dependiendo de si se ha definido el portal o no se llama a un método
//distinto. Es necesario pasar la conexión con la base de datos por
//que accede a SUCA para obtener el código del vial
if(numero != null && !numero.equals("null") && !numero.equals("")){
mmBean = m_mapa.construye_mapa_portal(peticion, con);
}else{
mmBean = m_mapa.construye_mapa(peticion, con);
}
if (mmBean.getMensajeError() != null) {
Trazas.impLog(“ERROR::: “ + mmBean.getMensajeError());
}
El javabean que devuelven los métodos construye_mapa es de la clase
MapaBean. Esta clase tiene las siguientes propiedades:
String url_mapa
Url donde se ha generado el mapa
Área de Integración y Arquitectura de Aplicaciones
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 18
Librería SIGI
FRAMEWORK JAVA 2.1
String x1
Coordena x1 del area reflejada en el
mapa
String x2
Coordena x2 del area reflejada en el
mapa
String y1
Coordena y1 del area reflejada en el
mapa
String y2
Coordena y2 del area reflejada en el
mapa
String zoom_in
Parámetro usado si se desea hacer zoom
de un punto en concreto del mapa. Para
hacer este tipo de zoom existe un
javascript
String zoom_out
Parámetro usado si se desea hacer zoom
de un punto en concreto del mapa. Para
hacer este tipo de zoom existe un
javascript
List
Lista de elementos resaltados que se van
lista_entidades_resaltadas a mostrar en el mapa.
Este va a ser usado por las páginas jsp por lo tanto hay que dejarlo en el
ámbito adecuado para que las páginas puedan verlo. El siguiente código
muestra como dejar el javabean en el request.
request.getSession().setAttribute("muestra_mapa_Bean",mmBean);
Con el código anterior tenemos disponible en la sesión un atributo llamado
muestra_mapa_bean que será usado por la página jsp.
Los mapas generados tienen formato cgm y para poder visualizarlos en
necesario tener en el navegador instalado el correspondiente ActiveX. En este
caso el ActiveX se llama acgm.cab y se debe incluir en la web de la aplicación
en el directorio ocx para que cuando alguien se conecte sin tener el ActiveX se
le instale automaticamente.
4.12 Ejemplo de creación de un mapa de un municipio.
La creación se hace de modo parecido a la mostrada en el punto anterior:
PeticionBean peticion = new PeticionBean();
peticion.setMunicipio(des_mun);
peticion.setCdMunicipio(cod_mun);
peticion.setMetros(metros);
peticion.setAltoMapa("300");
peticion.setAnchoMapa("400");
mmBean = m_mapa.construye_mapaMunicipio(peticion,con);
if (mmBean.getMensajeError() != null) {
Trazas.impLog(“ERROR::: “ + mmBean.getMensajeError());
Área de Integración y Arquitectura de Aplicaciones
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 19
Librería SIGI
FRAMEWORK JAVA 2.1
}
Se devuelve un bean exactamente igual al explicado en el punto anterior.
4.13 Página JSP.
Se deben incluir las siguientes librerías javascript:
<SCRIPT TYPE="text/javascript"
SRC="../../javascript/MeasureFunc.js"></script>
<SCRIPT LANGUAGE="JavaScript"
SRC="../../javascript/jsrsClient.js"></SCRIPT>
<SCRIPT LANGUAGE="JavaScript"
SRC="../../javascript/Visor.js"></SCRIPT>
Existen dos posibilidades a la hora de escribir la página JSP. Una de ellas sería
escribir el código de la JSP directamente. A continuación se muestra la parte
de la página jsp que llama al activex que visualiza el mapa:
<jsp:useBean id="muestra_mapa_Bean" scope="session"
class="sigi.beans.MapaBean" />
. . .
<OBJECT id="AXCGM"
classid="clsid:F5D98C43-DB16-11CF-8ECA-0000C0FD59C7"
codebase="ocx/acgm.cab#version=7,0,5,0"
width="400" height="300">
<param name="FileName"
value="<%=muestra_mapa_Bean.getUrl_mapa()%>">
</OBJECT>
Otra posibilidad, únicamente útil para cuando se crea el mapa a partir de
coordenadas, sería utilizar las etiquetas JSP incluídas en la librería. Se pueden
utilizar las siguientes etiquetas:
<sigi:crearMapaCalles />
<sigi:zoomMas />
<sigi:zoomMenos />
<sigi:vistaDosPuntos />
<sigi:vistaMapaFit />
<sigi:localizarPunto />
<sigi:distanciaPuntos />
La primera de las etiquetas dibuja el mapa, sustituyendo por tanto la etiqueta
object y las etiquetas que implementan las flechas de movimiento. Esta es la
única etiqueta que acepta parámetros, en concreto los siguientes (todos son
opcionales):


x : coordenada X del mapa.
y : coordenada Y del mapa.
Área de Integración y Arquitectura de Aplicaciones
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 20
Librería SIGI




FRAMEWORK JAVA 2.1
metros : tamaño en metros del mapa.
fuerzarecarga : indica si se quiere obligar a la recarga del mapa.
Normalmente, al acceder a un mapa si este mapa no ha cambiado,
entonces no se recarga el fichero sino que se lee el que ya había; si se
indica el valor ‘SI’ en este parámetro, entonces el mapa se recarga
siempre.
ancho : medida del mapa en pixels.
alto : medida del mapa en pixels.
El resto de etiquetas implementan los siguientes controles, sin tener ningún
parámetro de entrada:






sigi:zoomMas : pinta la lupa para acercar la vista.
sigi:zoomMenos : pinta la lupa para alejar la vista.
sigi:vistaDosPuntos : pinta un control que permite seleccionar un
rectángulo del mapa para visualizarlo.
sigi:vistaMapaFit : pinta un control que hace lo siguiente: pone el mapa
a tal distancia que la vista se ajusta a la comunidad completa.
sigi:localizarPunto : pinta un control que permite conocer las
coordenadas de un determinado punto.
sigi:distanciaPuntos : permite calcular la distancia entre dos o más
puntos.
La siguiente imagen muestra el ejemplo que se ha implementado pero no hay
que poner todos estos componentes alrededor de la imagen.
Por ejemplo debajo de la imagen aparecen dos cajas de texto que utilizando el
botón
nos rellena con la x y la y del punto seleccionado en el mapa. Esto
se pone a nivel de ejemplo.
Área de Integración y Arquitectura de Aplicaciones
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 21
Librería SIGI
FRAMEWORK JAVA 2.1
Por defecto, hasta ahora se ha mostrado código para generar mapas de calles
en formato cgm. Este debería ser el formato elegido en la mayoría de los
casos; sin embargo, es posible que se necesite generar mapas en svg. Si es
así, esto se puede indicar en el fichero de configuración, con el parámetro
sigi.tipomapa=svg. Si se utilizan mapas en formato svg, la referencia al mapa
en la página jsp se debe realizar del siguiente modo:
<embed
src="<<url del mapa>>"
width="400"
height="300"
pluginspage="http://www.adobe.com/svg/viewer/install/auto"
/>
Sin embargo, es importante tener en cuenta que se han detectado problemas
con este formato gráfico al trabajar en local, achacables al visor de gráficos
SVG. Estos problemas no se han detectado en entornos de desarrollo.
Si se utilizan etiquetas JSP, se debe almacenar en el request el atributo
formato con valor cgm o svg; si no se indica nada, se toma por defecto cgm.
Área de Integración y Arquitectura de Aplicaciones
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 22
Librería SIGI
5
FRAMEWORK JAVA 2.1
Funciones auxiliares
En la librería se pueden encontrar una serie de funciones auxiliares que
pueden facilitar el desarrollo de aplicaciones:
5.1. obtenerRangoPuntos
Esta función obtiene las coordenadas de un mapa que engloba una serie de
objetos. Para realizar la petición se utiliza un objeto de tipo
sigi.beans.PeticionRangoPuntosBean. Este objeto tiene dos propiedades:

entidad : indica el nombre de la capa donde se encuentran los objetos a
mostrar.

where : se trata de una condición que indica algun criterio para
seleccionar los elementos que se quieren mostrar. Por ejemplo,
cdmunicipio='079' and cdzona in('012','013','016','021','022','023','024','025','026','027')
Al invocar esta función, se obtiene un objeto sigi.beans.MapaBean que
contiene las coordenadas del mapa mínimo que contiene los elementos.
A continuación se muestra un ejemplo de invocación de esta función:
PeticionRangoPuntosBean pbean = new PeticionRangoPuntosBean();
pbean.setEntidad("dba_sigi.SIGI_EDU_ZEPUBSEC_05");
pbean.setWhere("cdmunicipio='079' and cdzona in('012','013','016','021','022','023','024','025','026','027')");
try {
MapaBean mb = m_mapa.obtenerRangoPuntos(pbean);
Trazas.impLog(mb.getX1() + "," + mb.getY1() + "," + mb.getX2() + "," + mb.getY2());
}
catch (Exception e) {
Trazas.imprimeErrorExtendido(e);
}
5.2. obtenerCapas
En la librería podemos encontrar dos métodos con el nombre obtenerCapas
que reciben distintos parámetros. Estos dos métodos permiten obtener una lista
de capas incluídas en un determinado mapa. Se puede obtener de dos
maneras:


enviando como parámetro el valor del atributo ‘distancia’ del mapa.
utilizando los valores X1 y X2 del mapa.
Área de Integración y Arquitectura de Aplicaciones
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 23
Librería SIGI
FRAMEWORK JAVA 2.1
Estos métodos devuelven una lista de objetos de la clase
sigi.beans.CapaBean, que contienen un código y un identificador de cada una
de las capas incluídas en el mapa.
A continuación se muestra un ejemplo de invocación de esta función:
try {
java.util.List listacapas = m_mapa.obtenerCapas(mmBean.getX1(),mmBean.getX2());
for (int k=0;k<listacapas.size();k++) {
CapaBean capa = (CapaBean)listacapas.get(k);
Trazas.impLog(">>>>>>>>>>>>> " + capa.getId() + " >>>>>> " + capa.getNombre());
}
}
catch (Exception e) {
Trazas.imprimeErrorExtendido(e);
}
5.1. mueveMapa
Este método permite obtener las coordenadas de un mapa resultante de mover
el mapa actual en alguna de las direcciones, o bien al acercar o alejar el mapa
sobre el punto central del mismo.
Hay dos versiones de esta función:
public void mueveMapa(MapaBean mmBean, String sentido, String
factor_zoom)
public void mueveMapa(MapaBean mmBean, String sentido)
En la primera de ellas se puede indicar el factor de escala del mapa; esto, al
hacer zoom, indica por cuanto se multiplica la distancia a la que se observa el
mapa. Por ejemplo, un factor de 2 asociado a un sentido Z- indica que el
observador se aleja a una distancia doble, mientras que un factor de 0,5
asociado a un sentido Z+ indica que el el observador se hacerca a la mitad de
distancia.
En la segunda llamada este factor de escala se toma del fichero de
configuración. Los posibles valores del sentido son:
N
NE
NO
O
E
SO
SE
S
Z+
Z-
- Norte
- NorEste
- NorOeste
- Oeste
- Este
- SurOeste
- SurEste
- Sur
- Acercar
- Alejar
Área de Integración y Arquitectura de Aplicaciones
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 24
Librería SIGI
FRAMEWORK JAVA 2.1
A continuación se muestra el código que invoca esta función:
MapaSigi map = new MapaSigi();
map.mueveMapa(bean,sentido);
6 Mapa Guia
A partir de un mapa de los anteriores podemos solicitar un mapa guía que nos
sitúa la posición actual dentro del mapa de toda la Comunidad de Madrid.
Para obtener el Mapa Guía se necesitan las coordenadas X e Y del punto a
situar en el mapa guía.
El siguiente código muestra como obtener el mapa guía:
PeticionBean peticion = new sigi.beans.PeticionBean();
peticion.setX1(x);
peticion.setY1(y);
peticion.setMetros(metros);
sigi.MapaSigi m_mapa = new sigi.MapaSigi();
sigi.beans.MapaBean mmBean = new sigi.beans.MapaBean();
mmBean = m_mapa.construye_mapa_guia(peticion);
Área de Integración y Arquitectura de Aplicaciones
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 25
Librería SIGI
FRAMEWORK JAVA 2.1
7 Mapa Fit
Es un mapa de la Comunidad de Madrid que nos permite ir haciendo zoom
hasta acceder al elemento que nos interesa.
Para obtener el mapa fit tenemos el siguiente código:
PeticionBean peticion = new PeticionBean();
peticion.setX1(valor_x1);
peticion.setX2(valor_x2);
peticion.setY1(valor_y1);
peticion.setY2(valor_y2);
mmBean = m_mapa.construye_mapa_fit(peticion);
8 Mapa temático
Mapa de entidades en los que los valores de un dato de cada entidad se
representan mediante colores. Por ejemplo si la entidad es municipios los
distintos municipios se van coloreando dependiendo de los valores de los datos
que se representen.
La forma de colorear el mapa depende de unos rangos que es necesario
definir.
Existen varios tipos de rangos:
Área de Integración y Arquitectura de Aplicaciones
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 26
Librería SIGI




FRAMEWORK JAVA 2.1
Rango único: Se define un color inicial y un color final y el webservice
crea los tramos que necesita.
Rango por nº: Se define un color inicial y un color final y el nº de tramos
que se desean
Rango por amplitud: Se define un color inicial y un color final y la
amplitud del tramo (nº de valores de cada tramo)
Rango detallado: Se define para cada uno de los tramos el color y los
valores que forman parte del tramo
Para cada entidad se debe indicar cual es el valor del dato a representar que
se le asigna a esa entidad. Por ejemplo: Si se va a reflejar población para cada
municipio hay que indicar cual es su población.
Existen muchas posibilidades de salida del mapa temático y dependiendo del
tipo de salida nos va a hacer falta un visor o no.
Tipo de
formato
cgm
svg
svg_
svg_t
svg_d
jpg
jpg_c
jpg_t
jpg_3d
html_
vrml
vrmld
vrmlt
Visor
Active X CGM
Plug-in SVG
Plug-in SVG
Plug-in SVG
Plug-in SVG
HTML
HTML
HTML
HTML
HTML
Visor VRML
Visor VRML
Visor VRML
9 Código para generar un mapa temático
Para generar un mapa temático necesitamos crear un objeto MapaTematico
que contiene los datos de la petición de un mapa temático
El objeto MapaTematico tiene las siguientes propiedades:
Básicas de la consulta:
String formato
String tabla
Formato de salida del mapa
Indica el nombre de la entidad/tabla de la
Área de Integración y Arquitectura de Aplicaciones
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 27
Librería SIGI
FRAMEWORK JAVA 2.1
String campo
Rango rango
ListadoValores
TipoMapa
base de datos con la cartografía base. Si
no se indica se coge la especificada en el
fichero de configuración en el parámetro
sigi.tematico.tabla
Indica el nombre de la columna de la tabla
que se usará como índice en la lista de
valores. Si no se indica se coge la
especificada en el fichero de configuración
en el parámetro sigi.tematico.campo
Definición del rango o tipo de temático que
se va a generar. Los rangos pueden ser de
varios tipos, posteriormente se detallará la
forma de definir cada uno de ellos.
Datos para la generación del temático. En
ellos se especifica, para cada elemento
que se quiere añadir al temático el código
del campo y el valor que se utiliza.
Se puede generar un mapa que abarca
toda la comunidad de Madrid, o bien un
mapa con los distritos de madrid. Los
valores
de
entrada
posibles
son
sigi.tematicos.MapaTematico.DISTRITOS o
sigi.tematicos.MapaTematico.MUNICIPIOS;
también puede no rellenarse.
9.1 Definición de los datos a representar
Para definir en el mapa temático los datos tenemos la clase ListadoValores y
dentro de esta clase los métodos:
addValor(String codigo, String
valor)
Añade un código y valor a
representar en el mapa
Nota: Si el valor contiene decimales deben ir separador por el separador ‘.’
(punto).
Ejemplo de cómo definir los valores del mapa
/* Primero se leen los datos de la base de datos */
ListadoValores lista_val = new ListadoValores();
PorcentajeDAO porc = new PorcentajeDAO();
List lista_porc = null;
try {
lista_porc = porc.busqueda(con, null);
}catch (Exception e) {
throw new sistemas.framework.excepciones.AccionException(e);
Área de Integración y Arquitectura de Aplicaciones
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 28
Librería SIGI
FRAMEWORK JAVA 2.1
}
/* Se rellena la lista de valores del mapa */
for (int i = 0;i < lista_porc.size();i++) {
if (lista_porc.get(i) != null) {
String val = (String) lista_porc.get(i);
val = val.replace(',', '.');
lista_val.addValor( (i + 1) + "", val);
}
else
lista_val.addValor((i+1) + "","0");
}
}
9.2 Rango automático a partir de un color inicial y color final
La clase a utilizar es RangoU cuyos métodos son:
setColorInicial
setColorFinal
setTipo
Establece el color inicial
Establece el color final
“U”
A continuación se muestra un ejemplo de definición de este tipo de rangos:
String color_inicial = request.getParameter("C_INICIAL");
String color_final = request.getParameter("C_FINAL");
String tipo_mapa = request.getParameter("TIPO_MAPA");
Color colo1 = new Color(color_inicial);
Color colo2 = new Color(color_final);
RangoU rango = new RangoU();
rango.setColorInicial(colo1);
rango.setColorFinal(colo2);
rango.setTipo("U");
9.3 Rango definido por la amplitud de los tramos
La clase a utilizar es RangoA cuyos métodos son:
setColorInicial
setColorFinal
setTipo
setAmplitud
Establece el color inicial
Establece el color final
“RA”
Amplitud de rango
A continuación se muestra un ejemplo de definición de este tipo de rango:
Área de Integración y Arquitectura de Aplicaciones
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 29
Librería SIGI
FRAMEWORK JAVA 2.1
Color colo1 = new Color(color_inicial);
Color colo2 = new Color(color_final);
RangoA rango = new RangoA();
rango.setColorInicial(colo1);
rango.setColorFinal(colo2);
rango.setTipo("RA");
rango.setAmplitud(Integer.parseInt(amplitud));
9.4 Rango definido por el nº de tramos
La clase a utilizar es RangoN cuyos métodos son:
setColorInicial
setColorFinal
setTipo
setNumTramos
Establece el color inicial
Establece el color final
“RN”
Nº de tramos
A continuación se muestra un ejemplo de definición de este tipo de rango:
Color colo1 = new Color(color_inicial);
Color colo2 = new Color(color_final);
RangoN rango = new RangoN();
rango.setColorInicial(colo1);
rango.setColorFinal(colo2);
rango.setTipo("RN");
rango.setNumTramos(Integer.parseInt(num_tramos));
9.5 Definición del area del mapa
Si se quiere crear un mapa de entidades que no estén contempladas
(actualmente, distritos y municipios), se debe definir el area geográfica del
mapa y la tabla y campo de la que leer los datos. Para ello, se utilizan los
siguientes métodos de la clase sigi.tematicos.MapaTematico, que se deben
definir antes de realizar la llamada al método de la librería que genera mapas
temáticos:
setX1
setY1
setX2
Coordenada X de la esquina
superior izquierda
Coordenada Y de la esquina
superior izquierda
Coordenada X de la esquina
Área de Integración y Arquitectura de Aplicaciones
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 30
Librería SIGI
FRAMEWORK JAVA 2.1
setY2
setTabla
setCampo
inferior derecha
Coordenada Y de la esquina
inferior derecha
Indica el nombre de la tabla de
donde se leen los datos de la
entidad
Se indica el nombre del campo
dentro de la tabla de donde se
leen los datos de la entidad
9.6 Rango en el que se detallan cada uno de los tramos
La clase a utilizar es RangoD cuyos métodos son:
addDetalleRango Establece el detalle de un
rango en particular
setTipo
“RD”
Para cada rango se va a crear un DetalleRango que se crea a partir de los
siguientes datos:
Color color
int inicioRango
int finalRango
Establece el detalle de un
rango en particular
Valor inicial del rango
Valor final del rango
A continuación se muestra un ejemplo de definición de este tipo de rango:
RangoD rango = new RangoD();
rango.setTipo("RD");
DetalleRango
Color col1 =
Color col2 =
Color col3 =
det
new
new
new
= null;
Color(“rojo”);
Color(“azul”);
Color(“verde”
det = new DetalleRango(col1, 0, 1000);
rango.addDetalleRango(det);
det = new DetalleRango(col2, 1001, 2000);
rango.addDetalleRango(det);
det = new DetalleRango(col3, 2001, 3000);
rango.addDetalleRango(det);
Área de Integración y Arquitectura de Aplicaciones
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 31
Librería SIGI
FRAMEWORK JAVA 2.1
A continuación se incluye el código completo para generar un mapa temático
de rango único
MapaSigi m_mapa = new MapaSigi();
sigi.beans.MapaBean mmBean = new sigi.beans.MapaBean();
/* Se recogen los parámetros */
String color_inicial = request.getParameter("C_INICIAL");
String color_final = request.getParameter("C_FINAL");
String tipo_mapa = request.getParameter("TIPO_MAPA");
String ventana_separada = request.getParameter("VENTANA_NUEVA");
/* Se leen los datos a reflejar en el mapa*/
ListadoValores lista_val = new ListadoValores();
PorcentajeDAO porc = new PorcentajeDAO();
List lista_porc = null;
try {
lista_porc = porc.busqueda(con, null);
}
catch (Exception e) {
throw new sistemas.framework.excepciones.AccionException(e);
}
/* Se rellena la lista de valores del mapa */
for (int i = 0;i < lista_porc.size();i++) {
if (lista_porc.get(i) != null) {
String val = (String) lista_porc.get(i);
val = val.replace(',', '.');
lista_val.addValor( (i + 1) + "", val);
}
else
lista_val.addValor((i+1) + "","0");
}
/* Después, se define la clase con el rango */
Color colo1 = new Color(color_inicial);
Color colo2 = new Color(color_final);
RangoU rango = new RangoU();
rango.setColorInicial(colo1);
rango.setColorFinal(colo2);
rango.setTipo("U");
/* Finalmente, se genera la clase mapatemático */
MapaTematico mapa = new MapaTematico();
mapa.setListadoValores(lista_val);
mapa.setFormato(tipo_mapa);
mapa.setRango(rango);
/* Le indicamos que va a trabajar con municipios; si se
quiere indicar que trabaje con distritos, se debería poner
sigi.tematicos.MapaTematico.DISTRITOS */
mapa. setTipoMapa(sigi.tematicos.MapaTematico.MUNICIPIOS);
try {
Área de Integración y Arquitectura de Aplicaciones
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 32
Librería SIGI
FRAMEWORK JAVA 2.1
mmBean = m_mapa.construye_mapa_tematico(mapa);
} catch (SIGIException sigiex) {
throw new AccionException(sigiex.getMessage());
}
Una vez generado el mapa hay que dejar el javabean en la sesión para que
sea visualizado por la página jsp.
El siguiente código muestra como dejar el javabean en la sesión:
request.getSession().setAttribute("muestra_mapa_Bean",mmBean);
Este javabean es un objeto de la clase MapaBean comentada anteriormente.
Dependiendo del formato de salida de mapa temático se va a visualizar en una
página jsp distinta ya que el plug-in de visualización va a ser distinto.
El siguiente código muestra la elección del destino:
if ((tipo_mapa.indexOf("svg") != -1)
|| tipo_mapa.indexOf("vrml") != -1
|| tipo_mapa.indexOf("htm") != -1){
NOMBRE_VISTA = "muestra_mapa_url";
} else if (tipo_mapa.indexOf("cgm") != -1){
NOMBRE_VISTA = "muestra_mapa_cgm";
} else {
NOMBRE_VISTA = "muestra_mapa_simple";
}
En el ejemplo en el apartado download se incluyen los distintos plug-in
necesarios para la visualización de todos los formatos de los mapas temáticos.
Área de Integración y Arquitectura de Aplicaciones
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 33
Librería SIGI
FRAMEWORK JAVA 2.1
Ejemplo de un mapa de formato vrml
Ejemplo de un mapa con formato svg
Área de Integración y Arquitectura de Aplicaciones
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 34
Librería SIGI
FRAMEWORK JAVA 2.1
10 Fichero de configuración
A continuación se muestran todas las variables del fichero de configuración
relacionadas con los mapas.
sigi.ancho : Indica el ancho que tendrá la imagen que devuelve el servicio web
tras nuestra solicitud.
Ej:
sigi.ancho = 400
sigi.alto : Indica el alto que tendrá la imagen que devuelve el servicio web tras
nuestra solicitud.
Ej:
sigi.alto = 300
sigi.tipomapa : Indica el tipo de mapa de calles que se genera si no se indica
el tipo.
Ej:
sigi.tipomapa = cgm
sigi.urlservicio : Es la url en la que se encuentra el servicio web escuchando
las peticiones. Esta url depende del webservice que se vaya a usar.
Ej:
Área de Integración y Arquitectura de Aplicaciones
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 35
Librería SIGI
FRAMEWORK JAVA 2.1
sigi.urlservicio = http://nticmint11.madrid.org/webservice_SIGI2/cgibin/Servicioweb.exe/soap/IInterfazServicioMapas
sigi.distancia : Tamaño en metros del mapa que se toma por defecto.
Ej:
sigi.distancia = 100
sigi.factorzoomin : Es la relación entre la superficie cubierta por un mapa y la
que cubre después de hacer zoom in. En el ejemplo se indicaría que al hacer
zoom se cubre la mitad de superficie.
Ej:
sigi.factorzoomin = 0.5
sigi.factorzoomout : Similar al anterior, salvo para alejar la vista. Por tanto, en
el ejemplo se indica que al hacer zoom se vería un 50% más de superficie.
Ej:
sigi.factorzoomout = 1.5
sigi.etiqueta_no_encontrado : Indica qué etiqueta del XML de respuesta
indica que la dirección no existe. Si no se pone, lo que pasa es que
cuando una dirección no existe salta una excepción genérica en vez de
una específica, con lo que no es posible detectar que el problema es que
la dirección no existe (y se confunde con un error).
Ej:
sigi.etiqueta_no_encontrado=no_encontrado
sigi.capa.base : Son las distintas capas base que se van a mostrar en el
mapa.
Ej:
sigi.capa.base =
MUNICIPIOS,FONDOS,MANZANAS,EDIFICIOS,CALLEJERO,PORTALES
sigi.capa.extendida : Son las distintas capas extendidas que se van a mostrar
en el mapa.
Ej:
sigi.capa.extendida= Pruebas de Farmacias,Casas Consistoriales
(Mostraría situación de farmacias y ayuntamientos)
sigi.entidad_resaltada : Indica el nombre de la capa que se va a resaltar en el
mapa.
Ej:
sigi.entidad_resaltada=PORTALES
(resaltaría el portal)
sigi.host_remoto : Indica el nombre de la máquina desde la cual se descarga
los mapas generados.
Ej:
sigi.host_remoto=NTICMNT11
Área de Integración y Arquitectura de Aplicaciones
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 36
Librería SIGI
FRAMEWORK JAVA 2.1
sigi.directorio_remoto : Indica el directorio en la máquina remota, en el que
se generan los mapas.
Ej:
Sigi.directorio_remoto =c:/GWMCache
sigi.puerto_remoto : Puerto de escucha del servidor remoto de ficheros.
Ej:
sigi.puerto _remoto = 8004
sigi.hint : Formato de la etiqueta que acompaña a los mapas temáticos.
Aparecerá en pantalla lo que se ponga en esta variable, sustituyendo
[$codigo$] por el código del municipio, y [$valor$] por el valor en el mapa
temático.
Ej:
sigi.puerto _remoto = sigi.hint=Código : [$codigo$] -- Valor : [$valor$]
sigi.url_dtd : Indica la URL donde esta accesible la dtd necesaria para validar
los mapas en formato svg_d.
Ej:
sigi.url_dtd=http://icmweb01/ejemplo_mapas/dtd/svg_d.dtd
aplicacion.directorio.temporal: Indica el directorio de la máquina de la
aplicación en el que se almacenan los mapas descargados.
Ej para local:
aplicacion.directorio.temporal=
D:/Producto/oc4j9.0.4/j2ee/home8080/icm/ejemplo_mapas/ejemplo_mapas/pdf/temp
Ej para Unix:
aplicacion.directorio.temporal= /usr/aplic_ICM/prod/web/temp/pdf
aplicacion.download : Url para la descarga de los mapas.
Ej para local:
aplicacion.download=http://pc244735:8080/ejemplo_mapas/pdf/temp
Ej para Unix:
aplicacion.download= http://icmweb01.icm.es/download
webservice.timeout : Tiempo máximo en milisegundos que se concede a la
generación del mapa; un cero indica que no hay tiempo límite.
Ej para local:
aplicacion.download=0
Ej para Unix:
aplicacion.download= 60000
Además, se deben incluir las siguientes entradas en el fichero de configuración,
para defirnir tres acciones comunes:
AccionMueveMapa=sigi.acciones
AccionMuestraMapaXXYY=sigi.acciones
Área de Integración y Arquitectura de Aplicaciones
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 37
Librería SIGI
FRAMEWORK JAVA 2.1
AccionMuestraMapaFit=sigi.acciones
Área de Integración y Arquitectura de Aplicaciones
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 38
Descargar