Preview only show first 6 pages with water mark for full document please download
Transcript
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: