Download Capítulo 1. Introducción
Document related concepts
no text concepts found
Transcript
cenidet Centro Nacional de Investigación y Desarrollo Tecnológico Departamento de Ciencias Computacionales TESIS DE MAESTRÍA EN CIENCIAS Herramienta para la Generación de Estilos Definidos por el Usuario para su Asociación a Mapas Geográficos y Publicación en Prototipos de Aplicaciones Web presentada por Janet de Jesús García Alba Ing. en Sistemas Computacionales por el I. T. de la Laguna como requisito para la obtención del grado de: Maestría en Ciencias en Ciencias de la Computación Director de tesis: Dr. Juan Gabriel González Serna Co-Director de tesis: Dr. Joaquín Pérez Ortega Jurado: Dr. René Santaolaya Salgado – Presidente M.C. Andrea Magadán Salazar – Secretario M.C. Humberto Hernández García – Vocal Dr. Juan Gabriel González Serna – Vocal Suplente Cuernavaca, Morelos, México. 20 de Febrero de 2009 DEDICATORIA A papá Dios: Por su amor, por guiarme en el camino del bien, poner a las personas adecuadas en mí camino y darme fortaleza en todo momento. Sin duda me has dado más de lo que merezco. A mi madre Obdulia Alba Flores: Por su amor, consejos y palabras de aliento. Por respetar mis decisiones y ser quien nunca desistió en que toda la familia saliera adelante a pesar de las adversidades. Este trabajo es suyo madre. La quiero mucho mamita chula. A mi padre Juan García López (f): Por el ejemplo académico que me brindó y sus consejos de nunca dejar de seguir preparándome. Con cariño le dedico este trabajo padre. A mis hermanos Juan Adolfo, Oscar Sergio, José Guadalupe, Alejandro, Arturo y Denis de Jesús: Por creer en mí. Por estar cada uno a su manera respaldándome económica y moralmente para lograr mis objetivos. Gracias por sus consejos y momentos agradables. Este trabajo se los dedico con mucho cariño hermanitos chulos. A mis cuñadas y amigas Rocío Navarro, Elizabeth Montaño y Johana Silva: Por su amistad, consejos y apoyo. Gracias cuñaditas por los buenos momentos. A mis sobrinos Moisés Adolfo, Diego David, Juan Arón y Joselín: Por traer alegría a la familia con sus ocurrencias y travesuras. Porque con sus sonrisas cultivaron mi alegría dándome motivos de seguir adelante. Los amo. A mi novio Jesús Fidel Borjas Díaz: Por los cuidados, enseñanzas y gran paciencia recibida de manera incondicional estos dos años. Por su amor y respeto a mis decisiones. Por hacerme reír a pesar de las circunstancias. Sin tu apoyo no lo hubiera logrado “pacharrito”. Te amo. AGRADECIMIENTOS Este trabajo de investigación no hubiera sido posible realizarlo sin el apoyo del Consejo Nacional de Ciencia y Tecnología (CONACYT), ya que la beca que me otorgó estos dos años fue el sustento económico para poder solventar mis estudios de maestría. También quiero agradecer al Centro Nacional de Investigación y Desarrollo Tecnológico (CENIDET) por la oportunidad que me brindaron de realizar mis estudios de posgrado en sus instalaciones. En estos dos años de investigación fueron muchas las personas que contribuyeron con sus observaciones y consejos para que se lograra concluir satisfactoriamente este trabajo. A todos ustedes les agradezco de todo corazón pero en especial: A papá Dios por todo el amor que me ha dado, por estar conmigo en todo momento, ser mi guía y cuidar a mis seres queridos y darles la tranquilidad de que seguía por el camino del bien a pesar de la distancia. A mi mamá y hermanos que siempre se han preocupado por mi bienestar. Les agradezco mucho familia querida por todo lo que me han dado a lo largo de mi vida. Esta meta no se hubiera concluido sin su amor y apoyo incondicional. Los amo. A mi padre que a su manera me mostró su amor. Le agradezco por los momentos gratos que pasamos y su consejo de seguir preparándome. A mi director de tesis Dr. Juan Gabriel González Serna por su paciencia, buen trato y guiarme a lo largo de la investigación. A mis revisores de tesis: Dr. René Santaolaya Salgado, M.C. Andrea Magadán Salazar y al M.C. Humberto Hernández García por el tiempo dedicado y observaciones constructivas que enriquecieron el contenido del presente trabajo. Al personal académico y administrativo de CENIDET, por compartir su conocimiento y buen trato. A mis compañeros y amigos de generación: Claudia, Deysy, Lalo y Richard. Por momentos agradables y formar parte de esta experiencia. En especial a Deysy por aguantarnos mutuamente durante un año al convivir en la misma casa, por esas pláticas que duraban horas y por tu apoyo en los trámites de titulación. Sin tu ayuda esto hubiera sido complicado. A mis compañeros de otras generaciones: Lirio, Adriana, Chucho, Pedro y Daniel de la generación 2005-2007. Ruby, Janeth, Luis, Omar, Israel y Christian de la generación 20072009. A todos gracias por compartir momentos agradables en el laboratorio de SD. Quiero hacer un especial agradecimiento a mi novio Jesús Fidel Borjas Díaz, pues su apoyo, amor y paciencia estos dos años fueron importantes para seguir adelante a pesar de estar lejos de nuestras familias. Gracias amor por enseñarme a ser independiente y apoyarme en todos los aspectos. RESUMEN Desde los orígenes de la humanidad, el interés del hombre por conocer el entorno que le rodea y descubrir y dominar nuevos territorios, lo han conducido a elaborar modelos reducidos de los lugares que ha habitado. Es así como nace la cartografía, como ciencia y arte de representación del mundo. En principio materializada sobre distintas superficies y con herramientas variadas, cambiando constantemente al experimentar una serie importante de innovaciones gracias a los avances tecnológicos que se tienen en el presente. En el presente es común visualizar mapas publicados en la Web en formato vectorial y ráster. La mayoría de los usuarios de aplicaciones que contienen información espacial no tienen necesidades especiales de visualización, pero el grupo de usuarios avanzados que desarrollan aplicaciones con contenido espacial, les surge la necesidad de gestionar y controlar la forma en que se visualiza la información espacial de tal manera que facilite su legibilidad. Esta actividad resulta ser una labor nada amigable para aquellos diseñadores de sitios Web que no están familiarizados con las especificaciones de estilo proporcionadas por la Open Geospatial Consortium (OGC). Por lo anterior, el presente trabajo propone una herramienta generadora de prototipos de Aplicaciones Web con contenido espacial, basada en la especificación J2EE que permita proporcionar estilos personalizados a los mapas geográficos y publicarlos de manera sencilla en Internet. Por lo tanto el objetivo de esta tesis es desarrollar una herramienta de software que proporcione servicios para diseñar la apariencia e interacción con mapas temáticos. TABLA DE CONTENIDO CAPÍTULO 1 INTRODUCCIÓN .............................................................................................. 1 1.1. Introducción ............................................................................................................................. 2 1.2. Descripción del problema......................................................................................................... 2 1.3. Objetivos .................................................................................................................................. 3 1.4. Justificación.............................................................................................................................. 3 1.5. Beneficios ................................................................................................................................. 4 1.6. Alcances del proyecto de tesis ................................................................................................. 5 1.7. Limitaciones del proyecto de tesis ........................................................................................... 5 1.8. Estado de la práctica ................................................................................................................. 6 1.8.1. Click2Map ........................................................................................................................ 8 1.8.2. Map24 ............................................................................................................................ 10 1.8.3. ZoomIn ........................................................................................................................... 10 1.8.4. MapBuilder..................................................................................................................... 11 1.8.5. Google Maps .................................................................................................................. 12 1.8.6. Yahoo Maps ................................................................................................................... 13 1.8.7. Live Search Maps ........................................................................................................... 13 1.9. Organización del documento .................................................................................................. 15 CAPÍTULO 2 MARCO TEÓRICO ......................................................................................... 17 2.1. Sistemas de Información Geográfica ..................................................................................... 18 2.1.1. Información ráster .......................................................................................................... 19 2.1.2. Información vectorial ..................................................................................................... 20 2.2. Open Gesospatial Consortium (OGC) .................................................................................... 21 2.2.1. Web Map Service(WMS) ............................................................................................... 21 2.2.2. HTTP GET ..................................................................................................................... 22 2.2.3. HTTP POST ................................................................................................................... 23 2.2.4. Operaciones WMS ......................................................................................................... 25 2.2.5. Styled Layer Descriptor (SLD) ...................................................................................... 29 2.3. Elementos de programación ................................................................................................... 30 2.3.1. J2EE ............................................................................................................................... 30 2.3.2. Patrón Modelo-Vista-Controlador.................................................................................. 31 2.3.3. JAVASCRIPT ................................................................................................................ 33 2.3.4. AJAX.............................................................................................................................. 34 2.3.5. XML ............................................................................................................................... 34 CAPÍTULO 3 ANÁLISIS Y DISEÑO ..................................................................................... 37 3.1. ANÁLISIS.............................................................................................................................. 38 3.1.1. Especificación de requerimientos ................................................................................... 38 3.1.1.1. Ámbito........................................................................................................................ 38 3.1.1.2. Perspectiva del producto ............................................................................................ 38 3.1.1.3. Funciones del producto .............................................................................................. 38 3.1.1.4. Descripción de las funciones ...................................................................................... 38 3.1.1.5. Usuarios de la herramienta ......................................................................................... 39 3.1.1.6. Limitaciones de la herramienta .................................................................................. 39 3.1.2. Diagramas de casos de uso y diagramas de actividad .................................................... 40 3.1.2.1. Caso de uso: Registrar Usuario .................................................................................. 41 ~i~ 3.1.2.2. Caso de uso: Autentificar Usuario.............................................................................. 42 3.1.2.3. Caso de uso: Diseñar Mapa ........................................................................................ 43 3.1.2.4. Caso de uso: Solicitad Mapa ...................................................................................... 45 3.1.2.5. Caso de uso: Aplicar Estilos ....................................................................................... 46 3.1.2.6. Caso de uso: Generar Código XML ........................................................................... 48 3.1.2.7. Caso de uso: Elegir Plantilla de Diseño ..................................................................... 49 3.1.2.8. Caso de uso: Publicar Aplicación Web ...................................................................... 51 3.1.2.9. Caso de uso: Visualizar Aplicación Web ................................................................... 52 3.2. DISEÑO ................................................................................................................................. 53 3.2.1. Diseño arquitectónico ..................................................................................................... 53 3.2.1.1 Clientes ........................................................................................................................... 54 3.2.1.2 Contenedor Web............................................................................................................. 54 3.2.1.3 Herramienta MapWeb Designer ..................................................................................... 54 3.2.1.4 Api visora de mapas ....................................................................................................... 55 3.2.1.5 Servidor de mapas (WMS por sus siglas en inglés). ..................................................... 56 3.2.1.6 Base de Datos (PostgreSQL). ......................................................................................... 56 3.2.2. Diagramas de clases ....................................................................................................... 56 3.2.2.1. Clases del caso de uso Registrar Usuario ................................................................... 57 3.2.2.2. Clases del caso de uso Autentificar Usuario .............................................................. 59 3.2.2.3. Clases del caso de uso Diseñar Mapa ......................................................................... 61 3.2.2.3.1. Clases del caso de uso Solicitar Mapa........................................................................ 61 3.2.2.3.2. Clases del caso de uso Aplicar Estilos y Generar Código XML ................................ 63 3.2.2.4. Clases del caso de uso Elegir Plantilla de Diseño y Publicar Aplicación Web .......... 65 3.2.2.5. Secuencia del Caso de uso Visualizar Aplicación Web ............................................. 67 3.2.3. Diseño de la Base de Datos. ........................................................................................... 67 CAPÍTULO 4 IMPLEMENTACION ....................................................................................... 69 4.1 Conexión con la base de datos ............................................................................................... 70 4.2 Construcción del catálogo de mapas ...................................................................................... 71 4.3 Lógica de negocio .................................................................................................................. 71 4.4 Consulta de atributos del mapa .............................................................................................. 72 4.5 Construcción documento SLD ............................................................................................... 73 CAPÍTULO 5 PRUEBAS ...................................................................................................... 75 5.1 Resultados de las pruebas....................................................................................................... 77 5.2 Análisis de resultados ........................................................................................................... 101 CAPÍTULO 6 CONCLUSIONES ......................................................................................... 103 ANEXOS ............................................................................................................................ 107 ANEXO A EVALUACIÓN DE APIS VISORAS DE MAPAS ................................................. 109 ANEXO B EVALUACIÓN DE SERVIDORES DE MAPAS ................................................... 125 ANEXO C DISEÑO DE OBJETOS PARA EL DOCUMENTO SLD ...................................... 141 ANEXO D SÍNTESIS DE LA ESPECIFICACIÓN SLD......................................................... 145 ANEXO E PLAN DE PRUEBAS .......................................................................................... 165 REFERENCIAS .................................................................................................................. 177 ~ ii ~ INDICE DE FIGURAS Figura 1.1. Estudio del uso de comercio electrónico en México.............................................................. 3 Figura 1.2. Clasificación de la Geomática respecto al software libre ...................................................... 7 Figura 1.3. Interfaz de usuario de Click2Map .......................................................................................... 9 Figura 1.4. Publicación del mapa creado en Click2Map .......................................................................... 9 Figura 1.5. Interfaz de Map24 ................................................................................................................ 10 Figura 1.6. Interfaz de ZoomIn .............................................................................................................. 11 Figura 1.7. Interfaz de MapBuilder ........................................................................................................ 12 Figura 1.8. Interfaz de Google Maps...................................................................................................... 13 Figura 1.9. Interfaz de Yahoo Maps ....................................................................................................... 14 Figura 1.10. Interfaz de Virtual Earth .................................................................................................... 14 Figura 2.1. Capas que representan la realidad ........................................................................................ 18 Figura 2.2. Organización de la información en el modelo de datos ráster ............................................. 20 Figura 2.3. Información de un pixel ....................................................................................................... 20 Figura 2.4. Objetos geométricos del formato vectorial .......................................................................... 20 Figura 2.5. Resultado de solicitud GET a un WMS ............................................................................... 23 Figura 2.6. Código HTML de formulario para manejo de petición POST............................................. 24 Figura 2.7. Envío de petición HTTP POST............................................................................................ 24 Figura 2.8. Resultado de la petición HTTP POST ................................................................................. 25 Figura 2.9. Resultado de la petición GetCapabilities ............................................................................. 26 Figura 2.10. Resultado de la petición GetMap ....................................................................................... 27 Figura 2.11. Resultado de la petición GetFeatureInfo............................................................................ 29 Figura 2.12. Resultado de una petición al WMS utilizando el parámetro SLD y SLD_BODY ............ 30 Figura 2.13. Aplicaciones multinivel ..................................................................................................... 31 Figura 2.14. Interacción del patrón MVC .............................................................................................. 32 Figura 2.15. Funcionamiento de Struts .................................................................................................. 33 Figura 3.1. Diagrama general de casos de uso del sistema .................................................................... 40 Figura 3.2. Diagrama del caso de uso Registrar Usuario ....................................................................... 41 Figura 3.3. Diagrama de actividad de caso de uso Registrar Usuario .................................................... 42 Figura 3.4. Diagrama del caso de uso Autentificar Usuario................................................................... 42 Figura 3.5. Diagrama de actividad de caso de uso Autentificar Usuario ............................................... 43 Figura 3.6. Diagrama del caso de uso Diseñar Mapa ............................................................................. 44 Figura 3.7. Diagrama de actividad de caso de uso Diseñar Mapa .......................................................... 45 Figura 3.8. Diagrama de actividad de caso de uso Solicitar Mapa......................................................... 46 Figura 3.9. Diagrama de actividad de caso de uso Aplicar Estilos ........................................................ 48 Figura 3.10. Diagrama de actividad de caso de uso Generar Código XML ........................................... 49 Figura 3.11. Diagrama del caso de uso Elegir Plantilla de Diseño ........................................................ 49 Figura 3.12. Diagrama de actividad de caso de uso Elegir Plantilla de Diseño. .................................... 50 Figura 3.13. Diagrama del caso de uso Publicar Aplicación Web. ........................................................ 51 Figura 3.14. Diagrama de actividad del caso de uso Publicar Aplicación Web ..................................... 51 Figura 3.15. Diagrama del caso de uso Visualizar Aplicación Web ...................................................... 52 Figura 3.16. Diagrama de actividad de caso de uso Visualizar Aplicación Web ................................... 53 ~ iii ~ Figura 3.17. Arquitectura general del sistema ........................................................................................ 54 Figura 3.18. Aplicación MapWeb Designer........................................................................................... 55 Figura 3.19. Paquetes del sistema MapWeb Designer ........................................................................... 56 Figura 3.20. Diagrama de clases de Registrar Usuario ......................................................................... 58 Figura 3.21. Diagrama de secuencias de Registrar Usuario .................................................................. 59 Figura 3.22. Diagrama de clases de Autentificar Usuario ..................................................................... 60 Figura 3.23. Diagrama de secuencias de Autentificar Usuario .............................................................. 61 Figura 3.24. Diagrama de secuencias de Solicitar Mapa ....................................................................... 62 Figura 3.25. Diagrama de clases de Solicitar Mapa............................................................................... 62 Figura 3.26. Diagrama de clases de Aplicar Estilos y generar código XML ......................................... 64 Figura 3.27. Diagrama de secuencias de Aplicar Estilos y generar código XML .................................. 65 Figura 3.28. Diagrama de clases de Elegir Plantilla de Diseño y Publicar Aplicación Web ................ 66 Figura 3.29. Diagrama de secuencias Elegir Plantilla de Diseño y Publicar Aplicación Web.............. 66 Figura 3.30. Diagrama de Secuencias de Visualizar Aplicación Web .................................................... 67 Figura 3.31. Diagrama Conceptual de la base de datos.......................................................................... 67 Figura 3.32. Diagrama Físico de la base de datos .................................................................................. 68 Figura 4.1. Clases del paquete mx.edu.cenidet.MapWebDesigner.Modelo.BaseDatos ......................... 70 Figura 4.2. Clase del paquete mx.edu.cenidet.MapWebDesigner.Modelo.ContextoCapas.................... 71 Figura 4.3. Clases del paquete mx.edu.cenidet.MapWebDesigner.Modelo.Logica................................ 71 Figura 4.4. Petición AJAX con acceso denegado al Servidor WMS ..................................................... 72 Figura 4.5. Clase del paquete mx.edu.cenidet.MapWebDesigner.Modelo.Proxy................................... 73 Figura 4.6. Petición AJAX con acceso denegado al Servidor WMS ..................................................... 73 Figura 5.1. Interfaz en la que se proporcionan los datos del usuario ..................................................... 77 Figura 5.2. Usuario registrado en la base de datos del sistema .............................................................. 77 Figura 5.3. Interfaz mostrada al registrar adecuadamente al usuario ..................................................... 78 Figura 5.4. Interfaz mostrada al ingresar un login registrado................................................................. 78 Figura 5.5. Ingreso al sistema................................................................................................................. 79 Figura 5.6. Interfaz de rechazo al ingreso del sistema ........................................................................... 80 Figura 5.7. Interfaz de error de conexión con la base de datos .............................................................. 80 Figura 5.8. Catálogo de mapas ............................................................................................................... 81 Figura 5.9. Visualización del mapa solicitado ....................................................................................... 82 Figura 5.10. Estado del mapa antes de ser estilizado ............................................................................. 83 Figura 5.11. Mapa después de aplicarle la configuración de línea sólida .............................................. 83 Figura 5.12. Mapa después de aplicarle la configuración de línea punteada ......................................... 84 Figura 5.13. Mapa de México antes de ser personalizado ...................................................................... 85 Figura 5.14. Mapa de México con estilo personalizado ......................................................................... 85 Figura 5.15. Puntos del mapa de México antes de ser personalizado .................................................... 86 Figura 5.16. Puntos con estilo personalizado ......................................................................................... 86 Figura 5.17. Puntos personalizados utilizando un gráfico...................................................................... 87 Figura 5.18. Mapa de México antes de personalizar el texto ................................................................. 88 Figura 5.19. Mapa con personalización de texto utilizando la ubicación PointPlacement. ................... 88 Figura 5.20. Mapa de México antes de aplicar la configuración de texto .............................................. 89 ~ iv ~ Figura 5.21. Mapa de México que muestra el estilo de texto con rotación ............................................ 89 Figura 5.22. Mapa de la vialidad de Cuernavaca antes de aplicar estilo de texto .................................. 90 Figura 5.23. Mapa con personalización de texto utilizando la ubicación LinePlacement...................... 90 Figura 5.24. Mapa de Morelos que muestra la estilización del texto ..................................................... 91 Figura 5.25. Documento SLD ................................................................................................................ 92 Figura 5.26. Mapa que muestra el estilo descrito en el documento SLD ............................................... 92 Figura 5.27. Variable tempText que contiene la plantilla de aplicación Web y el mapa solicitado....... 93 Figura 5.28. Carpeta Web del usuario .................................................................................................... 93 Figura 5.29. Plantilla de estilo publicado en la Web .............................................................................. 94 Figura 5.30. Interfaz para iniciar sesión ................................................................................................. 95 Figura 5.31. Interfaz de opciones a elegir en una sesión activa ............................................................. 95 Figura 5.32. Interfaz del catálogo de mapas que provee el WMS .......................................................... 96 Figura 5.33. Mapa de México sin estilos definidos por el usuario ......................................................... 96 Figura 5.34. Estilización de puntos ........................................................................................................ 97 Figura 5.35. Estilización de líneas ......................................................................................................... 97 Figura 5.36. Estilización de polígonos ................................................................................................... 98 Figura 5.37. Estilización de texto ........................................................................................................... 98 Figura 5.38. Documento XML que describe los estilos definidos por el usuario .................................. 99 Figura 5.39. Elección de plantilla Web .................................................................................................. 99 Figura 5.40. Publicación del mapa en plantilla de aplicación Web...................................................... 100 Figura 5.41. Publicaciones realizadas por el usuario ........................................................................... 100 Figura A.1. Referencia a la librería msCross ....................................................................................... 110 Figura A.2. Definición de elemento DIV y solicitud a servidor de la NASA ...................................... 111 Figura A.3. Visualización de mapas..................................................................................................... 111 Figura A.4. Referencia a la librería OpenLayers.................................................................................. 112 Figura A.5. Creación de objeto mapa ................................................................................................... 112 Figura A.6. Solicitud al servidor Geoserver utilizando OpenLayers ................................................... 112 Figura A.7. Adición de la capa México al objeto map ......................................................................... 113 Figura A.8. Elemento DIV con identificador map ............................................................................... 113 Figura A.9. Llamada de la función init() .............................................................................................. 113 Figura A.10. Mapa de México visualizado utilizando OpenLayers ..................................................... 113 Figura A.11. Visualización de mapas con Ka-Map.............................................................................. 115 Figura A.12. Creación de petición a WMS. ......................................................................................... 116 Figura A.13. Definición de elemento DIV ........................................................................................... 116 Figura A.14. Definición de función init()............................................................................................. 116 Figura A.15. Invocación de función init() ............................................................................................ 116 Figura A.16. Mapa visualizado en WMS JavaScript Library .............................................................. 117 Figura A.17. Referencia a la librería Mapbuilder.js ............................................................................. 118 Figura A.18. Configuraciones utilizadas en documentos HTML o JSP............................................... 118 Figura A.19. Trozo de código XML del archivo config.xsd ................................................................ 119 Figura A.20. Archivo de configuración ............................................................................................... 119 Figura A.21. Trozo de código XML del archivo demisWorldMap.xml .............................................. 120 ~v~ Figura A.22. Mapa visualizado en Mapbuilder .................................................................................... 120 Figura A.23. Gráfico comparativo de la evaluación de las APIs ......................................................... 122 Figura A.24. Resultados de la evaluación de APIs .............................................................................. 123 Figura B.1. Mapa visualizado en Degree. ........................................................................................... 127 Figura B.2. Ingreso a Configuración. ................................................................................................... 128 Figura B.3. Inicio de sesión en Geoserver............................................................................................ 128 Figura B.4. Ingreso a los datos de Geoserver. ...................................................................................... 128 Figura B.5. Configuración de espacio de nombres. ............................................................................. 129 Figura B.6. Creación del espacio de nombres. ..................................................................................... 129 Figura B.7. Visualización del espacio de nombre México creado. ...................................................... 129 Figura B.8. Creación de un nuevo almacén de datos. .......................................................................... 130 Figura B.9. Editor del almacén de datos .............................................................................................. 130 Figura. B.10. Entidades disponibles en Geoserver ............................................................................... 131 Figura B.11. Entidades disponibles en Geoserver ................................................................................ 131 Figura B.12. Visualización del mapa de México en Geoserver ........................................................... 132 Figura B.13. Archivo .map ................................................................................................................... 135 Figura B.14. Archivo de inicialización ejemplo2.html ........................................................................ 135 Figura B.15. Mapa visualizado en MapServer ..................................................................................... 136 Figura B.16. Gráfico comparativo de la evaluación de los servidores de mapas ................................. 137 Figura B.17. Resultados de la evaluación de servidores de mapas ...................................................... 140 Figura C.1. Diagrama de objetos SLD ................................................................................................. 142 Figura C.2. Diagrama de clases SLD ................................................................................................... 143 Figura D.1. Esquema SLD del elemento raíz ....................................................................................... 146 Figura D.2. Esquema de elemento NamedLayer .................................................................................. 147 Figura D.3. Esquema de elemento UserLayer ..................................................................................... 147 Figura D.4. Esquema de elemento RemoteOWS .................................................................................. 148 Figura D.5. Esquema XML para el elemento LayerFeatureConstraints ............................................. 148 Figura D.6. Ejemplo de capa definida por el usuario ........................................................................... 149 Figura D.7. Esquema XML del estilo definido por el usuario ............................................................. 149 Figura D.8. Ejemplo de UserStyle........................................................................................................ 150 Figura D.9. Esquema XML de FeatureTypeStyle ................................................................................ 150 Figura D.10. Esquema XML del elemento Rule .................................................................................. 151 Figura D.11. Esquema XML de LegendGraphic ................................................................................. 151 Figura D.12. Esquema XML para MinScaleDenominator y MaxScaleDenominator .......................... 152 Figura D.13. Ejemplo de Filter y ElseFilter ......................................................................................... 152 Figura D.14. Esquema XML de la simbolización Lineal ..................................................................... 153 Figura D.15. Esquema XML de Geometry .......................................................................................... 153 Figura D.16. Ejemplo de uso de Geometry .......................................................................................... 153 Figura D.17. Esquema XML de Stroke ................................................................................................ 154 Figura D.18. Esquema XML de CssParameter ................................................................................... 154 Figura D.19. Esquema XML de GraphicFill ....................................................................................... 154 Figura D.20. Esquema XML de GraphicStroke ................................................................................... 155 ~ vi ~ Figura D.21. Ejemplo de LineSymbolizer ............................................................................................ 155 Figura D.22. Resultado al aplicar la simbolización LineSymbolizer definida en la figura (D.21) ....... 155 Figura D.23. Esquema XML de PolygonSymbolizer ........................................................................... 155 Figura D.24. Esquema XML de Fill .................................................................................................... 156 Figura D.25. Ejemplo de estilización poligonal ................................................................................... 156 Figura D.26. Resultado de la definición mostrada en la figura (D.25) ................................................ 156 Figura D.27. Esquema XML de PointSymbolizer ................................................................................ 156 Figura D.28. Esquema XML de Graphic y ExternalGraphic .............................................................. 157 Figura D.29. Esquema XML Mark ...................................................................................................... 158 Figura D.30. Ejemplo de estilización Puntual ...................................................................................... 158 Figura D.31. Resultado de la definición mostrada en la figura (D.30) ................................................ 158 Figura D.32. Esquema XML de TextSymbolizer.................................................................................. 159 Figura D.33. Esquema XML de Font................................................................................................... 159 Figura D.34. Esquema XML de LabelPlacement, PointPlacement y LinePlacement ......................... 160 Figura D.35. Esquema XML de AnchorPoint ...................................................................................... 160 Figura D.36. Valores que puede tomar AnchorPoint ........................................................................... 160 Figura D.37. Esquema XML de Halo .................................................................................................. 162 Figura D.38. Ejemplo de simbolización Texto ..................................................................................... 163 Figura D.39. Resultado de la definición mostrada en la figura (D.38) ................................................ 163 ~ vii ~ INDICE DE TABLAS Tabla 1.1. Comparativa de las aplicaciones Web estudiadas con la propuesta. ..................................... 15 Tabla 2.1. Caracteres reservados en WMS para una cadena de consulta ............................................... 21 Tabla 2.2. Estructura de petición HTTP GET ........................................................................................ 22 Tabla 2.3. Parámetros para la solicitud GetCapabilities ........................................................................ 25 Tabla 2.4. Parámetros para la solicitud GetMap .................................................................................... 26 Tabla 2.5. Parámetros para la solicitud GetFeatureInfo ........................................................................ 28 Tabla 3.1. Descripción de caso de uso Registrar Usuario ...................................................................... 41 Tabla 3.2. Descripción del caso de uso Autentificar Usuario ................................................................ 42 Tabla 3.3. Descripción de caso de uso Diseñar Mapa ............................................................................ 44 Tabla 3.4. Descripción de caso de uso Solicitar Mapa ........................................................................... 45 Tabla 3.5. Descripción de caso de uso Aplicar Estilos .......................................................................... 46 Tabla 3.6. Descripción de caso de uso Generar Código XML ............................................................... 48 Tabla 3.7. Descripción de caso de uso Elegir Plantilla de Diseño ......................................................... 50 Tabla 3.8. Descripción de caso de uso Publicar Aplicación Web .......................................................... 51 Tabla 3.9. Descripción de caso de uso Visualizar Aplicación Web ....................................................... 52 Tabla 3.10. Simbología utilizada en diagramas de secuencias............................................................... 57 Tabla 5.1. Caso de prueba MAPWEBDE-01.01 Registro de usuarios .................................................. 77 Tabla 5.2. Caso de prueba MAPWEBDE-01.02 Autentificación al sistema ......................................... 79 Tabla 5.3. Caso de prueba MAPWEBDE-01.03 Rechazo al inicio de sesión........................................ 79 Tabla 5.4. Caso de prueba MAPWEBDE-01.04 Acceso al sistema ...................................................... 81 Tabla 5.5. Caso de prueba MAPWEBDE-02 Solicitud y visualización de mapas................................. 82 Tabla 5.6. Caso de prueba MAPWEBDE-03.01 Estilizar líneas ........................................................... 82 Tabla 5.7. Caso de prueba MAPWEBDE-03.02 Estilizar polígonos ..................................................... 84 Tabla 5.8. Caso de prueba MAPWEBDE-03.03 Estilizar puntos .......................................................... 86 Tabla 5.9. Caso de prueba MAPWEBDE-03.04 Estilizar texto ............................................................. 87 Tabla 5.10. Caso de prueba MAPWEBDE-03.05 Generación de Código XML ................................... 91 Tabla 5.11. Caso de prueba MAPWEBDE-04 Asociar mapa a plantilla de página Web ...................... 93 Tabla 5.12. Caso de prueba MAPWEBDE-05 Publicación de la página Web ...................................... 93 Tabla 5.13. Caso de prueba MAPWEBDE-06 Visualización de la página Web ................................... 94 Tabla 5.14. PRUEBA DE INTEGRACION-Funcionamiento general del sistema ................................ 95 Tabla A.1. Navegadores soportados por Ka-Map ................................................................................ 114 Tabla A.2. Definición de criterios ........................................................................................................ 120 Tabla A.3. Asignación de ponderaciones a cada criterio ..................................................................... 121 Tabla A.4. Asignación de calificaciones a cada API de acuerdo a los criterios ................................... 121 Tabla A.5. Obtención de productos por criterio .................................................................................. 121 Tabla A.6. Obtención de sumatorias por API ...................................................................................... 121 Tabla A.7. Asignación de ponderaciones a cada criterio ..................................................................... 123 Tabla A.8. Matriz de evaluación .......................................................................................................... 124 Tabla B.1. Abstracto de etiquetas usadas en MapServer ..................................................................... 134 Tabla B.2. Definición de criterios ........................................................................................................ 136 Tabla B.3. Asignación de ponderaciones a cada criterio ..................................................................... 136 ~ viii ~ Tabla B.4. Asignación de calificaciones a cada servidor de mapas de acuerdo a los criterios ............ 137 Tabla B.5. Obtención de productos por criterio .................................................................................. 137 Tabla B.6. Obtención de sumatorias por WMS.................................................................................... 137 Tabla B.7. Asignación de ponderaciones a cada criterio ..................................................................... 138 Tabla B.8. Comparativa de servidores ................................................................................................. 139 Tabla D.1. Ejemplos de ubicaciones puntuales .................................................................................... 161 Tabla D.2. Ejemplos de desplazamientos............................................................................................. 161 Tabla D.3. Ejemplos de rotación .......................................................................................................... 161 Tabla D.4. Ejemplos de localización lineal .......................................................................................... 162 Tabla E.1. Elementos de prueba ........................................................................................................... 167 Tabla E.2. Descripción de las tareas de prueba .................................................................................... 168 Tabla E.3. Requisitos ambientales ....................................................................................................... 169 Tabla E.4. Casos de prueba .................................................................................................................. 170 ~ ix ~ GLOSARIO AdSense Es un sistema de publicidad de Google que hace coincidir los anuncios con el contenido de un sitio. Estos anuncios están administrados por Google y generan ingresos basándose en los clics de los visitantes de la página y en las visualizaciones de la misma [ADSENSE, 2008]. API Interfaz de Programación de Aplicaciones (Application Programming Interface por sus siglas en inglés). Es el conjunto de funciones y procedimientos que ofrece cierta biblioteca para ser utilizada por otro software como una capa de abstracción. Representa una interfaz de comunicación entre componentes de software [WIKIAPI, 2007]. Capa Unidad básica de información geográfica que puede solicitarse a un servidor como un mapa [LOPEZ, 2006]. Cartografía La cartografía es la creación, la producción y el estudio de mapas. Se considera una subdisciplina de la geografía [LEARNER 2003]. CVS Valores Separados por Coma (Comma-Separated Values por sus siglas en inglés) es un tipo de documento sencillo para representar datos en forma de tabla, en la que las columnas se separan por comas y las filas por saltos de línea [RFC4180, 2005]. ESRI Instituto de Investigación de Sistemas Ambientales (Enviromental Systems Research Institute por sus siglas en inglés) es una empresa dedicada al desarrollo y comercialización de Sistemas de Información Geográfica [ESRI, 2008]. Geomática Es el término científico moderno que hace referencia a un conjunto de ciencias en las cuales se integran los medios para la captura, tratamiento, análisis, interpretación, difusión y almacenamiento de información geográfica. También llamada información espacial o geoespacial. El término «geomática» está compuesto por dos ramas "GEO" por Geoide, y MATICA por Informática, Es decir estudio del Geoide o globo terrestre a través de la informática [DESIGE, 2008]. GeoRSS Es un conjunto de estándares para representar información geográfica y está construido dentro de la familia de estándares RSS [GEORSS, 2007]. GML Lenguaje de Marcado Geográfico (Geography Markup Language por sus siglas en inglés) es una gramática XML para transportar y expresar información geográfica [OGCGML, 2007]. KML Lenguaje de Marcas de KeyHole (Keyhole Markup Language por sus siglas en inglés), es una gramática XML y un formato de archivo para la creación de modelos y el almacenamiento de funciones geográficas como puntos, líneas, imágenes, polígonos y modelos que se muestran en Google Earth, Google Maps y otras aplicaciones [POKML, 2008]. ~x~ Mapa Representación de dos dimensiones de la distribución espacial de fenómenos o de objetos. Por ejemplo, un mapa puede demostrar la localización de ciudades, de gamas de la montaña, de los ríos, o de los tipos de roca en una región dada. La mayoría de los mapas son planos, haciendo su producción, almacenamiento y manipulación relativamente fácil. Los mapas presentan su información al espectador en una escala reducida. Son más pequeños que el área que representan y usan las relaciones matemáticas para mantener relaciones geográficas proporcionalmente exactas entre los puntos. Los mapas muestran la información usando los símbolos que se identifican en una leyenda [LEWOTSKY, 2004]. MathML El Lenguaje de Marcado Matemático (Mathematical Markup Language por sus siglas en inglés) es un lenguaje de marcado basado en XML cuyo objetivo es expresar notación matemática de forma que distintas máquinas puedan entenderla, para su uso en combinación con XHTML en páginas Web y para intercambio de información entre programas de tipo matemático [WIKIMATH, 2009]. Mashup Aplicación Web híbrida que usa contenido de otras aplicaciones Web para crear un nuevo contenido completo. El contenido de un mashup normalmente proviene de sitios Web de terceros a través de una interfaz pública o usando una API [WIKIMASH, 2009]. OGC El Consorcio Geoespacial Abierto (Open Geospatial Consortium por sus siglas en inglés) es un consorcio internacional de la industria conformado por 369 compañías, agencias gubernamentales y universidades cuyo fin es la definición de estándares abiertos e interoperables dentro de los Sistemas de Información Geográfica para facilitar el intercambio de la información geográfica en beneficio de los usuarios [OGC, 2008]. RSS Es una familia de los formatos XML para el intercambio de información. Muchos sitios Web dinámicos, en especial Weblogs, proporcionan RSS para difundir noticias o intercambiar contenido [GEORSS, 2007]. SGML Lenguaje de Marcado General Normalizado (Standard Generalized Markup Language por sus siglas en inglés) utilizado para especificar las reglas de etiquetado de documentos [W3CSGML, 2009] ShapeFile Formato de tipo vectorial desarrollado por la compañía ESRI que almacena elementos geográficos y atributos asociados a ellos. Está compuesto por archivos .shp, .shx y .dbf [WIKISHP, 2008] Sistema de Referencia Un sistema de referencia es un conjunto de coordenadas espacio-tiempo que se requieren para poder determinar la posición de un punto [EDNEW, 2009]. SLD Descriptor de Estilo de Capa (Styled Layer Descriptor por sus siglas en inglés) es un esquema XML propuesto por la OGC como lenguaje estándar para describir los estilos que dan apariencia a un mapa [OGCSLD, 2002]. ~ xi ~ WMS Servicio de Mapas en Web (Web Map Service por sus siglas en inglés) es una especificación definida por la OGC caracterizada por ser un servicio que provee mapas a través de la Web. Estos mapas tienen como fuente de información datos vectoriales y ráster [OGCWMS, 2002]. WFS Servicio de Fenómenos en Web (Web Feature Service por sus siglas en inglés) es un servicio que permite consultar objetos geográficos regresando el resultado de la consulta en formato GML [OGCWFS, 2002]. Widget Pequeña aplicación o programa que realiza una función concreta, generalmente de tipo visual, dentro de otras aplicaciones o sistemas operativos. Los widgets pueden ser relojes vistosos en pantalla, nota, calculadoras, calendarios, agendas o juegos [WIKIWIDG, 2009] ~ xii ~ CAPÍTULO 1 INTRODUCCIÓN En el presente capítulo se expone la problemática que se abordó, el objetivo, la justificación, beneficios, alcances y limitaciones del proyecto de tesis. Además se muestra la investigación del estado del arte realizado y la organización general del documento. Capítulo 1 Introducción 1.1. Introducción Desde hace muchos siglos el hombre ha representando su entorno a través de mapas plasmados en materiales como: tablillas de arcilla, seda y papel. A través de los años los métodos de representación de mapas fueron mejorando y dieron lugar a la ciencia que hoy se conoce como la ciencia cartográfica. Gracias a los avances tecnológicos y científicos que se han desarrollado en las últimas décadas, la cartografía ha mejorado de manera sorprendente con la incorporación de nuevas tecnologías denominadas Sistemas de Información Geográfica (GIS, Geographic Information System por sus siglas en inglés), los cuales han permitido que las aplicaciones y utilidades informáticas visualicen mapas geográficos de diferentes temáticas y permitan realizar consultas espaciales a través de la computadora. Por otro lado, Internet se ha convertido en un medio ideal para la publicación de mapas geográficos, esto ha sido posible gracias al surgimiento de los Servicios de Mapas por Internet (WMS, Web Map Service por sus siglas en inglés), quienes han permitido publicar mapas digitales en formatos vectorial y ráster (en el capítulo 2 de marco teórico se describen cada uno de estos formatos). En particular, los mapas vectoriales, antes de ser publicados pasan por un proceso de estilización en el que se asignan propiedades como color, tamaño y estilo a cada uno de los elementos representados en el mapa (por ejemplo: puntos, líneas y polígonos). Dicho proceso se convierte en una tarea compleja debido a que no existen herramientas que permitan estilizar mapas en un ambiente Web, por lo que el diseñador de mapas se vale de herramientas de escritorio que a menudo suelen ser muy complicadas. Por lo anterior y para dar una solución estándar (siguiendo la especificación SLD de la OGC), surge la idea de crear una herramienta de software estilizadora de mapas que demuestre, que es posible crear estilos personalizados por el diseñador de manera sencilla. Estos estilos se verán reflejados mediante un archivo SLD basado en XML, el cual describirá detalladamente los estilos aplicados a cada uno de los puntos, líneas y polígonos representados en un mapa vectorial. Como resultado, se obtendrá un archivo SLD independiente del mapa vectorial visualizado, el cual será asociado al mapa base al momento de ser publicado en un Servidor de Mapas. 1.2. Descripción del problema Existen herramientas de escritorio y APIs tanto propietarias como libres para la creación y estilización de mapas. Lo que respecta a las herramientas de escritorio gratuitas, proporcionan al usuario funciones para la consulta, edición y creación de planos. Son herramientas complejas de utilizar y requieren instalarse en la máquina local. En cuanto a las APIs de código abierto, proporcionan funciones que permiten manipular y visualizar mapas en Internet, pero no se ha encontrado una aplicación que implemente funciones destinadas a la estilización de mapas utilizando un API de código libre. Es por lo anterior que el problema que dio origen a la presente tesis se centra en que no se han encontrado aplicaciones Web que contengan tanto mapas geográficos como interfaces que permitan diseñar la apariencia del mapa y la interacción con el mismo, debido a la falta de aplicaciones que faciliten y automaticen la integración de estas dos cosas. Página 2 Capítulo 1 Introducción 1.3. Objetivos Contribuir a la creación de prototipos de aplicaciones Web de forma rápida, mediante la implementación de una herramienta de software que proporcione servicios que permitan diseñar la apariencia e interacción con mapas temáticos utilizando el estándar XML y APIs de código abierto que incluyan servicios de acceso a servidores de mapas. El diseño y la implementación de esta herramienta deben proporcionar servicios de interacción asíncronos (AJAX) para optimizar la solicitud de mapas vectoriales a los servidores de mapas. Objetivos específicos: Seleccionar un servidor de mapas de software libre con la finalidad de utilizarlo como gestor de mapas. Utilizar componentes que permitan la interacción con mapas, por ejemplo, zoom in, zoom out y paneo. Colaborar con la configuración de objetos contenidos en mapas, como son: texto, polígonos, líneas y puntos. A estos objetos se les deben definir el color, ancho de línea, tipo de línea, contorno de las líneas de polígonos, color de relleno, nivel de transparencia, y tipo de letra. Generar de forma automática un archivo XML que describa los estilos que definen la apariencia del mapa. Realizando esto de acuerdo a las propiedades asignadas a los objetos punto, línea, polígono y texto del mapa 1.4. Justificación De acuerdo a estadísticas publicadas por la Asociación Mexicana de Internet (AMIPCI), el uso de la industria de Internet en México se mantiene en crecimiento. Según el estudio realizado en el rubro de comercio electrónico, el crecimiento registrado del año 2006 al 2007 fue de un 78% equivalente a un importe de 955 millones de dólares en ventas electrónicas. Pronosticando un 70% de crecimiento para el año 2008 (ver figura 1.1). Figura 1.1. Estudio del uso de comercio electrónico en México. FUENTE: Asociación Mexicana de Internet (AMIPCI) Página 3 Capítulo 1 Introducción Lo anterior pone en evidencia que el desarrollo y uso de aplicaciones Web han mantenido su crecimiento y con el pasar de los años, van buscando información más precisa en términos de datos de ubicación que enriquezcan y visualicen sus servicios. Con los avances tecnológicos actuales, es posible mostrar esta información a través de mapas para que los usuarios puedan fácilmente ubicar y visualizar objetos, lugares de interés además de otros servicios vía Web dependiendo de la temática del mapa. Para realizar esto, existen APIs y herramientas disponibles en la Web de manera gratuita que proporcionan el servicio de visualización de mapas. La importancia de los mapas va desde saber donde se encuentra cierto servicio, hasta el de salvar la vida a toda una población. Por ejemplo, un mapa de carreteras es una guía que proporciona información de cómo llegar a otro lugar, un mapa meteorológico ayuda a los científicos a ubicar dónde y hacia dónde van los huracanes, tornados, incendios, etc. Y con ello poder alertar a la gente para que evacuen las zonas de riesgos y se salven vidas. Por naturaleza el ser humano diferencia objetos por su forma, tamaño y también por su color. Por ello la interpretación de un mapa no es sencilla si no posee colores y claves que describan los objetos utilizados en un mapa. En particular la presente tesis se enfocó en la aplicación de estilos a objetos punto, línea, polígono y texto de mapas vectoriales. Por otra parte, desde el enfoque del diseñador de aplicaciones Web, existen aspectos importantes que se mencionan a continuación y dieron pauta a la factibilidad de esta investigación. Para crear un mapa con las APIs disponibles de código abierto, se requiere de asimilar cada una de ellas y después utilizar sólo las funciones que se necesiten de la API elegida. En esta parte se requiere de tiempo suficiente para poder conocer la API e implementar el código que permitirá la visualización del mapa. Una vez que se tienen los mapas visualizados, resulta necesario diseñar la apariencia del mapa de acuerdo a las necesidades que se presenten. Esta etapa resulta una limitante más, que retarda la realización de mapas de manera rápida, pues la edición se hace de forma manual insertando líneas de código en un archivo XML. Existen herramientas de escritorio que permiten diseñar la apariencia de mapas geográficos, pero estas herramientas aplican el estilo directamente en los archivos vectoriales. La desventaja de esto es que si un usuario modifica el estilo del mapa a sus necesidades, otro usuario que utilice el mismo mapa visualizará las modificaciones del usuario anterior. 1.5. Beneficios El beneficio principal que se obtuvo de la presente tesis es una aplicación Web que proporciona las siguientes funciones: Componentes de estilo: estos componentes permiten aplicar estilos definidos por el usuario a objetos tipo punto, línea, polígono y texto de un mapa. Todo esto haciéndolo de manera transparente para el usuario, es decir, sin tener que introducir ni una sola línea de código. Página 4 Capítulo 1 Introducción Generación de archivo SLD: la estilización aplicada al mapa se refleja en un archivo XML que cumple con la especificación SLD definida por la OGC. Publicación del mapa en la Web: permite que el usuario al terminar de estilizar el mapa, pueda seleccionar una plantilla de un catálogo de aplicaciones Web para que el usuario publique su mapa estilizado. Solicitud de mapas a un servidor de mapas: la aplicación se comunica con un servidor WMS para conocer los mapas y sistemas de referencias que provee. Esto con el objetivo de construir un catálogo de mapas ordenado que se le proporciona al usuario para elegir los mapas que desea estilizar. 1.6. Alcances del proyecto de tesis El trabajo de tesis tiene los siguientes alcances: Se proporciona una aplicación Web que utiliza funciones de un API de código libre para interactuar con mapas de manera que se puede hacer zoom in, zoom out, paneo y habilitar y deshabilitar capas. La aplicación Web desarrollada proporciona los siguientes servicios: o Un conjunto de componentes Web para la configuración de objetos contenidos en los mapas como son: texto, líneas, polígonos y puntos. A estos objetos geográficos se les puede definir color de línea, ancho de línea, tipo de línea, color de relleno de los polígonos, nivel de transparencia, tipo de letra entre otros. o Se permite generar un archivo XML que cumple con la especificación SLD el cual describe los estilos aplicados al mapa geográfico. o Se proporciona un catálogo de plantillas de aplicaciones Web el cual permite asociar el mapa estilizado con la plantilla para posteriormente publicarlo en Internet. La aplicación Web utiliza AJAX para la comunicación con el servidor de mapas y está programada siguiendo el patrón MVC de java (struts) bajo la especificación J2EE para facilitar su mantenimiento. 1.7. Limitaciones del proyecto de tesis El trabajo de tesis contempla las siguientes limitaciones: La aplicación corre sobre plataformas convencionales (máquinas de escritorio, laptops y tablet’s pc). Los mapas manipulados en la aplicación son de tipo vectorial. La visualización de los mapas es en dos dimensiones. La aplicación no crea los mapas contenidos en el servidor de mapas. La temática de los mapas es de trazos carreteros y municipales. En la investigación no se contempla el desempeño y tiempos de respuesta de las APIs y servidores manipuladores de información espacial. La investigación se aboca únicamente a proyectos de software libre que administran información espacial. Página 5 Capítulo 1 Introducción 1.8. Estado de la práctica La investigación del estado de la práctica cubre dos aspectos: el primero es entender el contexto en el que se trabajó, para ello se hace una descripción sobre la clasificación de proyectos de software libre disponibles para la manipulación de información espacial. Y el segundo aspecto abarca la investigación de aplicaciones Web relacionadas con la presente tesis. Abordando el primer punto en la investigación del estado de la práctica se encontraron muchas herramientas manipuladoras de información espacial. Los proyectos que se encuentran en Geomática se clasifican en [MONTESINOS, 2007]: Proyectos del lado del servidor. En este grupo se encuentran los servidores de bases de datos geográficas, servidores de mapas y herramientas de metadatos. Proyectos del lado del cliente. Este rubro se conforma por clientes pesados (herramientas de escritorio) y clientes ligeros (APIs). Servidores de bases de datos geográficas Las bases de datos geográficas son similares a las relacionales con la diferencia que en la primera se puede almacenar geometría. La OGC proporciona la especificación Simple Features que describe el conjunto de tipos de datos y funciones que debe cumplir una base de datos geográfica. Dentro de este grupo en la parte de software libre se encuentran PostGIS, FireBird y MySQL Spatial (MySQL se ofrece con una licencia dual pues es GPL y es distribuido a las empresas con licencia propietaria). Servidores de mapas Los servidores de mapas permiten publicar cartografía en la Web para que los usuarios puedan interaccionar con información geográfica a través de Internet. La OGC proporciona la especificación Web Map Service que describe los servicios que debe proporcionar un servidor de mapas. Los proyectos de software libre que se han desarrollado para este grupo son UMN MapServer, GeoServer, Degree y MapGuide OpenSource [MONTESINOS, 2007]. Herramientas de metadatos Los servidores de catálogos son aplicaciones que permiten publicar en la red un conjunto de metadatos sobre diferentes conjuntos de datos. Estos catálogos son expuestos como un portal que permite hacer búsquedas mediante diferentes criterios. Los proyectos de software libre que se han desarrollado bajo este rubro son Geonetwork y CaMDEdit [MONTESINOS, 2007]. Clientes pesados Los clientes pesados son todas las aplicaciones de escritorio que han sido útiles para la gestión de información geográfica. Las funciones que se tienen con estas herramientas son las de edición, análisis y explotación de información geográfica. Existen muchos proyectos de software libre en esta clasificación pero los más representativos son: Grass, Quantum GIS, Página 6 Capítulo 1 Introducción gvSIG, Saga y Sextante, MapWindow, World Wind, Open Jump , Kosmo, ILWIS y uDig [MONTESINOS, 2007]. Clientes ligeros Los clientes ligeros surgieron con la aparición de los servidores de mapas. Proporcionan un conjunto de componentes o funciones que permiten a los desarrolladores de aplicaciones Web crear páginas Web o aplicaciones Web con contenido espacial. Los proyectos más representativos desarrollados bajo este rubro son: Ka-Map, Chamelon, CartoWeb, OpenLayers, Mapbender, MapBuilder, msCross y WMS Java Script Library [MONTESINOS, 2007]. En la figura (1.2) se muestra de manera ilustrativa la clasificación mencionada anteriormente. Figura 1.2. Clasificación de la Geomática respecto al software libre De acuerdo a la clasificación anterior y tomando en cuenta los objetivos de la tesis. El presente trabajo de tesis abarca la parte de servidores de mapas y clientes ligeros. La segunda parte que conforma el estado de la práctica es la investigación de aplicaciones Web que se relacionan con la presente tesis. En este estudio se encontraron un gran número de aplicaciones Web que fueron desarrolladas en su mayoría utilizando la API de Google Maps y Yahoo Maps. Las diferencias más sobresalientes que se encontraron entre las aplicaciones fueron las temáticas que manejaban (clima, ruta de maratones, deportes, procedimientos electorales, lugares de pesca, etc.), ya que en todos los sitios se permitían hacer búsquedas sobre el mapa, calcular rutas e insertar puntos de interés (POIs), pero pocas aplicaciones permitía exportar los objetos insertados en el mapa a archivos KML. No se encontraron Página 7 Capítulo 1 Introducción aplicaciones que permitieran estilizar los objetos del mapa visualizado, sólo se facilitaban componentes que permitían dibujar líneas y polígonos sobre los mapas visualizados. A continuación se exponen algunas aplicaciones Web disponibles en Internet que permiten manipular información espacial, se describen sus característica más sobresalientes y se mencionan las desventajas que presentan con el presente trabajo. 1.8.1. Click2Map Es una aplicación Web que permite crear y publicar mapas de Google en línea. Cualquier persona con acceso a Internet puede crear1 y publicar sus mapas en Internet sin tener que codificar ni una sola línea de código [CLICK2MAP, 2008]. Servicios que proporciona: 1. Creación ilimitada de mapas con controles para manipularlo (“zoom in”, “zoom out”, “paneo” y visualización del mapa en satelital, vectorial e hibrido). 2. Inserción ilimitada de marcadores que se pueden añadir en el mapa y permite dibujar líneas y polígonos sobre el mapa con estilos definidos por el usuario. 3. Personalización de iconos de los marcadores. 4. Publicación del mapa como una página Web HTML. 5. Permite establecer cualquier mapa creado como widget ya que proporciona un pequeño código en HTML el cual se puede copiar y pegar en una página Web personal. 6. Si el usuario posee una cuenta de Adsense puede crear banners para poner anuncios sobre sus mapas. 7. Permite borrar los anuncios de la página Web generada. 8. Importa o exporta marcadores de CSV, KML, GeoRSS y archivos XML. 9. Proporciona un API Web en la que se pueden manipular los marcadores de los mapas en aplicaciones personales. Click2Map gestiona cuatro tipos de usuarios: bronze, silver, gold y platinium. Los usuarios de tipo bronze son aquellos que pueden utilizar el sistema de manera gratuita pero limitado a las primeras cuatro funciones presentadas en la lista anterior. Los usuarios tipo silver, gold y platinium son usuarios que pagan mensualmente una cantidad en dólares que van desde los $9 dólares hasta $39 dólares para gozar de los demás servicios. En la figura (1.3) se muestra la interfaz que proporciona la aplicación Click2Map. 1 El termino crear no significa que el usuario dibuja el mapa, sino que a partir de los mapas de Google el usuario elige que porción del mapa o extensión territorial desea visualizar en la página Web que genera click2map. Esa extensión territorial es un nuevo mapa que manipula la aplicación y por lo tanto lo considera como un mapa creado por el usuario. Página 8 Capítulo 1 Introducción Figura 1.3. Interfaz de usuario de Click2Map En la figura (1.4) se muestra el mapa creado en Click2Map y publicado en la Web. Figura 1.4. Publicación del mapa creado en Click2Map La principal desventaja de esta aplicación con la que se desarrolló, es que el usuario debe pagar una cantidad mensual para poder utilizar el mapa generado como widget de una página personal. Utiliza los mapas de Google y por lo tanto no los puede estilizar, lo único que puede realizar el usuario es insertar y administrar POIs personalizados. Página 9 Capítulo 1 Introducción 1.8.2. Map24 Es un buscador de direcciones disponible en la Web de manera gratuita [MAP24, 2008]. Servicios que proporciona: 1. Realiza búsquedas de direcciones y de puntos de interés. 2. Permite el cálculo de rutas. 3. Guarda un máximo de 10 direcciones en la libreta de direcciones de cada usuario. 4. Las direcciones antes de ser almacenadas pueden ser modificadas por el usuario. 5. Envía direcciones vía correo electrónico con un máximo de 10 remitentes. 6. Permite ver los mapas en tres dimensiones. 7. No permite agregar puntos de interés ni direcciones de empresas. 8. Proporciona dos tipos de mapas: estáticos y dinámicos. 9. Proporciona controles para manipular el mapa: “zoom in”, “zoom out”, “paneo” y visualización de mapas en formato ráster y vectorial. En la figura (1.5) se muestra la interfaz de map24. Figura 1.5. Interfaz de Map24 La desventaja de esta aplicación es que únicamente se enfoca a realizar búsquedas sobre el mapa y por lo tanto no ofrece el servicio de estilización y publicación de los mapas en una página Web que contengan el mapa estilizado. 1.8.3. ZoomIn Esta aplicación Web proporciona los siguientes servicios [ZOOMIN, 2007]: 1. Permite realizar búsquedas de direcciones. 2. Explora lugares cercanos a un punto. 3. Los usuarios inscritos pueden realizar comentarios acerca de un lugar. 4. Permite subir fotografías a un lugar en específico. Página 10 Capítulo 1 Introducción 5. Los usuarios pueden crear grupos o agregarse a uno existente. La desventaja que presenta este sitio es que no permite que los usuarios estilicen los mapas y que puedan usar estos mapas en una aplicación Web. Sólo se aboca a la inserción de puntos con documentos asociados. En la figura (1.6) se ilustra la interfaz de ZoomIn. Figura 1.6. Interfaz de ZoomIn 1.8.4. MapBuilder Es una aplicación gratuita vía Web que permite crear mapas de Google Maps. [MAPBUILDER, 2007]. Servicios que proporciona: 1. Búsquedas de direcciones sobre el mapa. 2. Añade marcas sobre el mapa especificando información acerca del punto como son: título, descripción, dirección, coordenadas y tipo de marca. 3. Genera código JavaScript y HTML para colocar el mapa en una aplicación Web personal. 4. Los mapas creados se guardan en la cuenta del usuario. 5. Proporciona mecanismos para manipular el mapa. (“zoom in”, “zoom out” y “paneo”) La figura (1.7) muestra la interfaz de ésta aplicación web. Página 11 Capítulo 1 Introducción Figura 1.7. Interfaz de MapBuilder Al igual que las aplicaciones anteriores MapBuilder se limita a realizar inserciones de marcadores sobre los mapas proporcionados por Google Maps y no permite cambiar las especificaciones de estilo de los mapas visualizados. 1.8.5. Google Maps API gratuita de Google lanzada el 6 de octubre de 2005 la cual ofrece las siguientes características [WIKIGMAPS, 2007]: Capacidad de hacer acercamientos y alejamientos para mostrar el mapa. Permite hacer búsquedas de direcciones. Calcular la ruta optima entre dos puntos. Ride Finder (ubicador de vehículo) en el cual una persona puede ubicar un taxi o un transporte público en una gran ciudad en tiempo real. Además de lo anterior permite integrar los mapas en sitios Web que usan JavaScript. Se pueden dibujar marcadores y líneas sobre el mapa. [GOOGLEMAPS, 2007] La principal desventaja de esta aplicación, es el de la estilización personalizada de los mapas, ya que Google Maps no permite que los usuarios cambien las propiedades de color y tamaño de los objetos que se muestran en el mapa. En la figura (1.8) se muestra la interfaz de Google Maps. Página 12 Capítulo 1 Introducción Figura 1.8. Interfaz de Google Maps 1.8.6. Yahoo Maps Es una aplicación libre en línea que ofrece los siguientes servicios [YAHOOMAPS, 2007]: 1. Realizar búsquedas en los mapas proporcionados por Yahoo. 2. Visualizar el tránsito en vivo sobre las ciudades. 3. Guardar el mapa en una página Web asociada a la cuenta del usuario. 4. Enviar el mapa por correo electrónico. 5. Imprimir los mapas. La disponibilidad de estos servicios abarca Estados Unidos y Canadá. La desventaja de esta herramienta con respecto a la que se implementó es que Yahoo Maps no permite la estilización de los mapas en línea y sólo se pueden consultar los mapas que provee por default. En la figura (1.9) se muestra la interfaz de Yahoo Maps. 1.8.7. Live Search Maps Es una aplicación Web desarrollada por Microsoft y sus principales funciones son [MICROSIFTLIVE, 2008]: 1. Visualiza imágenes en 2D y 3D (si se instala un plugin) 2. Permite insertar puntos de interés, dibujar líneas y polígonos definiendo un estilo personalizado y exportar estos objetos a un archivo KML. 3. Realiza búsquedas de direcciones. 4. Calcula la ruta más corta entre dos puntos. En la figura (1.10) se muestra la interfaz de Virtual Earth. Página 13 Capítulo 1 Introducción Figura 1.9. Interfaz de Yahoo Maps Figura 1.10. Interfaz de Virtual Earth A continuación en la tabla (1.1) se muestra la comparativa de los trabajos relacionados con el trabajo de tesis, el cual a partir de aquí se le hará referencia con el nombre de MapWeb Designer (Design of maps in web). Página 14 Capítulo 1 Introducción Tabla 1.1. Comparativa de las aplicaciones Web estudiadas con la propuesta. Aplicaciones Web Visualización de mapas Click2Map Sí Map24 ZoomIn Map Builder Sí Sí Sí Google Maps Sí Yahoo Maps Sí Live Search Maps Sí MapWeb Designer (TESIS) Sí Estilización de LINEAS del mapa basado en XML Estilización de POLIGONOS del mapa basado en XML Estilización de TEXTO del mapa basado en XML Publicación del mapa en una página Web elegida por el usuario No, sólo dibuja líneas con estilos definidos por el usuario No, sólo dibuja polígonos con estilos definidos por el usuario. No Si, publica el mapa pero el usuario no elige la página Web No No No No No No No No No No No Sí No No No Sí No No, sólo dibuja líneas sobre el mapa y los exporta a KML No No, sólo dibuja polígonos sobre el mapa y los exporta a KML No Sí No No Sí Sí Sí Sí Estilización de PUNTOS del mapa basado en XML No, sólo permite la personalización de POIs insertados sobre el mapa No No No No, utiliza KML para describir los POIS insertados No No, únicamente inserta puntos de interés y los exporta a KML Sí 1.9. Organización del documento Los siguientes capítulos del documento de tesis se organizan de la siguiente manera: Capítulo 2 Marco Teórico. Se describen los conceptos teóricos sobre las tecnologías involucradas en el desarrollo de la tesis. Capítulo 3 Análisis y Diseño. En este capítulo se describe la fase de análisis y diseño realizado y para ello se presentan los casos de uso, diagramas de actividad, diagramas de clases y diagramas de secuencia que se requirieron para el desarrollo del sistema. Capítulo 4 Implementación. Se explica el funcionamiento general del sistema. Capítulo 5 Pruebas. Se presentan los resultados de las pruebas realizadas al sistema. Capítulo 6 conclusiones. En este capítulo se presentan las conclusiones, aportaciones de la tesis y los trabajos futuros. Al final del documento se presenta la sección de anexos los cuales se organizan como sigue: en el anexo A se describe la evaluación de las APIs de código libre. En el anexo B se muestra la evaluación de los servidores de mapas, en el anexo C se presenta el modelo de objetos y el modelo de clases del documento SLD, en el anexo D se expone la especificación SLD y en el anexo E se presenta el plan de pruebas. Página 15 Capítulo 1 Introducción Página 16 CAPÍTULO 2 MARCO TEÓRICO En este capítulo se describen conceptos elementales de las tecnologías involucradas en el desarrollo de la presente tesis. Capítulo 2 Marco Teórico 2.1. Sistemas de Información Geográfica Un Sistema de Información Geográfica (GIS, en su acrónimo inglés) es un sistema informático integrado que permite el almacenamiento, mapeo, manipulación y análisis de datos geográficos o espaciales. Puede presentar la información en diferentes capas temáticas almacenándolas de manera independientemente, permitiendo trabajar con ellas de manera rápida y sencilla, y facilitando al profesional la posibilidad de relacionar la información existente a través de la topología de los objetos, con el fin de generar otra nueva que no se podría obtener de otra forma [VON, 2005]. En la figura (2.1) se observan varias capas que son puestas unas sobre otras para poder representar con mayor exactitud a la realidad. Figura 2.1. Capas que representan la realidad Los sistemas de información geográfica requieren de varios componentes para poder funcionar correctamente. Estos componentes son una colección organizada de hardware, software, datos geográficos y personal. Diseñados para capturar, almacenar, manipular, analizar y desplegar en todas sus formas la información geográficamente referenciada con el fin de resolver problemas complejos de planificación y gestión [VON, 2005]. Hardware. Es el equipo donde opera el GIS. Hoy en día los programas GIS se pueden ejecutar en gran número de equipos que van desde servidores hasta computadoras portátiles usados en red o trabajando en modo desconectado [CARMONA, 2007]. Software. Los programas GIS proveen las funciones y las herramientas necesarias para almacenar, analizar y desplegar la información geográfica. Los principales componentes de los programas son [CARMONA, 2007]: Herramientas para la entrada y manipulación de la información geográfica. Un sistema de manejador de base de datos (DBMS) Herramientas que permitan búsquedas geográficas, análisis y visualización. Interface gráfica para el usuario (GUI) para acceder fácilmente a las herramientas. Página 18 Capítulo 2 Marco Teórico Datos geográficos. La parte más importante de un sistema de información geográfico son sus datos. Los datos geográficos y tabulares pueden ser adquiridos por quien implementa el sistema de información, así como por terceros que ya los tienen disponibles. El sistema de información geográfico integra los datos espaciales con otros recursos de datos y puede incluso utilizar los manejadores de base de datos más comunes para manejar la información geográfica [CARMONA, 2007]. Personal. La tecnología de los GIS está limitada si no se cuenta con el personal que opera, desarrolla y administra el sistema y que establece planes para aplicarlo en problemas del mundo real [CARMONA, 2007]. Una segunda definición más concreta es la que se proporciona en [LBSPRO, 2007]: Un sistema de información geográfico brinda funcionalidades para análisis y consultas espaciales. Los tipos de preguntas que puede responder un GIS son las siguientes [LBSPRO, 2007]: ¿Qué se encuentra en...? (Pregunta de ubicación. Qué existe en una ubicación particular) ¿Dónde está...? (Pregunta condicional. Qué ubicación satisface ciertas condiciones) ¿Cuáles datos están relacionados...? (Pregunta relacional. Analiza la relación espacial entre objetos de atributos geográficos) ¿Qué pasaría si...? (Pregunta de simulación. Computa y despliega una ruta óptima, un terreno apropiado, una área de riesgo para desastres basado en un modelo) Existen dos tipos de información que manipulan los sistemas GIS: Información ráster. Información vectorial. 2.1.1. Información ráster [SARRIA,2007] El modelo de GIS ráster o de retícula se centra en las propiedades del espacio más que en la precisión de la localización. Divide el espacio en celdas regulares donde cada una de ellas representa un único valor. Una capa en formato ráster está compuesta por cuatro elementos fundamentales: La matriz de datos la cual se almacena en un archivo como una lista de valores numéricos. Información geográfica acerca de la matriz de datos y de su posición en el espacio (número de columnas, número de filas, coordenadas de las esquinas de las capas y resolución o tamaño de pixel en latitud y en longitud). Tabla de colores que permite decidir de qué color se pintará cada celdilla en la pantalla. En el formato ráster cuanto mayor sean las dimensiones de las celdas (resolución) menor es la precisión o detalle en la representación del espacio geográfico. En la figura (2.2) se muestra cómo se organiza la información ráster y en la figura (2.3) se ilustra con mayor detalle la organización de la información contenida en un pixel de una imagen rasterizada. Página 19 Capítulo 2 Marco Teórico Figura 2.2. Organización de la información en el modelo de datos ráster Figura 2.3. Información de un pixel 2.1.2. Información vectorial Al contrario de lo que ocurre en el formato ráster, el formato vectorial define objetos geométricos (puntos, líneas y polígonos) mediante la codificación explícita de sus coordenadas. Los puntos se codifican en formato vectorial por un par de coordenadas en el espacio, las líneas como una sucesión de puntos conectados y los polígonos como líneas cerradas o como un conjunto de líneas que constituyen las diferentes fronteras del polígono. Este formato resulta especialmente adecuado para la representación de entidades reales ubicadas en el espacio (carreteras, ríos, parcelas de cultivo). El formato ráster resulta más adecuado cuando se manejan datos que suponen un valor promediado sobre una extensión territorial que se considera homogénea, por ejemplo estadísticas municipales, clima, zonas de riesgo [SARRIA, 2007]. En la figura (2.4) se ilustran los objetos geométricos utilizados por el formato vectorial. Figura 2.4. Objetos geométricos del formato vectorial Página 20 Capítulo 2 Marco Teórico 2.2. Open Gesospatial Consortium (OGC) El Open Geospatial Consortium (OGC)es un consorcio internacional de la industria conformado por 369 compañías, agencias gubernamentales y universidades que participan en un proceso de consenso para desarrollar especificaciones de interconexión disponibles al público. Las especificaciones OpenGis soportan soluciones interoperables para sistemas de información geográfica y sistemas basados en localización con el objetivo de que los desarrolladores de este tipo de tecnologías creen servicios e información espacial útiles y disponibles a toda clase de aplicaciones [OGC, 2008]. Del conjunto de especificaciones que define la OGC, la especificación Styled Layer Descriptor (SLD) y la Web Map Service fueron las que se estudiaron para desarrollar la presente tesis. 2.2.1. Web Map Service(WMS) Un Web Map Service (WMS por sus siglas en inglés) produce mapas en forma dinámica a partir de información geográfica vectorial o ráster presentando la información como imágenes digitales susceptibles de ser visualizadas en pantalla. La visualización de la imagen suele ser en formato ráster: PNG, GIF o JPEG, y ocasionalmente, se representan como información vectorial en formato Scalable Vector Graphics (SVG) o Web Computer Graphics Metafile (WebCGM). Los mapas visualizados pueden sobreponerse unos a otros, siempre y cuando los parámetros geográficos y tamaño de salida sean los mismos. El uso de formatos que permiten fondo transparente (por ejemplo GIF y JPEG) facilita la visualización simultánea de estos mapas. Un WMS, acepta peticiones HTTP de aplicaciones cliente. La petición HTTP contiene la solicitud de un mapa siguiendo la especificación WMS definida por la OGC. El WMS procesa la solicitud y responde con el correspondiente mapa codificado en el formato indicado en la petición y con el estilo de visualización solicitado. [BRISABOA, 2007] Las peticiones HTTP pueden ser tipo GET o POST. Un servidor puede ofrecer uno o ambos métodos siendo la petición GET una petición obligatoria y la petición POST una petición opcional hablando en términos de implementación de WMSs. De acuerdo a la especificación URL (IETF RFC 2396) se reservaron un conjunto de caracteres especiales que estructuran la cadena de la petición al WMS. A continuación en la tabla (2.1) se describe el significado de cada caracter especial introducido en la URL de la petición HTTP. Tabla 2.1. Caracteres reservados en WMS para una cadena de consulta Fuente: tomado de [OGC, 2002] Caracter Uso Reservado Indica el inicio de la cadena de consulta. ? Separador entre parámetros de la cadena de & consulta. Indica la separación entre el nombre y valor de = un parámetro. Página 21 Capítulo 2 Marco Teórico / : , Separador entre tipo MIME y subtipo en formato parámetro valor. Separador entre nombres de espacio y el identificador de los SRS. Separa valores individuales en la lista de parámetros (como BBOX, LAYERS y STYLES en una solicitud GetMap). 2.2.2. HTTP GET [OGCWMS, 2002] Para realizar una petición GET, debe indicarse la URL del servicio junto con los parámetros adicionales que se deseen añadir. La estructura es: http ó https, seguido del nombre de la máquina o una dirección numérica, opcionalmente se indica el número de puerto, y finalmente la ruta y el signo de interrogación “?”, el cual es obligatorio. Los parámetros del servicio se añaden después del signo de interrogación finalizando con un “&”. Cada operación está formada por parámetros obligatorios y otros optativos que puede ejecutarse desde cualquier navegador. En la tabla (2.2) se describe cómo se debe estructurar la cadena de solicitud de mapas utilizando el método GET. Tabla 2.2. Estructura de petición HTTP GET Fuente: tomado de [OGCWMS, 2002] Componente URL Descripción http://host[:port]/path[?{name[=value]&}] URL prefijo de operación del servicio. [] Denotan 0 ó 1 ocurrencias de una parte opcional; {} denotan 0 o más ocurrencias. name=value& Uno o más parámetros de nombre/valor, tal como se define para cada operación. Un ejemplo de solicitud GET de un mapa es la siguiente [DIGECA, 2008]: http://ovc.catastro.meh.es/Cartografia/WMS/ponenciasWMS.aspx?SERVICE=WMS&SRS=EPSG:23 030&REQUEST=GETMAP&bbox=426500,4448300,430500,4451300&width=400&height=300&forma t=PNG&transparent=No El resultado de la petición anterior se ilustra en la figura (2.5). Página 22 Capítulo 2 Marco Teórico Figura 2.5. Resultado de solicitud GET a un WMS Fuente: Tomado de [DIGECA, 2008] 2.2.3. HTTP POST Cuando se utiliza este método, el mensaje de solicitud es formulado en un documento XML. Ejemplo [CSGRIP, 2008]: Para realizar la petición HTTP POST se requiere enviar desde un formulario la URL del servicio y el documento XML que describa los parámetros de la solicitud. En la figura (2.6) se muestra el código del formulario que enviará la solicitud HTTP POST y en la figura (2.7) se muestra la ejecución del formulario en el que se ingresa la URL del servicio y el código XML que describe los parámetros de la solicitud. Una vez enviada la petición al servidor, éste procesa la solicitud y regresa como resultado el mapa que se muestra en la figura (2.8). Página 23 Capítulo 2 Marco Teórico Figura 2.6. Código HTML de formulario para manejo de petición POST Fuente: tomado de [CSGRIP, 2008] Figura 2.7. Envío de petición HTTP POST Fuente: tomado de [CSGRIP, 2008] Página 24 Capítulo 2 Marco Teórico Figura 2.8. Resultado de la petición HTTP POST 2.2.4. Operaciones WMS [OGCWMS, 2002] El estándar WMS define dos modos de operar: WMS básico y WMS de consulta. El WMS básico debe soportar los elementos básicos de servicio (versión, peticiones y respuestas HTTP, valores numéricos y booleanos, determinados formatos de salida, sistemas de coordenadas, parámetros de consulta y de respuesta, y excepciones), la operación GetCapabilities y la operación GetMap. Clasifica la información que posee en capas y ofrece un número determinado de estilos, con los cuales se pueden visualizar dichas capas. Este estándar internacional WMS únicamente soporta capas y estilos definidos, no incluye mecanismos de simbolización por parte del usuario. El WMS de consulta debe satisfacer todos los requerimientos de un WMS básico y también soportar la operación GetFeatureInfo. A continuación se describen las operaciones soportadas por los WMSs. GetCapabilities (Obligatoria) GetCapabilities ofrece información humanamente legible acerca de las características del servicio (metadatos), es decir, permite obtener metadatos acerca del WMS implementado, de las funcionalidades soportadas por el servicio, e información específica sobre las capas de información geográfica disponibles. La información es devuelta al cliente codificada en un documento XML. Los parámetros para realizar la petición GetCapabilities se muestran en la tabla (2.3). Tabla 2.3. Parámetros para la solicitud GetCapabilities Fuente: tomado de [OGCWMS, 2002] Parámetro de solicitud Obligatoriedad Descripción VERSION=versión Opcional Versión de la especificación OGC. Tipo de servicio al que va dirigida la SERVICE=WMS Obligatorio petición. Página 25 Capítulo 2 Marco Teórico REQUEST=GetCapabilities Obligatorio UPDATESEQUENCE=string Opcional Nombre de la operación. Secuencia de números o cadena de caracteres para el control de la consistencia del caché. Este valor se incrementa cuando se realizan cambios en el “Capabilities”. Ejemplo [CSGWMS2008]: A continuación se muestra la solicitud de las características del servicio “IDEE-Base”. El resultado de la petición se observa en la figura (2.9). http://www.idee.es/wms/IDEE-Base/IDEEBase?VERSION=1.1.0&REQUEST=GetCapabilities&SERVICE=WMS Figura 2.9. Resultado de la petición GetCapabilities GetMap (Obligatoria) Esta operación proporciona como resultado un mapa el cual refleja una imagen de los datos almacenados. La tabla (2.4) describe cada parámetro necesario para realizar una petición GetMap. Tabla 2.4. Parámetros para la solicitud GetMap Fuente: tomado de [OGCWMS, 2002] Parámetro de solicitud Obligatoriedad Descripción VERSION REQUEST=GetMap LAYERS=lista de capas Obligatorio Obligatorio Obligatorio STYLES=lista de estilos Obligatorio SRS=namespace:identificador Obligatorio Versión de la especificación OGC. Nombre de la petición. Lista de una o más capas, separadas por comas. Estilo de visualización por capa requerida, separados por comas. Sistema de Referencia Espacial. Página 26 Capítulo 2 Marco Teórico Esquinas de ámbito (inferior izquierda, superior derecha) en unidades SRS. WIDTH=ancho Obligatorio Ancho del mapa en pixeles. HEIGHT=alto Obligatorio Alto del mapa en pixeles. FORMAT=formato de salida Obligatorio Formato de salida del mapa. Transparencia del fondo del mapa TRANSPARENT=TRUE|FALSE Opcional (default=FALSE). Valor del color de fondo RGB en Hexadecimal BGCOLOR=color_value Opcional (default=0xFFFFFF). Formato en el que el WMS informa de las EXCEPTOPNS=exceptions_format Opcional excepciones (default=XML). TIME=time Opcional Valor del tiempo en las capas deseadas. ELEVATION=elevation Opcional Elevación de las capas deseadas. Los siguientes parámetros son utilizados sólo por WMSs que soportan la especificación SLD SLD=url del sld Opcional URL del documento SLD. Estilo definido por el usuario codificado de SLD_BODY=sld codificado Opcional manera que pueda enviarse por la URL. URL del Web Feature Service para proporcionar WFS=url del wfs Opcional características de simbolización mediante SLD. BBOX=minx,miny,maxx,maxy Obligatorio Ejemplo [CSGWMS, 2008]: A continuación se muestra un ejemplo de solicitud en la que se pide visualizar las capas Relieve, Hidrografía y Transporte del servicio IDEE-Base. http://www.idee.es/wms/IDEE-Base/IDEEBase?VERSION=1.1.0&REQUEST=GetMap&LAYERS=Relieve,Hidrografia,transporte&STYL ES=default&SRS=EPSG:4230&BBox=3.4650655,40.4137,3.62939155,44.13107&WIDTH=1000&HEIGHT=1000&FORMAT=image/jpeg El mapa resultante se ilustra en la figura (2.10). Figura 2.10. Resultado de la petición GetMap Página 27 Capítulo 2 Marco Teórico GetFeatureInfo (Opcional) GetFeatureInfo es una operación que captura y proporciona información contenida en un mapa, tal como el valor de un objeto en una posición determinada. Es sólo soportada por aquellas capas que tienen el atributo queryable=1 que ha sido definido o heredado. Un cliente no puede emitir una solicitud GetFeatureInfo para capas que tienen el atributo queryable=0. En la tabla (2.5) se describe los parámetros para realizar una petición GetFeatureInfo. Tabla 2.5. Parámetros para la solicitud GetFeatureInfo Fuente: tomado de [OGCWMS, 2002] Componentes Obligatoriedad Descripción VERSION=versión REQUEST=GetFeatureInfo Obligatorio Obligatorio Parámetros del mapa Obligatorio QUERY_LAYERS=lista de capas Obligatorio INFO_FORMAT=formato de salida Opcional FEATURE_COUNT=número Opcional X=pixel_column Obligatorio Y=pixel_row Obligatorio EXCEPTIONS=exception_format Opcional Versión de la especificación OGC. Nombre de la petición. Copia parcial de una petición de mapas que genera el mapa del cual se quiere obtener información. Lista de una o más capas, sobre las que se realiza la consulta, separadas por comas. Formato de respuesta de la información sobre el objeto (MIME type). Número de objetos sobre los que se devuelve información (default=1). Coordenada X del objeto en el Mapa, en pixeles (medido desde la esquina superior izquierda=0). Coordenada Y del objeto en el Mapa, en pixeles (medido desde la esquina superior izquierda=0). Formato en el que el WMS informa de las excepciones (default=application/vnd.ogc.se.xml). Ejemplo [CSGWMS2008]: A continuación se muestra una solicitud HTTP GET que solicita las características de un vértice de la capa redroi (Red de Orden Inferior) situado en el pixel x=250, y=300 del servicio Sistema de Referencia. http://www.idee.es/wms/IDEE-Referencia/IDEEReferencia?SERVICES=WMS&VERSION=1.1.0&REQUEST=GetFeatureInfo&LAYERS=redro i&STYLES=default&SRS=EPSG:4230&BBox=-5.4650655,38.4137,1.62939155,42.13107&WIDTH=400&HEIGHT=500&FORMAT=image/png&OPAQUE&QUER Y_LAYERS=redroi&FEATURE_COUNT=1&X=250&Y=300 El resultado de la solicitud anterior se ilustra en la figura (2.11). Página 28 Capítulo 2 Marco Teórico Figura 2.11. Resultado de la petición GetFeatureInfo 2.2.5. Styled Layer Descriptor (SLD) [OGCSLD, 2002] Es una especificación de la OGC (ver anexo D) que permite producir mapas con estilos definidos por el usuario. Para poder utilizar esta especificación es necesario que el WMS soporte los SLD. Para conocer que un servidor de mapas soporta los SLD se requiere hacer una petición GetCapabilities y en el archivo de respuesta verificar que la etiqueta <UserDefinedSymbolization> contenga el atributo SupportSLD con valor de 1. Y en caso de que se requiera crear capas y estilos definidos por el usuario, los atributos UserLayer y UserStyle deben tener un valor de 1. Para introducir un estilo personalizado se utilizan dos parámetros: SLD: se guarda el nuevo estilo en formato XML y se le llama mediante una URL. Ejemplo: http://www.idee.es/BCN25OWS/ogcwebservice?REQUEST=GetMap&VERSION=1.1.0&SERVICE=WMS&SRS=EPSG:43 26&BBOX=-5.93125,37.33968,5.87504,37.3865&WIDTH=1000&HEIGHT=833&FORMAT=image/gif&SLD=http://www.idee.es/ SLD/prueba.xml SLD_BODY: incluye el archivo que define el nuevo estilo. Para cargarlo es necesario codificar el texto XML de forma que pueda enviarse vía URL. http://www.idee.es/BCN25-OWS/ogcwebservice?REQUEST=GetMap&VERSION=1.1.0& SERVICE=WMS&SRS=EPSG:4326&BBOX=-5.93125,37.33968,-5.87504,37.3865&WIDTH= 1000&HEIGHT=833&FORMAT=image/gif&SLD_BODY=%3CStyledLayerDescriptor+version %3D%221%2E0%2E0%22%0D%0Axmlns%3D%22http%3A%2F%2Fwww%2Eopengis%2 Enet%2Fsld%22%0D%0Axmlns%3Axlink%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg% 2F1999%2Fxlink%22+xmlns%3Axsi%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F Página 29 Capítulo 2 Marco Teórico 2001%2FXMLSchema%2Dinstance%22%0D%0Axsi%3AschemaLocation%3D%22http%3A %2F%2Fschemas%2Eopengis%2Enet%2Fsld%2F1%2E0%2E0%2FStyledLayerDescriptor %2Exsd%22+xmlns%3Ase%3D%22http%3A%2F%2Fwww%2Eopengis%2Enet%2Fse%22 +xmlns%3Abcn%3D%22http%3A%2F%2Fwww%2Eign%2Ees%2Fbcn25%22%3E+%0D% 0A%3CNamedLayer%3E%0D%0A%3CName%3EViaComunicacionLinea%3C%2FName%3 E%0D%0A%3CUserStyle%3E%0D%0A%3CFeatureTypeStyle%3E%0D%0A%3Cse%3A FeatureTypeName%3Ebcn%3AViaComunicacionLinea%3C%2Fse%3AFeatureTypeName %3E%0D%0A%3CRule%3E%0D%0A%3CLineSymbolizer%3E%0D%0A%3CStroke%3E%0 D%0A%3CCssParameter+name%3D%22stroke%22%3E%23aaaaff%3C%2FCssParameter %3E%0D%0A%3CCssParameter+name%3D%22stroke%2Dwidth%22%3E5%2E0%3C%2F CssParameter%3E%0D%0A%3C%2FStroke%3E%0D%0A%3C%2FLineSymbolizer%3E% 0D%0A%3C%2FRule%3E%0D%0A%3C%2FFeatureTypeStyle%3E%0D%0A%3C%2F UserStyle%3E%0D%0A%3C%2FNamedLayer%3E%0D%0A%3C%2F StyledLayerDescriptor%3E El resultado de las peticiones anteriores es el mismo, lo que difiere es la forma de solicitar el mapa. En la figura (2.12) se muestra el resultado de las peticiones anteriores. Figura 2.12. Resultado de una petición al WMS utilizando el parámetro SLD y SLD_BODY 2.3. Elementos de programación 2.3.1. J2EE Aunque Java ofrece servicios muy potentes, el lenguaje Java por sí sólo no es capaz de conocer los requerimientos de un sistema empresarial, ya que se requiere de una plataforma capaz de proporcionar los siguientes servicios: Habilidad de almacenar datos en distintas bases de datos comerciales. Distribuir la aplicación en más de una computadora. Soportar transacciones. Soportar aplicaciones distribuidas multihilo. Página 30 Capítulo 2 Marco Teórico Por estas razones se define la especificación J2EE la cual permite diseñar y desarrollar aplicaciones empresariales de manera rápida. La especificación J2EE permite implementar aplicaciones empresariales usando Java y tecnologías de Internet y define los siguientes componentes: Los que se ejecutan en el cliente (clientes Web, applets y aplicaciones de escritorio). Los que se ejecutan en el servidor (Java Servlets y JavaServlet Pages). Componentes de negocio que se ejecutan en el servidor (Enterprise Java Beans). Los componentes J2EE se escriben en lenguaje Java y se compilan de la misma manera que cualquier programa. La diferencia entre componentes J2EE y clases Java estándar es que los primeros son agrupados en una aplicación J2EE. Se verifica que estén bien formados y que cumplan con la especificación J2EE y se despliegan en el servidor J2EE para ser controlados y gestionados [ARMSTRONG, 2007]. Una aplicación J2EE no está atada a un producto o interfaz de programación de un fabricante y puede constar de tres o cuatro niveles, como lo muestra la figura (2.13). Figura 2.13. Aplicaciones multinivel Fuente: tomado de [ARMSTRONG, 2007] 2.3.2. Patrón Modelo-Vista-Controlador [FERNANDEZ, 2004] Modelo-Vista-Controlador (MVC) es un patrón de diseño aportado por el lenguaje SmallTalk a la Ingeniería de Software con el objetivo de mejorar la reusabilidad. El paradigma MVC consiste en dividir las aplicaciones en tres partes: controlador, modelo y vista. El controlador es el encargado de redirigir o asignar una aplicación a cada petición; el controlador debe poseer de algún modo un mapa de correspondencias entre peticiones y respuestas. El modelo es la lógica de una aplicación. Una vez que se realizan las operaciones de lógica de negocio necesarias, se devuelve el flujo al controlador y éste devuelve los resultados a una vista asignada. La vista es el medio por el cual se muestran los resultados del modelo al usuario. Página 31 Capítulo 2 Marco Teórico El procesamiento del MVC se lleva a cabo entre los tres componentes. El controlador recibe una orden y decide quién la lleva a cabo en el modelo. Una vez que el modelo termina sus operaciones devuelve el flujo al controlador y éste envía el resultado a la capa de presentación (vista). En la figura (2.14) se ilustra la interacción entre el modelo, la vista y el controlador. Figura 2.14. Interacción del patrón MVC Fuente: tomado de [FERNANDEZ, 2004] En la actualidad se pueden encontrar diferentes implementaciones del patrón MVC y una de ellas es el Framework Open Source Struts de Java. Framework Open Source Struts [APACHE,2008] Struts es un framework OpenSource basado en Java que simplifica el desarrollo de aplicaciones Web e implementa el modelo MVC. Es compatible con la especificación J2EE y básicamente está construido sobre las tecnologías de servlets y JSPs. Utilizando Struts nunca se llega a una página de la capa de presentación directamente. Esto es, en la URL nunca se llega a una página JSP o HTML a través de su nombre. Funcionamiento de Struts El flujo que sigue Struts inicia cuando el navegador genera una solicitud. Ésta es atendida por el controlador (un servlet especializado). El mismo se encarga de analizar la solicitud, seguir la configuración programada en su XML (strutsconfig.xml) y llamar al Action correspondiente pasándole los parámetros enviados. El Action instanciará y/o utilizará los objetos de negocio (modelo) necesarios para concretar la tarea. Según el resultado que retorne el Action, el controlador derivará la generación de la interfaz (vista) a una o más JSPs, las cuales podrán consultar los objetos del modelo para mostrar información de los mismos. Página 32 Capítulo 2 Marco Teórico A continuación la figura (2.15) ilustra el flujo que sigue Struts. Figura 2.15. Funcionamiento de Struts Fuente: tomado de [FERNANDEZ, 2004] 2.3.3. JAVASCRIPT [EGUILUZ, 2008] JavaScript es un lenguaje de programación que se utiliza principalmente para crear páginas Web dinámicas. Una página Web dinámica es aquella que incorpora efectos como texto que aparece y desaparece, animaciones, acciones que se activan al pulsar botones y ventanas con mensajes de aviso al usuario. Técnicamente, JavaScript es un lenguaje de programación interpretado, por lo que no es necesario compilar los programas para ejecutarlos. En otras palabras, los programas escritos con JavaScript se pueden probar directamente en cualquier navegador sin necesidad de procesos intermedios. A pesar de su nombre, JavaScript no guarda ninguna relación directa con el lenguaje de programación Java. Legalmente, JavaScript es una marca registrada de la empresa Sun Microsystems. La integración de JavaScript y XHTML es muy flexible, ya que existen al menos tres formas para incluir código JavaScript en las páginas web. Incluir JavaScript en el mismo documento XHTML. <script type="text/javascript"> alert("Un mensaje de prueba"); </script> Definir JavaScript en un archivo externo. <script type="text/javascript" src="/js/codigo.js"></script> Incluir JavaScript en los elementos XHTML <p onclick="alert('Un mensaje de prueba')">Un párrafo de texto.</p> Página 33 Capítulo 2 Marco Teórico 2.3.4. AJAX [CRANE, 2006] Asynchronous JavaScript And XML (JavaScript y XML asíncronos), es un nombre relativamente reciente acuñado por Jesse James Garrett. Ajax es una técnica de desarrollo Web para crear aplicaciones interactivas. Éstas se ejecutan en el cliente, es decir, en el navegador del usuario, y mantiene comunicación asíncrona en segundo plano con el servidor. De esta forma, es posible realizar cambios sobre la misma página sin necesidad de recargarla. Esto significa aumentar la interactividad, velocidad y usabilidad en la misma. AJAX es una combinación de cuatro tecnologías ya existentes: JavaScript. JavaScript es un lenguaje scripting de propósito general diseñado para ser embebido dentro de aplicaciones. En un Web Browser, el intérprete de JavaScript permite la interacción con muchas de las capacidades incorporadas en los navegadores. Las aplicaciones de Ajax se escriben en JavaScript. Cascading Style Sheets (CSS). Las hojas de estilo ofrecen una manera para definir los estilos visuales reutilizables para los elementos de las páginas Web. Estos ofrecen un camino poderoso y simple para definir y aplicar uniformemente estilos visuales. En una aplicación Ajax, el estilo de una interfaz de usuario puede ser modificada a través de CSS. Document Object Model (DOM). El DOM presenta la estructura de páginas Web como un conjunto de objetos programables que pueden ser manipulados con JavaScript. El scripting de DOM permite a las aplicaciones Ajax modificar “al vuelo” las interfaces del usuario con gran eficacia rediseñando partes de la página. XMLHttpRequest. El objeto XMLHttpRequest permite intercambiar datos asincrónicamente con el servidor Web. En algunos frameworks y en algunas situaciones concretas, se usa un objeto iframe en lugar del XMLHttpRequest para realizar dichos intercambios. 2.3.5. XML [GUTIERREZ, 2000] XML es un estándar internacional desarrollado por un grupo de trabajo XML (conocido como el Comité de Revisión Editorial de SGML) formado bajo el auspicio del World Wide Web Consortium (W3C) en 1996. XML, lenguaje de marcas extensible (eXtensible Markup Language por sus siglas en inglés) es un metalenguaje extensible de etiquetas desarrollado por el World Wide Web Consortium (W3C). Es una simplificación y adaptación del SGML y permite definir la gramática de lenguajes específicos (de la misma manera que HTML es a su vez un lenguaje definido por SGML). Por lo tanto XML no es realmente un lenguaje en particular, sino una manera de definir lenguajes para diferentes necesidades. Algunos de estos lenguajes que usan XML para su definición son XHTML, SVG, MathML. Características básicas de XML XML se ha pensado para trabajar en la web. Una posible consecuencia es que puede utilizarse con protocolos y mecanismos que ya funcionan, como HTTP, MIME y los URL. No necesita ningún requerimiento adicional. Página 34 Capítulo 2 Marco Teórico Cualquier documento XML es compatible también con SGML, incluso la mayoría de las aplicaciones de SGML pueden convertirse en XML. Esta propiedad condiciona algunos aspectos de XML y hace que incluya algunas restricciones. A diferencia de otros lenguajes de marcado existentes, como los que utilizan la mayoría de los editores de texto, el marcado de XML, es perfectamente legible para los humanos. Esta característica implica que no se necesitan herramientas especiales para leerlos y modificarlos, bastan editores de textos básicos. El diseño de XML es formal y conciso. Muy al contrario de lo que ocurre con otras especificaciones como la de SGML y HTML, la especificación de XML es especialmente corta. Como base de la especificación de XML se ha utilizado una gramática clara concisa y compacta. La especificación junto con los estándares asociados (Unicode y ISO/IEC 10646 para caracteres, internet RFC 1766 para las marcas de identificación de lenguaje, ISO 639 para los códigos de nombre de lenguaje, ISO 3166 para los códigos de nombre de país), provee toda la información necesaria para entender XML versión 1.0. XML es un estándar internacional, lo que asegura su amplia difusión. XML es extensible, es aplicable a un sinfín de situaciones diferentes. XML sigue la tendencia actual en el mundo de la programación y es orientado a objetos. Página 35 Capítulo 2 Marco Teórico Página 36 CAPÍTULO 3 ANÁLISIS Y DISEÑO En este capítulo se detalla el análisis y diseño realizado para desarrollar el sistema. Para ello se presenta el documento de especificaciones y posteriormente los diagramas de casos de uso, diagramas de actividad, diagramas de secuencia y diagramas de clases. Capítulo 3 Análisis y Diseño 3.1. ANÁLISIS La obtención de los requisitos es parte de la fase de análisis del proceso de desarrollo de software. Esta fase se vale de todo un proceso de descubrimiento, refinamiento, modelado y especificación. Los requisitos son la descripción de los servicios proporcionados por el sistema. En esta sección, se expone el documento de especificación de requerimientos y los modelos (diagramas de casos de uso y diagramas de actividad) que se desarrollaron durante el análisis de requisitos con la finalidad de comprender mejor el sistema que se desarrolló. 3.1.1. Especificación de requerimientos A continuación se describen los requerimientos que se establecieron para el desarrollo del sistema. 3.1.1.1. Ámbito MapWeb Designer será una herramienta de software destinada a la generación de páginas Web que contengan mapas de tipo vectorial dentro de un entorno que integre la estilización de mapas geográficos con la publicación del mapa estilizado en la Web. Toda esta infraestructura estará diseñada para su funcionamiento en la Web y constará de cinco módulos principales: Control de usuarios. Componentes para la estilización de los mapas. Generación de código XML siguiendo el estándar SLD, el cual define la estilización de los mapas. Catálogo de plantillas Web. Publicación de páginas Web. 3.1.1.2. Perspectiva del producto A partir del problema y los objetivos planteados para esta tesis, se requiere el desarrollo de una herramienta generadora de prototipos de páginas Web, que contengan mapas geográficos y que facilite su estilización siguiendo las especificaciones de estilo definidos por la OGC. 3.1.1.3. Funciones del producto La herramienta MapWeb Designer deberá realizar las siguientes funciones básicas: 1. Gestión de usuarios. 2. Proporcionar componentes para el diseño y manipulación de mapas. 3. Proporcionar un catálogo de plantillas Web para la publicación del mapa. 4. Interacción con el servidor WMS para la recuperación de mapas, los cuales serán mostrados en el visor de mapas de MapWeb Designer. 5. Publicación de la aplicación Web. 3.1.1.4. Descripción de las funciones 1. Debido a que MapWeb Designer será una herramienta disponible en la Web, es necesario controlar el acceso de los usuarios que ingresen al sistema. Para realizar esto, Página 38 Capítulo 3 Análisis y Diseño los usuarios diseñadores de aplicaciones Web, tendrán la opción de registrarse al sistema y autentificarse una vez que se encuentren registrados. 2. Los componentes para la manipulación y diseño de mapas serán: a. Edición de líneas: el diseñador podrá personalizar líneas dentro del mapa, asignándole propiedades como color de línea, tipo de línea y ancho de línea. b. Edición de polígonos: el diseñador podrá personalizar los contornos de línea de los polígonos presentes en el mapa. Las propiedades que podrá personalizar son: el color del contorno de la línea, el ancho del contorno de la línea y el color de relleno del polígono. c. Edición de puntos: El diseñador podrá personalizar la apariencia de los puntos que contenga el mapa, es decir, podrá modificar su tamaño, color y orientación. d. Zoom in: será un componente que tanto el diseñador como el usuario final, podrán utilizar para hacer acercamientos sobre el mapa y así visualizar elementos pequeños. e. Zoom out: este componente será el que permitirá realizar alejamientos para tener una visión más general del mapa y podrá ser utilizado tanto por el diseñador como por el usuario final. f. Paneo: este componente facilitará al diseñador y al usuario final, el poder desplazarse a lo largo y ancho del mapa que estén manipulando. g. Generación de código XML: la herramienta generará un archivo XML que contendrá la estilización del mapa definida por el diseñador. Este archivo seguirá las especificaciones de estilo establecidas por la OGC. Para aumentar la interactividad con la aplicación, se utilizará AJAX para facilitar ésta tarea. 3. MapWeb Designer manejará una serie de plantillas de aplicaciones Web las cuales permitirán tener en diversas orientaciones el mapa estilizado. 4. MapWeb Designer tendrá la opción de interactuar con un servidor WMS (Web Map Service por sus siglas en inglés) para la recuperación de mapas. 5. Cuando el diseñador de la aplicación Web haya finalizado su tarea de diseño en MapWeb Designer, podrá publicar el mapa con la finalidad de que sea visible en la Web. Para realizar esta labor, el sistema tendrá que copiar los archivos correspondientes en el contenedor Web. 3.1.1.5. Usuarios de la herramienta a) Diseñador: es el encargado de diseñar la apariencia de los mapas, la interfaz de la aplicación Web y la publicación de la misma. b) Usuario final: se refiere a todos los usuarios que ingresan a través de la Web a las publicaciones realizadas por los diseñadores. 3.1.1.6. Limitaciones de la herramienta 1. Sólo se utilizarán herramientas de software libre. 2. La visualización de los mapas será en dos dimensiones. Página 39 Capítulo 3 Análisis y Diseño 3. 4. 5. 6. 7. 8. Únicamente se estilizarán mapas en formato vectorial. Se trabajarán con mapas de servicios municipales y/o servicios carreteros. La herramienta estará pensada para trabajar en plataformas convencionales. El manejador de la base de datos que se utilizará será PostgreSQL. La herramienta estará programada en Java siguiendo la especificación J2EE. El diseño de la apariencia de los mapas se verá reflejado en un archivo XML que siga la especificación SLD independiente, es decir, los archivos vectoriales no serán modificados, si no que se les asociará como capa o “mascara” la estilización contenida en el archivo SLD. 3.1.2. Diagramas de casos de uso y diagramas de actividad A continuación se muestran los diagramas de casos de uso y diagramas de actividad, los cuales ilustran la funcionalidad general del sistema que se desarrolló. En la figura (3.1) se muestra el diagrama de casos de uso general del sistema. Se consideraron como funciones principales las que a continuación se mencionan: 1. Registrar usuarios. 2. Autentificación de usuario. 3. Diseñar Mapa. 4. Elegir plantilla de diseño. 5. Publicar aplicación Web. 6. Visualizar aplicación Web. uc Principal Herramienta para la Generación de Estilos Definidos por el Usuario para su Asociación a Mapas Geográficos y Publicación en Prototipos de Aplicaciones Web CU-1 Registrar Usuario CU-2 Autentificar Usuario CU-3 Diseñar Mapa Diseñador CU-4 Elegir Plantilla de Diseño Usuario Final CU-5 Publicar Aplicación Web CU-6 Visualizar Aplicación Web Figura 3.1. Diagrama general de casos de uso del sistema Página 40 Capítulo 3 Análisis y Diseño 3.1.2.1. Caso de uso: Registrar Usuario La figura (3.2) muestra el caso de uso Registrar Usuario. Este caso de uso describe el proceso para registrar usuarios al sistema. La descripción del caso se muestra en la tabla (3.1) y su diagrama de actividad se ilustra en la figura (3.3). uc CU-1 Registrar Usuario CU-1 Registrar Usuario Diseñador Figura 3.2. Diagrama del caso de uso Registrar Usuario Tabla 3.1. Descripción de caso de uso Registrar Usuario ID: Nombre del caso de uso: Actores: Descripción: Precondiciones: Postcondiciones: Escenario de éxito 1: Escenario de fracaso 1: Escenario de fracaso 2: CU-1 El diagrama de actividades que incluye los escenarios de éxito y fracaso se muestra en la figura (3.3). Registrar Usuario Diseñador, MapWeb Designer Permite a los diseñadores registrarse en el sistema con el objetivo de obtener un nombre de usuario (login) y contraseña (password) para acceder al sistema MapWeb Designer. Los actores deberán de tener en su navegador la página principal de MapWeb Designer y dar clic en el botón Registrarse. Se insertarán los datos del diseñador en la base de datos PostgreSQL y cada usuario contará con un login y password personal. 1. El diseñador introduce datos personales. 2. El diseñador introduce el login y password deseado. 3. El sistema realiza la conexión con la base de datos. 4. El sistema busca en la base de datos un login idéntico al introducido por el diseñador. 5. El login no está duplicado por lo que el sistema registra los datos del diseñador en la base de datos. 6. Terminar proceso. 1. El diseñador introduce datos personales. 2. El diseñador introduce el login y password deseado. 3. El sistema realiza la conexión con la base de datos. 4. El sistema busca en la base de datos un login idéntico al introducido por el diseñador. 5. El sistema encuentra un usuario registrado con el login introducido por el diseñador y ocurre un error. 6. Notificar el error al diseñador. 7. Terminar proceso. 1. El diseñador introduce datos personales. 2. El diseñador introduce el login y password deseado. 3. El sistema realiza la conexión con la base de datos. 4. No es posible establecer conexión con la base de datos. 5. Se notifica el error. 6. Terminar proceso. Incluye: Suposiciones: Página 41 Capítulo 3 Análisis y Diseño act DA-CU1 Registrar Usuario Inicio Introducir datos personales Diseñador Introducir el login y passw ord deseado Notificar duplicación de login Notificar error Si MapWeb Designer No ¿Base de datos disponible? Realizar la conexión con la base de datos Si Buscar login duplicado ¿login duplicado? No Registrar datos en la base de datos Fin Figura 3.3. Diagrama de actividad de caso de uso Registrar Usuario 3.1.2.2. Caso de uso: Autentificar Usuario La figura (3.4) muestra el caso de uso Autentificar Usuario. La descripción del caso de uso se muestra en la tabla (3.2) y su respectivo diagrama de actividad en la figura (3.5). uc CU-2 Autentificar Usuario CU-2 Autentificar Usuario Diseñador Figura 3.4. Diagrama del caso de uso Autentificar Usuario Tabla 3.2. Descripción del caso de uso Autentificar Usuario ID: Nombre del caso de uso: Actores: Descripción: Precondiciones: Postcondiciones: Escenario de éxito 1: CU-2 El diagrama de actividades que incluye los escenarios de éxito y fracaso se muestra en la figura (3.5). Autentificar Usuario Diseñador, MapWeb Designer Permite que los diseñadores registrados ingresen al sistema MapWeb Designer una vez que hayan introducido su login y password correctos. Para ingresar al sistema el diseñador debe estar registrado en el sistema. Se logrará entrar al sistema MapWeb Designer. 1. El diseñador introduce el login. 2. El diseñador introduce el password. 3. El sistema realiza la conexión con la base de datos. 4. El sistema verifica que el login y password sean correctos. 5. El login y el password son correctos por lo que el sistema permite el acceso. 6. Terminar proceso. Página 42 Capítulo 3 Análisis y Diseño Escenario de fracaso 1: Escenario de fracaso 2: Incluye: Suposiciones: 1. 2. 3. 4. 5. 6. 1. 2. 7. 3. 4. 5. El diseñador introduce el login. El diseñador introduce el password. El sistema realiza la conexión con la base de datos El sistema verifica que el login y password sean correctos. El login y el password no son correctos por lo que el sistema rechaza el acceso. Terminar proceso. El diseñador introduce el login. El diseñador introduce el password. El sistema realiza la conexión con la base de datos. No es posible establecer conexión con la base de datos. Notificar error. Terminar proceso. Se supone que el diseñador ya se ha registrado en el sistema. act DA-CU2 Autentificar Usuario Inicio Diseñador Introducir Login Notificar error Introducir Passw ord Rechazar ingreso al sistema MapWeb Designer Realizar la conexión con la base de datos ¿Base de datos disponible? No No Si Validar login y passw ord ¿Login y password correctos? Si Ingresar al sistema Fin Figura 3.5. Diagrama de actividad de caso de uso Autentificar Usuario 3.1.2.3. Caso de uso: Diseñar Mapa La figura (3.6) presenta el caso de uso Diseñar Mapa y los casos de uso involucrados. Las descripciones de cada caso de uso se muestran en las tablas (3.3), (3.4), (3.5) y (3.6) y sus respectivos diagramas de actividad se muestran en las figuras 3.7, 3.8, 3.9 y 3.10. Página 43 Capítulo 3 Análisis y Diseño uc CU-3 Diseñar Mapa CU-3.1 Solicitar Mapa «include» CU-3 Diseñar Mapa CU-3.3 Generar Código XML Diseñador «include» «include» CU-3.2 Aplicar Estilos Figura 3.6. Diagrama del caso de uso Diseñar Mapa Tabla 3.3. Descripción de caso de uso Diseñar Mapa ID: Nombre del caso de uso: Actores: Descripción: Precondiciones: Postcondiciones: Escenario de éxito 1: Escenario de fracaso 1: Escenario de fracaso 2: Incluye Suposiciones: CU-3 El diagrama de actividades que incluye los escenarios de éxito y fracaso se muestra en la figura (3.7). Diseñar Mapa Diseñador, MapWeb Designer Permite a los diseñadores configurar opciones de estilo para estilizar un mapa. MapWeb Designer debe realizar la petición GetCapabilities al WMS para construir el catálogo de mapas y mostrarlo al diseñador para que elija el mapa que desea estilizar. El mapa a estilizar debe mostrarse en el visor de mapas. Se obtendrá un mapa estilizado. 1. El sistema realiza la petición GetCapabilities al WMS. 2. El sistema lee el archivo GetCapabilities que el WMS devuelve y a partir de la información construye el catálogo de mapas. 3. El diseñador elige del catálogo el mapa que desea estilizar. 4. El sistema construye la cadena de solicitud y envía la petición al WMS. 5. El WMS responde con la imagen del mapa solicitado y el sistema lo muestra en el visor de mapas. 6. El diseñador aplica estilos al mapa por medio de opciones de estilo que el sistema le presenta al diseñador. 7. El sistema genera el código XML que corresponde a las configuraciones de estilo definidas por el usuario. 8. Terminar proceso. 1. El sistema realiza la petición GetCapabilities al WMS. 2. El sistema lee el archivo GetCapabilities que el WMS devuelve y a partir de la información construye el catálogo de mapas. 3. Ocurrió un error al momento de construir el catálogo. El catálogo no está disponible. 4. Notificar el error al diseñador. 5. Terminar proceso. 1. El sistema realiza la petición GetCapabilities al WMS. 2. El sistema lee el archivo GetCapabilities que el WMS devuelve y a partir de la información construye el catálogo de mapas. 3. El diseñador elige del catálogo el mapa que desea estilizar. 4. El sistema construye la cadena de solicitud y envía la petición al WMS. 5. El WMS no responde y el sistema no muestra el mapa en el visor de mapas. 6. Notificar error al diseñador. 7. Terminar proceso. CU-3.1 Solicitar Mapa, CU-3.2 Aplicar Estilos. Las opciones de estilo son facilitadas al diseñador para que configure el estilo de los objetos mostrados en el mapa. Los objetos abarcan puntos, líneas, polígonos y texto. Página 44 Capítulo 3 Análisis y Diseño act DA-CU3 Diseñar Mapa Inicio Realizar petición GetCapabilities al WMS MapWeb Designer ¿Catálogo de mapas disponible? No Leer archiv o GetCapabilities y construir el catálogo de mapas ¿Mapa Visualizado? Si No Si Generar Código XML Diseñador Construir cadena de solicitud y env iar la petición al WMS Elegir del catálogo el mapa a estilizar Estilizar Mapa Notificar error Fin Figura 3.7. Diagrama de actividad de caso de uso Diseñar Mapa 3.1.2.4. Caso de uso: Solicitad Mapa En la tabla (3.4) se describe el caso de uso Solicitar Mapa y en la figura (3.8) se ilustra su respectivo diagrama de actividad. Tabla 3.4. Descripción de caso de uso Solicitar Mapa ID: Nombre del caso de uso: Actores: Descripción: Precondiciones: Postcondiciones: Escenario de éxito 1: Escenario de fracaso 1: CU-3.1 El diagrama de actividades que incluye los escenarios de éxito y fracaso se muestra en la figura (3.8) Solicitar Mapa Diseñador, MapWeb Designer Solicita un mapa proveniente de un servidor WMS. El diseñador debe de indicar que mapa desea solicitar. Se muestra el mapa solicitado en el visor de mapas de la aplicación MapWeb Designer. 1. El diseñador selecciona el mapa que desea visualizar. 2. El sistema construye la cadena de solicitud que contiene el nombre del mapa que seleccionó el diseñador. 3. El sistema envía la cadena de solicitud al servidor WMS. 4. El WMS responde la solicitud devolviendo la imagen del mapa solicitado. 5. Se muestra el mapa en el visor de mapas de la aplicación y el diseñador lo visualiza. 6. Terminar proceso. 1. El diseñador selecciona el mapa que desea visualizar. 7. El sistema construye la cadena de solicitud que contiene el nombre del mapa que seleccionó el diseñador. 2. El sistema envía la cadena de solicitud al servidor WMS. 3. Ocurre un error, el servidor WMS no está disponible. 4. El mapa no se visualiza en el visor de mapas. 5. Terminar proceso. Página 45 Capítulo 3 Análisis y Diseño act DA-CU3.1 Solicitar Mapa Diseñador Inicio Seleccionar el mapa que se desea v isualizar Visualizar mapa solicitado Visualizar error MapWeb Designer Si Construir la cadena de solicitud ¿Mapa Visualizado? No Notificar que el recurso no está disponible Env iar petición GetMap al WMS Fin Figura 3.8. Diagrama de actividad de caso de uso Solicitar Mapa 3.1.2.5. Caso de uso: Aplicar Estilos La tabla (3.5) describe el caso de uso Aplicar Estilos y la figura (3.9) muestra su correspondiente diagrama de actividad. Tabla 3.5. Descripción de caso de uso Aplicar Estilos ID: Nombre del caso de uso: Actores: Descripción: Precondiciones: Postcondiciones: Escenario de éxito 1: Escenario de éxito 2: CU-3.2 El diagrama de actividades que incluye los escenarios de éxito y fracaso se muestra en la figura (3.9) Aplicar estilos Diseñador, MapWeb Designer Permite configurar componentes para aplicarle estilos a los mapas visualizados. El mapa debe ser mostrado en el visor de mapas. Se obtendrá un mapa estilizado de acuerdo a las necesidades del diseñador. 1. El diseñador selecciona el tipo de geometría a estilizar (punto, línea, polígono o texto). 2. El diseñador configura las opciones de estilo que se le presentan. 3. El diseñador aplica el estilo configurado. 4. El sistema genera el documento SLD que describe el estilo configurado por el diseñador. 5. El sistema construye y envía una solicitud GetMap al WMS. 6. El WMS responde la solicitud con el mapa estilizado. 7. El diseñador visualiza el cambio de estilo del mapa. 8. Terminar proceso. 1. El diseñador selecciona el tipo de geometría a estilizar (punto, línea, polígono o texto). 2. La geometría tipo texto es seleccionada por el diseñador. 3. El diseñador hace clic sobre un objeto del mapa. 4. El sistema obtiene las coordenadas X,Y del mapa. 5. El sistema construye y envía una petición GetFeatureInfo al WMS. Página 46 Capítulo 3 Análisis y Diseño Escenario de fracaso 1: Escenario de fracaso 2: Escenario de fracaso 3: Incluye Suposiciones: 6. El WMS responde la solicitud devolviendo los atributos. 7. El diseñador configura las opciones de estilo que se le presentan. 8. El diseñador aplica el estilo configurado. 9. El sistema genera el documento SLD que describe el estilo configurado por el diseñador. 10. El sistema construye y envía una solicitud GetMap al WMS. 11. El WMS responde la solicitud con el mapa estilizado. 12. El diseñador visualiza el cambio de estilo del mapa. 13. Terminar proceso. 1. El diseñador selecciona el tipo de geometría a estilizar (punto, línea, polígono o texto). 2. El diseñador configura las opciones de estilo que se le presentan. 3. El diseñador aplica el estilo configurado. 4. El sistema genera el documento SLD que describe el estilo configurado por el diseñador. 5. El sistema construye y envía una solicitud GetMap al WMS. 6. El WMS no responde, ocurre un error. 7. Se notifica el error al diseñador. 8. Terminar proceso. 1. El diseñador selecciona el tipo de geometría a estilizar (punto, línea, polígono o texto). 2. La geometría tipo texto es seleccionada por el diseñador. 3. El diseñador hace clic sobre un objeto del mapa. 4. El sistema obtiene las coordenadas X,Y del mapa. 5. El sistema construye y envía una petición GetFeatureInfo al WMS. 6. El WMS no responde o no encontró atributos sobre las coordenadas X,Y. 7. Se notifica el error al diseñador. 8. Terminar proceso. 1. El diseñador selecciona el tipo de geometría a estilizar (punto, línea, polígono o texto). 2. La geometría tipo texto es seleccionada por el diseñador. 3. El diseñador hace clic sobre un objeto del mapa. 4. El sistema obtiene las coordenadas X,Y del mapa. 5. El sistema construye y envía una petición GetFeatureInfo al WMS. 6. El WMS responde la solicitud devolviendo los atributos. 7. El diseñador configura las opciones de estilo que se le presentan. 8. El diseñador aplica el estilo configurado. 9. El sistema genera el documento SLD que describe el estilo configurado por el diseñador. 10. El sistema construye y envía una solicitud GetMap al WMS. 11. El WMS no responde la solicitud, ocurre un error. 12. Se notifica el error al diseñador. 13. Terminar proceso. CU-3.3 Generar código XML. Se supone que el usuario ha ingresado al sistema. Se supone que cuando el sistema realiza una petición GetMap al WMS, envía como parámetro el documento SLD que contiene las configuraciones de estilo realizadas por el diseñador. Se supone que el WMS asocia el estilo definido en el documento SLD al mapa solicitado por el diseñador. Cuando el sistema realiza una petición GetFeatureInfo, el sistema ingresa las coordenadas X,Y obtenidas del lugar donde el diseñador hizo clic sobre el mapa. Estas coordenadas son enviadas como parámetro a la petición GetFeatureInfo con el objetivo de obtener los atributos asociados a esas coordenadas. Página 47 Capítulo 3 Análisis y Diseño act DA-CU3.2 Aplicar Estilos Diseñador Inicio Seleccionar tipo de geometría a estilizar (punto, línea, polígono o texto) Configurar propiedades de estilo Hacer click sobre un obj eto del mapa Aplicar estilo Visualización del mapa estilizado Obtener coordenadas X,Y del mapa Generacion del documento SLD No MapWeb Designer Notificar Error ¿Geometría tipo texto seleccionada? Si Construir y env iar petición GetFeatureInfo al WMS Construcción y env ío de petición GetMap al WMS Si ¿WMS responde solicitud? ¿WMS responde solicitud? No No Si Fin Figura 3.9. Diagrama de actividad de caso de uso Aplicar Estilos 3.1.2.6. Caso de uso: Generar Código XML En la tabla (3.6) se describe el caso de uso Generar Código XML y en la figura (3.10) se muestra su correspondiente diagrama de actividad. Tabla 3.6. Descripción de caso de uso Generar Código XML ID: Nombre del caso de uso: Actores: Descripción: Precondiciones: Postcondiciones: Escenario de éxito 1: Escenario fracaso 1: CU-3.3 El diagrama de actividades que incluye los escenarios de éxito y fracaso se muestra en la figura (3.10) Generar código XML Diseñador, MapWeb Designer, WMS. Genera el código XML (cumpliendo con la especificación SLD) cada vez que el diseñador aplica un nuevo estilo al mapa. El mapa a estilizar debe estar visualizado en el visor de mapas. Se obtendrá un archivo XML que sigue el estándar SLD el cual contiene los estilos aplicados al mapa. 1. El diseñador configura opciones de estilo. 2. El sistema genera el documento SLD de acuerdo a las configuraciones de estilo realizadas por el diseñador. 3. El sistema construye y envía la petición GetMap al WMS. 4. El WMS procesa la solicitud enviando como respuesta el mapa con el estilo asociado. 5. El diseñador visualiza el estilo configurado sobre el mapa. 6. Terminar proceso. 1. El diseñador configura opciones de estilo. 2. El sistema genera el documento SLD de acuerdo a las configuraciones de estilo realizadas por el diseñador. Página 48 Capítulo 3 Análisis y Diseño 3. 4. 5. 1. 2. Escenario de fracaso 2: 3. 4. 5. 6. Ocurre un error al construir el documento SLD. Se notifica el error al diseñador. Terminar proceso. El diseñador configura opciones de estilo. El sistema genera el documento SLD de acuerdo a las configuraciones de estilo realizadas por el diseñador. El sistema construye y envía la petición GetMap al WMS. Ocurre un error, el WMS no responde. Se notifica el error al diseñador. Terminar proceso. Incluye: Suposiciones: act DA-CU3.3 Generar Código XML WMS MapWeb Designer Diseñador Inicio Configurar opciones de estilo Construir SLD de acuerdo a las configuraciones de estilo realizadas por el diseñador Mostrar SLD asociado al mapa Notificar Error ¿SLD creado? No No Construir y env iar la petición GetMap al WMS con el nombre del mapa y el SLD generado como parámetros Si ¿Respuesta del WMS recibida? Si Procesar solicitud GetMap Fin Figura 3.10. Diagrama de actividad de caso de uso Generar Código XML 3.1.2.7. Caso de uso: Elegir Plantilla de Diseño En la figura (3.11) se muestra el caso de uso Elegir Plantilla de Diseño, la descripción del caso de uso en la tabla (3.7) y su respectivo diagrama de actividad se ilustran en la figura (3.12). uc CU-4 Elegir Plantilla de Diseño CU-4 Elegir Plantilla de Diseño Diseñador Figura 3.11. Diagrama del caso de uso Elegir Plantilla de Diseño Página 49 Capítulo 3 Análisis y Diseño Tabla 3.7. Descripción de caso de uso Elegir Plantilla de Diseño ID: Nombre del caso de uso: Actores: Descripción: Precondiciones: Postcondiciones: Escenario de éxito 1: Escenario de fracaso 1: Escenario de fracaso 2: Suposiciones: El diagrama de actividades que incluye los escenarios de éxito y fracaso se muestra en la figura (3.12) CU-4 Elegir plantilla de diseño Diseñador, MapWeb Designer Provee un catálogo de aplicaciones Web para que el diseñador pueda elegir una de ellas y asociarla al mapa estilizado anteriormente. El diseñador debe haber sido autentificado anteriormente. Se generará la aplicación Web seleccionada con el mapa estilizado. 1. El diseñador visualiza el catálogo de plantillas de aplicaciones Web. 2. El diseñador selecciona la plantilla que desea. 3. Se genera la plantilla seleccionada con el mapa asociado. 4. Terminar proceso. 1. El diseñador no visualiza el catálogo de plantillas de páginas Web. 2. Se notifica error. 3. Terminar proceso. 1. El diseñador visualiza el catálogo de plantillas de páginas Web. 2. El diseñador selecciona la plantilla que desea. 3. Se produce un error al generar la plantilla seleccionada. 4. Se notifica el error. 5. Terminar proceso. Se supone que el diseñador ya terminó de estilizar el mapa para asociarlo a la plantilla seleccionada. act DA-CU4 Elegir plantilla de Diseño Inicio Diseñador ¿Catálogo de plantillas visualizado? No Notificar Error Si Seleccionar Plantilla MapWebDesigner No Generar plantilla con mapa asociado ¿Plantilla Generada? Si Fin Figura 3.12. Diagrama de actividad de caso de uso Elegir Plantilla de Diseño. Página 50 Capítulo 3 Análisis y Diseño 3.1.2.8. Caso de uso: Publicar Aplicación Web En la figura (3.13) se muestra el caso de uso Publicar Aplicación Web, la descripción del caso de uso se muestra en la tabla (3.8) y su respectivo diagrama de actividad se ilustra en la figura (3.14). uc CU-5 Publicar Aplicación Web CU-5 Publicar Aplicación Web Diseñador Figura 3.13. Diagrama del caso de uso Publicar Aplicación Web. Tabla 3.8. Descripción de caso de uso Publicar Aplicación Web Descripción: Precondiciones: Postcondiciones: Escenario de éxito 1: Escenario de fracaso 1: Suposiciones: Publicar aplicación Web Diseñador, MapWeb Designer Permite publicar la aplicación Web en el contenedor Web con la finalidad de que sea visible en la red de Internet. El diseñador debió haber elegido una plantilla de página Web. Se copian los archivos correspondientes al contenedor Web. 1. El sistema copia los archivos necesarios a la carpeta Web del diseñador. 2. Los archivos se copian correctamente. 3. El sistema redirige a la dirección donde se publicaron los archivos. 4. Terminar proceso. 1. El sistema copia los archivos necesarios a la carpeta Web del diseñador. 2. Ocurre un error al copiar los archivos en el contenedor Web remoto. 3. Se notifica el error. 4. Terminar proceso. Se supone que el diseñador ha terminado de estilizar el mapa. act DA-CU5 Publicar Aplicación Web Inicio MapWeb Designer Nombre del caso de uso: Actores: El diagrama de actividades que incluye los escenarios de éxito y fracaso se muestra en la figura (3.14) CU-5 Copiar Archiv os a Contenedor Web ¿Archivos Copiados Correctamente? Si Redirigir a página publicada No Diseñador ID: Notificar Error Fin Figura 3.14. Diagrama de actividad del caso de uso Publicar Aplicación Web Página 51 Capítulo 3 Análisis y Diseño 3.1.2.9. Caso de uso: Visualizar Aplicación Web En la figura (3.15) se muestra el caso de uso Visualizar Aplicación Web, la descripción del caso de uso se muestra en la tabla (3.9) y el diagrama de actividad se presenta en la figura (3.16). uc CU-6 Visualizar Aplicación Web CU-6 Visualizar Aplicación Web Diseñador Usuario Final Figura 3.15. Diagrama del caso de uso Visualizar Aplicación Web Tabla 3.9. Descripción de caso de uso Visualizar Aplicación Web ID: Nombre del caso de uso: Actores: Descripción: Precondiciones: Postcondiciones: Escenario de éxito 1: Escenario de fracaso 1: Escenario de fracaso 2: CU-6 El diagrama de actividades que incluye los escenarios de éxito y fracaso se muestra en la figura (3.16). Visualizar aplicación Web Diseñador, usuario final, navegador Web. Visualiza la página Web publicada anteriormente en un navegador. Los archivos de la aplicación Web deben de estar publicados en el contenedor Web. Se visualizará la aplicación Web publicada. 1. Se abre el navegador. 2. Se introduce el path de la página Web publicada en el navegador. 3. Se despliega la página Web correctamente en el navegador. 4. Terminar proceso. 1. Se abre el navegador. 2. Se introduce el path de la página Web publicada en el navegador. 3. No se visualiza la aplicación Web. 4. Se notificar error. 5. Terminar proceso 1. Se tiene la aplicación publicada. 2. Se abre el navegador. 3. Se introduce el path de la página Web publicada en el navegador. 4. Se visualiza la página Web sin el mapa. 5. Se notifica error. 6. Terminar proceso. Página 52 Capítulo 3 Análisis y Diseño act DA-CU6 Visualizar Aplicación Web Diseñador/Usuario Inicio Abrir Nav egador WMS MapWeb Designer Contenedor Web Procesar la solicitud http Introducir el path de la página Web publicada en el nav egador ¿Aplicación Disponible? Si Env iar petición GetMap almacenada en la aplicación publicada Notificar Error No No ¿Respuesta del WMS recibida? Si Procesar solicitud GetMap Fin Figura 3.16. Diagrama de actividad de caso de uso Visualizar Aplicación Web 3.2. DISEÑO En el proceso de ingeniería de software, una vez que se especifica y analizan los requisitos del sistema se procede a realizar el diseño. En esta fase se toma en cuenta el análisis de requisitos para poder describir de forma técnica el funcionamiento del sistema. En la presente sección de diseño, se muestra el diseño arquitectónico que representa los componentes con los que interactúa el sistema. Después se presentan los diagramas de clases (para representar la estructura del sistema mostrando los atributos, métodos y relaciones) y diagramas de secuencias (para mostrar las interacciones entre objetos). Finalmente para describir la forma en que se organizan los datos que almacena el sistema, se expone el diseño de la base de datos mediante el diagrama entidad relación. 3.2.1. Diseño arquitectónico El proceso de diseño arquitectónico está relacionado con el establecimiento de un marco estructural básico que identifica los principales componentes de un sistema y las comunicaciones entre estos componentes. Hacer explícita la arquitectura del sistema en una etapa temprana del desarrollo del sistema, requiere realizar algún análisis. [SOMMERVILLE, 2005] De acuerdo a la descripción del problema de la tesis, se definió la arquitectura general del sistema que muestra los componentes con los cuales interactúa. En la figura (3.17) se muestra la arquitectura del sistema. Página 53 Capítulo 3 Análisis y Diseño Figura 3.17. Arquitectura general del sistema 3.2.1.1 Clientes El cliente es la terminal de computadora desde la cual se solicita el servicio de la herramienta MapWeb Designer por medio de peticiones HTTP. Por lo general quien solicitará el servicio será un diseñador de aplicaciones Web. Los usuarios finales son quienes únicamente visualizan la aplicación Web en Internet. 3.2.1.2 Contenedor Web Debido a que la herramienta a desarrollar es visible en Internet, ésta debe estar almacenada en un contenedor Web. Éste contenedor es el encargado de gestionar las solicitudes de los diseñadores. 3.2.1.3 Herramienta MapWeb Designer La herramienta generadora de páginas Web con mapas geográficos, contiene una API visora para manipular los mapas, además proporciona componentes para la configuración de la apariencia del mapa visualizado y una serie de plantillas de páginas Web en la que se publica el mapa estilizado. Los mapas visualizados y manipulados en la herramienta son solicitados a un WMS por medio de las siguientes operaciones: Petición GetCapabilities: MapWeb Designer realiza una petición GetCapabilities al servidor de mapas (WMS) con la finalidad de obtener los servicios que provee. Para ello se implementaron clases que permiten leer la respuesta del servidor WMS para construir el catálogo de mapas que se le muestra al usuario (diseñador). Petición GetMap: la herramienta contiene una API que permite visualizar los mapas provenientes del WMS. Esta API en colaboración con MapWeb Designer realiza la Página 54 Capítulo 3 Análisis y Diseño petición GetMap al WMS para visualizar los mapas con los estilos aplicados por el diseñador. Petición GetFeatureInfo: la API visualizadora de mapas y el proxy que se implementó en MapWeb Designer, permiten realizar la comunicación con el WMS para obtener atributos asociados a los objetos punto, línea y polígono del mapa. Esto con el objetivo de aplicar estilos a objetos específicos del mapa. El desarrollo de la aplicación MapWeb Designer sigue la especificación J2EE y la implementación del patrón MVC de Java, por lo que se programó la aplicación en Java utilizando Struts [APACHE, 2008]. Siguiendo el patrón MVC en la figura (3.18) se muestra cómo se organiza la aplicación. Figura 3.18. Aplicación MapWeb Designer 3.2.1.4 Api visora de mapas Como su nombre lo indica, es un API que permite visualizar los mapas que se solicitan al servidor de mapas. Se realizó una evaluación de las APIS más representativas con la finalidad de elegir la más adecuada (ver anexo A). Página 55 Capítulo 3 Análisis y Diseño 3.2.1.5 Servidor de mapas (WMS por sus siglas en inglés). La función principal de este servidor es permitir consultar y recuperar mapas que tienen como fuente de información datos vectoriales. Este servidor responde las peticiones http solicitadas por la aplicación MapWeb Designer, devolviendo el mapa correspondiente a la solicitud. Nota: el WMS es un servidor de consulta (que implementa las operaciones GetMap, GetCapabilities y GetFeatureInfo). Para elegir el servidor adecuado se evaluaron los servidores de mapas más representativos (ver anexo B). 3.2.1.6 Base de Datos (PostgreSQL). En ella se encuentra almacenada información relacionada con los usuarios registrados en el sistema. Esta información abarca datos personales de los usuarios, los mapas y estilos generados por los mismos. En las figuras (3.31) y (3.32) del documento, se muestra el diagrama conceptual y físico de la base de datos. 3.2.2. Diagramas de clases Para diseñar el sistema MapWeb Designer se siguió el patrón Modelo-Vista-Controlador. Por ello se crearon tres paquetes: Paquete mx.edu.cenidet.MapWebDesigner.Modelo: este paquete guarda todas las clases que implementan la lógica de negocio. Paquete mx.edu.cenidet.MapWebDesigner.Vista: agrupa las clases que heredan de ActionForm y que tienen como objetivo almacenar información proveniente de formularios presentados al usuario. Paquete mx.edu.cenidet.MapWebDesigner.Acciones: agrupa las clases que heredan de la clase Action y que tienen como objetivo invocar a las clases del modelo y la vista para controlar el flujo de la información. Figura 3.19. Paquetes del sistema MapWeb Designer Página 56 Capítulo 3 Análisis y Diseño La relación existente entre los paquetes anteriores es de dependencia (ver figura 3.19). El paquete mx.edu.cenidet.MapWebDesigner.Acciones requiere invocar objetos del paquete mx.edu.cenidet.MapWebDesigner.Vista para obtener datos provenientes de la interfaz de usuario y posteriormente invocar objetos del paquete mx.edu.cenidet.MapWebDesigner.Modelo para procesar los datos de mx.edu.cenidet.MapWebDesigner.Vista y devolver un resultado. A continuación se describen las clases y diagramas de secuencias que se definieron para el desarrollo del sistema. La simbología utilizada en los diagramas de secuencia se presenta en la tabla (3.10). DSec-Registrar_Usuario Clase Tabla 3.10. Simbología utilizada en diagramas de secuencias NOMBRE SIMBOLO Frontera (Boundary) sd DSec-Registrar_Usuario Control Boundary Clase Control Actor sd DSec-Registrar_... Control DESCRIPCION Representa los elementos de software, tales como pantallas, informes, formularios, reportes, páginas HTML, o sistema de interfaces que interactúan con los actores. También se denomina elementos de la interfaz. Representa un proceso de control. Coordina los eventos necesarios para llevar a cabo el comportamiento que se especifica en el caso de uso. Boundary Representa al usuario del sistema. sd DSec-Registrar_Usuario Actor Clase Clase Representa las clases del sistema. Control 3.2.2.1. Boundary Clases del caso de uso Registrar Usuario Este caso de uso permite que los actores se registren en el sistema y obtengan un Login y Password registrado para ingresar a MapWeb Designer. Las clases involucradas en este caso de uso se describen enseguida: VISTA RegistraUsuarioForm: clase que inicializa las variables del sistema con los datos introducidos por el diseñador en la página JSP. CONTROL RegistraUsuarioAction: clase que invoca métodos de la clase RegistraUsuarioForm y RegistraUsuarioModelo para controlar el flujo de la información. MODELO RegistraUsuarioModelo: permite registrar los usuarios en la base de datos del sistema. Se encuentra en el paquete mx.edu.cenidet.MapWebDesigner.Modelo.Logica. Para realizar el registro implementa los siguientes métodos: o BuscarUsuarioDuplicado para verificar que no se registren usuarios con el mismo login o crear_idUser para crear un identificador único por usuario. o encriptarPasswd para cifrar el password introducido por el usuario. o RegistraUsuarioenBD para registrar el usuario en la base de datos del sistema. Página 57 Capítulo 3 Análisis y Diseño o CreaDirectorioWeb para crear el directorio Web en el que se guardan las publicaciones del usuario. Además crea una instancia de la clase ConectaBD para realizar la conexión con la base de datos. ConectaBD: clase que permite realizar la conexión con la base de datos. Pertenece al paquete mx.edu.cenidet.MapWebDesigner.Modelo.BaseDatos y los métodos que implementa son: o RealizaConexion: invoca los métodos InicializarDatosConfiguracion y getConexion. o InicializarDatosConfiguracion: crea una instancia de la clase ConfiguraBD para obtener los datos necesarios de la conexión. o getConexion: realizar la conexión con la base de datos. ConfiguraBD: en esta clase permiten inicializar los datos para la conexión a la base de datos. El método que implementa es: o setArchivo: lee el archivo de configuración PropiedadesBD.properties para obtener los datos de la conexión y los almacena en variables por medio de métodos públicos. En la figura (3.20) se presenta el diagrama de clases y en la figura (3.21) se muestra el diagrama de secuencias del presente caso de uso. class DC-RegistrarUsuario org.apache.struts.action.ActionForm Action Vista::RegistraUsuarioForm Acciones::RegistraUsuarioAction - AcuerdoLicencia: boolean = false ApMat: String ApPat: String ConfirmaEmail: String ConfirmaPasswd: String Email: String Login: String Nombre: String Organizacion: String Pais: String Passwd: String + + + + + + + + + + + + + + + + + + + + + + + + + getCkBacuerdoLicencia() : boolean getTxFapMat() : String getTxFapPat() : String getTxFconfirmaEmail() : String getTxFconfirmaPasswd() : String getTxFemail() : String getTxFlogin() : String getTxFnombre() : String getTxForganizacion() : String getTxFpais() : String getTxFpasswd() : String RegistraUsuarioForm() reset(ActionMapping, HttpServletRequest) : void setCkBacuerdoLicencia(boolean) : void setTxFapMat(String) : void setTxFapPat(String) : void setTxFconfirmaEmail(String) : void setTxFconfirmaPasswd(String) : void setTxFemail(String) : void setTxFlogin(String) : void setTxFnombre(String) : void setTxForganizacion(String) : void setTxFpais(String) : void setTxFpasswd(String) : void validate(ActionMapping, HttpServletRequest) : ActionErrors - Configuracion: Properties + execute(ActionMapping, ActionForm, HttpServletRequest, HttpServletResponse) : ActionForward Logica::RegistraUsuarioModelo - conexion: Connection + + + + + + BuscaUsuarioDuplicado(String) : int CreaDirectorioWeb(String, String) : boolean crear_idUser() : int encriptarPasswd(String) : String RegistraUsuarioenBD(String, String, String, String, String, String, String, String, String) : int RegistraUsuarioModelo() BaseDatos::ConfiguraBD BaseDatos::ConectaBD - baseDatos: String conexion: Connection password: String puerto: String servidor: String url: String usuario: String + + + + ConectaBD() getConexion() : Connection InicializarDatosConfiguracion(String) : void RealizaConexion(String) : Connection - appRuta: String appServidor: String archivo: String bdNombre: String bdPassword: String bdPuerto: String bdServidor: String bdUsuario: String Configuracion: Properties messages: MessageResources = MessageResource... + + ConfiguraBD() setArchivo(String) : void «property get» + getbdNombre() : String + getbdPassword() : String + getbdPuerto() : String + getbdServidor() : String + getbdUsuario() : String Figura 3.20. Diagrama de clases de Registrar Usuario Página 58 Capítulo 3 Análisis y Diseño sd DSec-Registrar_Usuario RegistraUsuarioForm Diseñador Interfaz Registro Interfaz Error Ingresar datos personales Interfaz Registro_Correcto RegistraUsuarioAction RegistraUsuarioModelo ConectaBD ConfiguraBD Struts-config.xml Registrar Mapear acción Direacciona Se inicializan todas las variables con la información ingresada por el actor. setTxFnombre(nombre) Se obtiene la información de las variables inicializadas. Direcciona Mapear acción Direcciona getTxFnombre() Instanciar modelo Conectar a Base de Datos InicializarDatosConfiguracion(path) Lee el archivo PropiedadesBD.properties para obtener los datos de la conexión a la BD. setArchivo(path) Datos conexion : bd,user,passwd RealizaConexion(path) getConexion() :Connection BuscaUsuarioDuplicado(login) :int Ejecutar Query El valor entero que regresa la función BuscaUsuarioDuplicado define lo siguiente: 1= Usuario duplicado 2= Usuario no duplicado El valor entero devuelto por RegistraUsuarioenBD significa lo siguiente: 4= Usuario registrado otro numero = ocurrió un error 2 crear_idUser() :int encriptarPasswd :String RegistraUsuarioenBD(String,String,String,String,String,String,String,String,String) :int Ejecutar Query 4 CreaDirectorioWeb(login,path) :boolean Comparar estado :true Direcciona Mapear acción Mostrar resultado Direcciona Numero diferente de 4 Comparar estado :false Direcciona Mapear acción Mostrar resultado Direcciona Figura 3.21. Diagrama de secuencias de Registrar Usuario 3.2.2.2. Clases del caso de uso Autentificar Usuario Este caso de uso permite que los usuarios registrados ingresen al sistema con un Login y Password correctos (registrados en la base de datos). Las clases involucradas en este caso de uso se ilustran en la figura (3.22) y se describen en seguida: VISTA AutentificaUsuarioForm: esta clase se encarga de inicializar las variables Login y Passwd con los datos introducidos en la interfaz de usuario. CONTROL AutentificaUsuarioAction: esta clase invoca métodos de AutentificaUsuarioForm y AutentificaUsuarioModelo para controlar el flujo de la información. Página 59 Capítulo 3 Análisis y Diseño MODELO AutentificaUsuarioModelo: esta clase permite verificar que el login y password proporcionados por el usuario correspondan a un registro de la base de datos del sistema. Los métodos correspondientes a esta clase son: o desencriptarPasswd: este método permite descifrar el password almacenado en la base de datos. o esValido: este método invoca a desencriptarPasswd y después se conecta a la base de datos por medio de una instancia a la clase conectaBD ( ver caso de uso Registrar Usuario para la descripción de esta clase) y buscar que el usuario y la contraseña introducidos coincidan con los datos registrados en la Base de datos. class DC-AutentificaUsuario org.apache.struts.action.ActionForm Action Vista::AutentificaUsuarioForm - miLogin: String miPasswd: String + + + + + + + AutentificaUsuarioForm() getTxFpasswd() : String getTxFusuario() : String reset(ActionMapping, HttpServletRequest) : void setTxFpasswd(String) : void setTxFusuario(String) : void validate(ActionMapping, HttpServletRequest) : ActionErrors Acciones::AutentificaUsuarioAction + execute(ActionMapping, ActionForm, HttpServletRequest, HttpServletResponse) : ActionForward Logica::AutentificaUsuarioModelo BaseDatos::ConfiguraBD - appRuta: String appServidor: String archivo: String bdNombre: String bdPassword: String bdPuerto: String bdServidor: String bdUsuario: String Configuracion: Properties messages: MessageResources = MessageResource... + + ConfiguraBD() setArchivo(String) : void «property get» + getbdNombre() : String + getbdPassword() : String + getbdPuerto() : String + getbdServidor() : String + getbdUsuario() : String - conexion: Connection PasswdForma: String UsuarioForma: String + + + AutentificaUsuarioModelo() desencriptarPasswd(String) : String esValido(String, String, String) : int BaseDatos::ConectaBD - baseDatos: String conexion: Connection password: String puerto: String servidor: String url: String usuario: String + + + + ConectaBD() getConexion() : Connection InicializarDatosConfiguracion(String) : void RealizaConexion(String) : Connection Figura 3.22. Diagrama de clases de Autentificar Usuario El diagrama de secuencia que se sigue para que un usuario se autentifique se muestra en la figura (3.23). Página 60 Capítulo 3 Análisis y Diseño sd DSec-Autentificar_Usuario AutentificaUsuarioForm Diseñador Interfaz Login Introducir login y password Interfaz Error Interfaz Elige Opción AutentificaUsuarioAction AutentificaUsuarioModelo ConectaBD ConfiguraBD Struts-config.xml Iniciar Sesión Mapear acción Direcciona setTxFusuario(login) setTxFpasswd(password) Direcciona Mapear acción Direcciona getTxFusuario() getTxFpasswd() Instanciar modelo desencriptarPasswd(password) :String Conectar a Base de Datos InicializarDatosConfiguracion(path) Lee el archivo PropiedadesBD.properties para obtener los datos de la conexión a la BD. setArchivo(path) Datos conexion : bd,user,passwd RealizaConexion(path) getConexion() : Connection esValido(login,password) :int Ejecutar Query Direcciona UsuarioVálido :true 4 El valor entero que regresa la función esValido define lo siguiente: 4= login y password correctos otro numero= ocurrió un error Mapear acción Mostrar resultado Direcciona numero diferente de 4 Direcciona UsuarioVálido :false Mapear acción Mostrar resultado Direcciona Figura 3.23. Diagrama de secuencias de Autentificar Usuario 3.2.2.3. Clases del caso de uso Diseñar Mapa El objetivo de este caso de uso es configurar los componentes de estilo que permitan estilizar un mapa previamente solicitado y generar el código SLD que represente la estilización aplicada. Los casos de uso que conforman el diseño del mapa son solicitar mapa, aplicar estilos, generar código XML. A continuación se describen cada uno de estos. 3.2.2.3.1. Clases del caso de uso Solicitar Mapa Para realizar la solicitud de mapas al WMS primero se realiza una petición GetCapabilities para obtener el catálogo de mapas. Esta petición se ejecuta al momento de iniciar la aplicación. Una vez que se realiza la solicitud, los mapas y sistemas de referencia obtenidos del WMS se almacenan en el contexto de la aplicación. Para realizar lo anterior se definió el paquete mx.edu.cenidet.MapWebDesigner.Modelo.ContextoCapas el cual se describe en el capítulo de implementación. Una vez que se tienen los mapas y sistemas de referencia que provee el WMS se procede a realizar el proceso de solicitud del mapa que desee el usuario. Las clases que permiten realizar esta función son las que a continuación se describen: Página 61 Capítulo 3 Análisis y Diseño VISTA RealizaPeticionGeoserverForm: esta clase se encarga de inicializar las variables CapasSeleccionadas y srs con los datos introducidos en la interfaz de usuario. CONTROL PeticionGeoserverAction: esta clase invoca métodos de RealizaPeticionGeoserverForm para recuperar el sistema de referencia y las capas seleccionadas por el usuario. En la figura (3.24) se presenta el diagrama de secuencias y en la figura (3.25) se muestra el diagrama de clases correspondientes al presente caso de uso. sd DSec-SolicitarMapa RealizaPeticionGeoserverForm Diseñador Interfaz Catálogo de Mapas Interfaz Visualizar Mapa Seleccionar mapa API PeticionGeoserverAction Struts-config.xml Solicitar mapa Servidor WMS Mapear acción Direcciona setSrs_seleccionado(string) setCapasSeleccionadas(String[]) Direcciona Mapear acción Direcciona getSrs_seleccionado() getCapasSeleccionadas() Subir variables SRS y CapasSeleccionadas a la sesión del usuario Direcciona Mapear acción Direcciona Recupera SRS y CapasSeleccionadas de la sesión del usuario Construir Cadena Solicitud Enviar Cadena de Solicitud Realizar Solicitud de Mapa Procesa solicitud Imagen del mapa Procesar imagen Mostrar mapa Mostrar resultado Figura 3.24. Diagrama de secuencias de Solicitar Mapa class DC-SolicitarMapa org.apache.struts.action.ActionForm org.apache.struts.action.Action Vista::RealizaPeticionGeoserv erForm - CapasSeleccionadas: String ([]) = null srs_seleccionado: String + + + + + getSrs_seleccionado() : String RealizaPeticionGeoserverForm() reset(ActionMapping, HttpServletRequest) : void setSrs_seleccionado(String) : void validate(ActionMapping, HttpServletRequest) : ActionErrors Acciones::PeticionGeoserv erAction + execute(ActionMapping, ActionForm, HttpServletRequest, HttpServletResponse) : ActionForward «property get» + getCapasSeleccionadas() : String[] «property set» + setCapasSeleccionadas(String[]) : void Figura 3.25. Diagrama de clases de Solicitar Mapa Página 62 Capítulo 3 Análisis y Diseño 3.2.2.3.2. Clases del caso de uso Aplicar Estilos y Generar Código XML El objetivo de estos casos de uso es configurar componentes de estilo que permitan estilizar un mapa previamente solicitado y generar el código SLD que represente la estilización configurada. En el caso particular del texto, para realizar su personalización se requiere conocer los atributos del mapa y para ello es necesario realizar una petición GetFeatureInfo al WMS para obtener esta información. Esta función es realizada por la clase Proxy que se encuentra en el paquete mx.edu.cenidet.MapWebDesigner.Modelo.Proxy (En el capítulo de implementación se describe a detalle la función de la clase). Las clases involucradas en estos casos de uso son: VISTA creaSLDForm: esta clase se encarga de inicializar las variables correspondientes a la configuración de estilo realizada por el usuario. CONTROL creaSLDAction: esta clase invoca métodos de las clases creaSLDForm y creaSLDModelo para controlar el flujo de la información. MODELO creaSLDModelo: clase que contiene métodos para la creación de objetos que corresponden al documento SLD. CreaTagsSLDModelo: permite la creación de tags XML. Para la creación del documento SLD se realizó el diseño en objetos del cual a partir de éste se generaron las clases que permiten crear los objetos del SLD. En el anexo C se muestran estos diagramas. A continuación en la figura (3.26) se muestra el diagrama de clases y en la figura (3.27) se presenta el diagrama de secuencias correspondientes a los casos de uso aplicar estilos y generar XML. Página 63 Capítulo 3 Análisis y Diseño Figura 3.26. Diagrama de clases de Aplicar Estilos y generar código XML Página 64 Capítulo 3 Análisis y Diseño sd DSec-AplicarEstilos creaSLDForm Diseñador Interfaz Visualizar Mapa Configurar componentes de estilo API Aplicar estilo creaSLDAction CreaSLDModelo CreaTagsSLDModelo Struts-config.xml Servidor WMS Mapear acción Direccionar Se inicializan todas las variables con la información ingresada por el actor. setNombreCapa(String) setTipogeometria(String) Se obtiene la información de las variables inicializadas. Direcciona Mapear acción Direcciona getNombreCapa() getTipogeometria() Instanciar modelo Construir objetos SLD Enviar objetos Construir documento SLD Documento SLD Documento SLD Subir el SLD a la sesión de usuario (SLD) Direcciona Mapear acción Direcciona Recuperar SLD,SRSy CapasSeleccionadas de la sesión del usuario Construir cadena solicitud Enviar cadena solicitud Realizar solicitud de mapa con estilo creado Procesa solicitud Imagen del mapa con estilo Mostrar mapa Mostrar resultado Figura 3.27. Diagrama de secuencias de Aplicar Estilos y generar código XML 3.2.2.4. Clases del caso de uso Elegir Plantilla de Diseño y Publicar Aplicación Web El objetivo de estos casos de uso es asociar el mapa estilizado a una plantilla de página Web para publicarlo en la Web. Las clases involucradas en estos casos de uso son: VISTA CatalogoPlantillasForm: esta clase implementa el método setPlantilla la cual se encarga de inicializar la variable numPlantilla que se recibe de la interfaz de usuario. Esta variable se encarga de identificar las plantillas disponibles con un número. CONTROL AsociarPlantillaAction: esta clase invoca métodos de CatalogoPlantillasForm y de AsociaMapaPlantillaModelo. MODELO AsociaMapaPlantillaModelo: los principales métodos que implementa esta clase son: Página 65 Capítulo 3 Análisis y Diseño o AsociarMapaPlantilla: que permite asociar el mapa con la plantilla seleccionada por el usuario. o publicaPlantillaconMapa: este método invoca al método CreaDirectorioWeb, el cual se encarga de crear un nuevo directorio dentro de la carpeta Web que fue creada al momento de registrar el usuario en el sistema. Posteriormente copia el prototipo de aplicación Web a la carpeta creada antes. o GuardaSLDenBD: este método permite almacenar el documento SLD en la base de datos con el objetivo de recuperarlo en sesiones posteriores. El diagrama de clases definido para estos casos de uso se ilustra en la figura (3.28) y el diagrama de secuencias se muestra en la figura (3.29). class DC-ElegirPlantilladeDiseño-PublicarAplicaciónWeb org.apache.struts.action.Action Acciones::AsociarPlantillaAction + execute(ActionMapping, ActionForm, HttpServletRequest, HttpServletResponse) : ActionForward org.apache.struts.action.ActionForm Logica::AsociaMapaPlantillaModelo Vista::CatalogoPlantillasForm - template: String + + + + CatalogoPlantillasForm() getPlantilla() : String setPlantilla(String) : void validate(ActionMapping, HttpServletRequest) : ActionErrors ~ conexion: Connection num: int = 0 + + + + + + + + + + AsociarMapaPlantilla(String, String[], String[], String[]) : String copia(String, String) : void copiarCSSaCarpetaUser(String, String) : boolean CreaDirectorioWeb(String, String) : boolean crear_id(String) : int GuardaSLDenBD(String[], String, String, String, String, String, String) : boolean obtieneIDusuario(String, String) : int obtieneProyectosUser(int, String) : Collection publicaPlantillaconMapa(String, String, String) : String si_existeFile(String, String) : String Figura 3.28. Diagrama de clases de Elegir Plantilla de Diseño y Publicar Aplicación Web sd DSec-ElegirPlantilladeDiseño CatalogoPlantillasForm Diseñador Interfaz Catálogo Plantillas Seleccionar plantilla Interfaz Pagina Publicada AsociarPlantillaAction AsociaMapaPlantillaModelo Struts-config.xml Publicar plantilla Mapear acción Direcciona setPlantilla(String) Direcciona Mapear accón Direcciona getPlantilla() Instanciar modelo AsociarMapaPlantilla(String,String[],String[],String[]) publicaPlantillaconMapa(String,String,String) GuardaSLDenBD(String[] ,String,String,String,String,String,String) path de publicación Direcciona Mapear acción Direcciona Mostrar resultado Figura 3.29. Diagrama de secuencias Elegir Plantilla de Diseño y Publicar Aplicación Web Página 66 Capítulo 3 Análisis y Diseño 3.2.2.5. Secuencia del Caso de uso Visualizar Aplicación Web El objetivo de esta clase es visualizar en el navegador Web la aplicación publicada. En este caso no se requiere programar ninguna clase ya que el navegador Web procesa la solicitud. En la figura (3.30) se muestra el diagrama de secuencias correspondiente al diagrama de casos de uso Visualizar Aplicación Web. sd DSec-VisualizarAplicacionWeb Usuario/Diseñador Navegador Web Introducir URL Procesar solicitud respuestaServidor :200 Visualiza página Web publicada con mapa asociado respuestaServidor :500 El servidor no encuentra el recurso solicitado Figura 3.30. Diagrama de Secuencias de Visualizar Aplicación Web 3.2.3. Diseño de la Base de Datos. Debido a que el sistema requiere controlar las publicaciones realizadas por cada usuario, se realizó el diseño de la base de datos. Para efectuar esta tarea, se elaboró el diseño conceptual representado por el modelo entidad relación. A partir del modelo conceptual se construyó el modelo físico de la base de datos. En las figuras (3.31) y (3.32) se muestran los modelos elaborados. MAPA USUARIO idUser <pi> Serial <M> nombre Variable characters (254) apPat Variable characters (254) apMat Variable characters (254) organizacion Variable characters (254) pais Variable characters (254) email Variable characters (254) nombrelogin Variable characters (254) passwd Variable characters (254) es estilizado estiliza tiene idMapa <pi> Serial <M> nombreMapa Variable characters (254) bbox Variable characters (254) srs Integer servidor Variable characters (254) idMapa <pi> contiene idUser <pi> ESTILO idEstilo <pi> Serial <M> nombreEstilo Variable characters (254) sld Text pertenece TIENE idEstilo <pi> Figura 3.31. Diagrama Conceptual de la base de datos Página 67 Capítulo 3 Análisis y Diseño MAPA USUARIO idUser nombre apPat apMat organizacion pais email nombrelogin passwd SERIAL <pk> VARCHAR(254) VARCHAR(254) VARCHAR(254) VARCHAR(254) VARCHAR(254) VARCHAR(254) VARCHAR(254) VARCHAR(254) estiliza FK_MAPA_TIENE_USUARIO idMapa es estilizado idUser nombreMapa bbox srs servidor SERIAL <pk> INT4 <fk> VARCHAR(254) VARCHAR(254) INT4 VARCHAR(254) contiene ESTILO idEstilo idMapa nombreEstilo sld SERIAL <pk> INT4 <fk> VARCHAR(254) TEXT pertenece FK_ESTILO_TIENE_MAPA Figura 3.32. Diagrama Físico de la base de datos Página 68 CAPÍTULO 4 IMPLEMENTACION En este capítulo se describen las clases implementadas que muestran la funcionalidad del sistema. Capítulo 4 Implementación El desarrollo de la herramienta MapWeb Designer se desarrolló bajo las siguientes características: IDE Netbeans 6.0 Framework Struts 1.2.9 Manejador de base de datos PostgreSQL 8.3. Contenedor Web Apache Tomcat 6.0 Java 2 Enterprise Edition Versión 1.5. Navegador Web Mozilla Firefox 3.0. Sistema operativo Windows XP. La implementación de la herramienta implicó realizar en primera instancia una evaluación de servidores de mapas y APIS visualizadoras de mapas. La evaluación de servidores de mapas se hizo con el objetivo de elegir al servidor que proporcionara los mapas que manipularía la aplicación. En esta evaluación se eligió a Geoserver como proveedor de mapas (ver anexo B para consultar la evaluación de los servidores de mapas). La evaluación de las APIs se hizo con el objetivo de elegir al visor de mapas más conveniente para el proyecto. De acuerdo a la evaluación realizada (ver anexo A para consultar la evaluación de las APIs) se eligió como visor de mapas a OpenLayers por ser un API con mejores funcionalidades. Como se mostró en el capítulo de análisis y diseño, la aplicación se agrupa en tres paquetes. En particular el paquete mx.edu.cenidet.MapWebDesigner.Modelo contiene a su vez cuatro paquetes: BaseDatos, ContextoCapas, lógica, proxy y SLD. A continuación se describe cada uno de estos. 4.1 Conexión con la base de datos Para realizar la gestión de la base de datos se creó el paquete mx.edu.cenidet.MapWebDesigner.Modelo.BseDatos (ver figura 4.1). La clase ConfiguraBD se encarga de obtener los datos de configuración de la base de datos (la dirección del servidor de BD, el puerto de conexión, nombre de usuario y password con el que se solicitará la conexión a la base de datos). La clase ConectaBD instancia a ConfiguraBD para obtener los datos de conexión y posteriormente realizar la conexión con PostgreSQL. pkg mx.edu.cenidet.MapWebDesigner.Modelo.BaseDatos ConfiguraBD ConectaBD - baseDatos: String conexion: Connection password: String puerto: String servidor: String url: String usuario: String + + + + ConectaBD() getConexion() : Connection InicializarDatosConfiguracion(String) : void RealizaConexion(String) : Connection - appRuta: String appServidor: String archivo: String bdNombre: String bdPassword: String bdPuerto: String bdServidor: String bdUsuario: String Configuracion: Properties messages: MessageResources = MessageResource... + + ConfiguraBD() setArchivo(String) : void «property get» + getbdNombre() : String + getbdPassword() : String + getbdPuerto() : String + getbdServidor() : String + getbdUsuario() : String Figura 4.1. Clases del paquete mx.edu.cenidet.MapWebDesigner.Modelo.BaseDatos Página 70 Capítulo 4 Implementación 4.2 Construcción del catálogo de mapas Para construir el catálogo de mapas se creó el paquete que se muestra en la figura (4.2). La clase ContextListenerCapas realiza la petición GetCapabilities al servidor de mapas. El servidor de mapas devuelve un documento XML que describe los servicios que ofrece. Para procesar el documento XML la clase ContextListenerCapas instancia la clase LeeArchivoXMLGetCapabilities la cual implementa la función leeXML que devuelve como resultado un collection que contiene los mapas y sistemas de referencia que provee el servidor. pkg mx.edu.cenidet.MapWebDesigner.Modelo.Con... ServletContextListener ContextListenerCapas {leaf} + + contextDestroyed(ServletContextEvent) : void contextInitialized(ServletContextEvent) : void Figura 4.2. Clase del paquete mx.edu.cenidet.MapWebDesigner.Modelo.ContextoCapas 4.3 Lógica de negocio En el paquete mx.edu.cenidet.MapWebDesigner.Modelo.Logica se crearon las clases que permiten realizar los aspectos lógicos de la aplicación. En la figura (4.3) se muestran las clases que forman parte de este paquete. pkg mx.edu.cenidet.MapWebDesigner.Modelo.Logica Capa LeeArchiv oXMLGetCapabilities -CatalogoOrdenado - capa: String = null maxx: String = null maxy: String = null minx: String = null miny: String = null pathPublicacion: String = null SLD: String = null srs: String = null + + + + + + + + + + + + + + getCapa() : String getMaxx() : String getMaxy() : String getMinx() : String getMiny() : String getPathPublicacion() : String getSrs() : String setCapa(String) : void setMaxx(String) : void setMaxy(String) : void setMinx(String) : void setMiny(String) : void setPathPublicacion(String) : void setSrs(String) : void «property get» + getSLD() : String «property set» + setSLD(String) : void AsociaMapaPlantillaModelo ~ conexion: Connection num: int = 0 + + + + + + + + + + AsociarMapaPlantilla(String, String[], String[], String[]) : String copia(String, String) : void copiarCSSaCarpetaUser(String, String) : boolean CreaDirectorioWeb(String, String) : boolean crear_id(String) : int GuardaSLDenBD(String[], String, String, String, String, String, String) : boolean obtieneIDusuario(String, String) : int obtieneProyectosUser(int, String) : Collection publicaPlantillaconMapa(String, String, String) : String si_existeFile(String, String) : String - CatalogoOrdenado: Capa ([]) misCapas: Collection NumCapas: int = 0 + + + + + contabiliza_srs(Capa[]) : Collection LeeArchivoXMLGetCapabilities() leeXML(String) : Collection muestra_resultados(int, String[][]) : void ordena_capas(int, Capa[]) : Capa[] RegistraUsuarioModelo AutentificaUsuarioModelo - conexion: Connection + + + + + + BuscaUsuarioDuplicado(String) : int CreaDirectorioWeb(String, String) : boolean crear_idUser() : int encriptarPasswd(String) : String RegistraUsuarioenBD(String, String, String, String, String, String, String, String, String) : int RegistraUsuarioModelo() - conexion: Connection PasswdForma: String UsuarioForma: String + + + AutentificaUsuarioModelo() desencriptarPasswd(String) : String esValido(String, String, String) : int CreaSLDModelo CreaTagsSLDModelo ~ ~ ~ num: int = 1 root: Element XML: String + + + + + + + + + + creaDocumentoXML(Element) : String creaElementoRootXML() : Element creaElementosXML(String) : Element creaElementosXML(String, String) : Element creaElementosXML(String, String, String, String) : Element creaElementoXML(String, String, String) : Element creaElseFilterXML() : Element creaFillElseFilterXML() : Element creaStrokeElseFilterXML() : Element si_existeFile(String) : String ~ ~ DocSLD: String = "" SLD: StyledLayerDescriptor = new StyledLayer... + + + + + + + + + + + + + + + + + crearEncabezado_SLD(String, String, String, String) : void crearFillTexto_SLD(TextSymbolizer, String, String) : TextSymbolizer crearFont_SLD(TextSymbolizer, String, String, String, String) : TextSymbolizer crearHaloTexto_SLD(TextSymbolizer, float, String, String) : TextSymbolizer crearLineaCssParameter_SLD(String, String, String, String) : LineSymbolizer crearObjetosDocumentoSLD(creaSLDForm) : void crearPoligono_SLD(String, String, String, String, String) : PolygonSymbolizer crearPuntoExternalGraphic_SLD(String, String, String, String) : PointSymbolizer crearPuntoMark_SLD(String, String, String, String, String, String, String, String) : PointSymbolizer crearTextoconLinePlacement_SLD(TextSymbolizer, String) : TextSymbolizer crearTextoconPointPlacement_SLD(TextSymbolizer, float, float, float, float, float) : TextSymbolizer CreaSLDModelo(String[]) CreaSLDModelo(String) generaLINEAPredefinido() : LineSymbolizer generaPOLIGONOPredefinido() : PolygonSymbolizer generaPUNTOPredefinido() : PointSymbolizer leerObjetosDocumentoSLD(String) : String Figura 4.3. Clases del paquete mx.edu.cenidet.MapWebDesigner.Modelo.Logica Página 71 Capítulo 4 Implementación Se puede observar que las clases son independientes sin ninguna relación entre ellas. Esto porque que realizan tareas distintas y por la forma en que se programó la aplicación (struts). A continuación se describe cada clase. Capa: clase utilizada como tipo de dato del Collection que almacena las capas devueltas por el servidor de mapas. LeeArchivoXMLGetCapabilities: contiene funciones que procesan el documento GetCapabilities devuelto por el servidor de mapas. Utiliza la clase Capa como tipo de dato de la colección que almacena las capas. RegistraUsuarioModelo: implementa funciones que permiten registrar a los usuarios y construir su correspondiente carpeta Web en la que se almacenarán sus publicaciones. AutentificaUsuarioModelo: contiene funciones que permite verificar si el login y password corresponden a un usuario almacenado en la base de datos. AsociaMapaPlantillaModelo: contiene funciones que permiten asociar el mapa estilizado a una plantilla de página Web y publicarla en la carpeta Web del usuario. CreaSLDModelo:implementa funciones para la creación de objetos que corresponden a los tags XML del documento SLD. CreaTagsSLDModelo: contiene funciones sobrecargadas que permiten traducir los objetos creados por CreaSLDModelo a tags XML. 4.4 Consulta de atributos del mapa Para realizar la estilización del texto de objetos de un mapa, se requiere consultar los datos asociados a ellos. Para ello se realiza una petición GetFeatureInfo al servidor de mapas con el objetivo de abstraer esos datos. La abstracción de los datos se hace mediante un objeto AJAX para mejorar la interacción de la aplicación. Considerando que MapWeb Designer se ejecuta en el navegador y el servidor de mapas se encuentra en un dominio externo ajeno al del contenedor Web que almacena la aplicación MapWeb Designer. No es posible crear un objeto XMLHttpRequest que se comunique de manera directa con el servidor de mapas (ver figura 4.4). Figura 4.4. Petición AJAX con acceso denegado al Servidor WMS Página 72 Capítulo 4 Implementación Partiendo de lo anterior se implementó la clase miProxy que recibe los objetos XMLHttpRequest con la finalidad de obtener comunicación con el WMS de manera transparente. Esta clase se implementó en el paquete mx.edu.cenidet.MapWebDesigner.Modelo.Proxy (ver figura 4.5). pkg mx.edu.cenidet.MapWebDesigner.Modelo.Proxy HttpServlet miProxy ~ ~ ~ ~ atributos: List<String> = new ArrayList<S... c: URLConnection = null i: int = 0 url: URL = null + # # + # almacenaAtributos(String, boolean) : boolean buscaTipoGeometria(String) : String doGet(HttpServletRequest, HttpServletResponse) : void doPost(HttpServletRequest, HttpServletResponse) : void getServletInfo() : String processRequest(HttpServletRequest, HttpServletResponse) : void Figura 4.5. Clase del paquete mx.edu.cenidet.MapWebDesigner.Modelo.Proxy Con la implementación de la clase anterior se resolvió la restricción de acceso al servidor de mapas. En la figura (4.6) se muestra la forma en que interactúa el proxy con las peticiones. Figura 4.6. Petición AJAX con acceso denegado al Servidor WMS 4.5 Construcción documento SLD Para realizar la construcción del SLD se creó una clase por cada tag XML a crear, esto con la finalidad de crear objetos fáciles de modificar y manipular. En el anexo C se muestran los modelos correspondientes a esta funcionalidad y en el anexo D se presenta una síntesis de la especificación SLD. Página 73 Capítulo 4 Implementación Página 74 CAPÍTULO 5 PRUEBAS En este capítulo se presentan los resultados de las pruebas realizadas al sistema. Capítulo 5 Pruebas Una de las últimas fases del ciclo de vida del software antes de entregar un programa para su explotación, es la fase de pruebas. El proceso de pruebas es un esfuerzo por parte del proyecto para asegurar que el software no tenga defectos. El plan de pruebas define el proceso, las estrategias y asigna los roles primordiales en la ejecución de pruebas. En el caso de MapWeb Designer las características que se probaron del sistema son las siguientes: Gestión de acceso al sistema: se probó que se realizara correctamente el registro de usuarios del sistema así como el acceso y denegación al mismo. Solicitud y visualización de mapas: se verificó que las solicitudes de mapas fueran correctas y que se visualizaran los mapas solicitados en el visor de mapas de la aplicación. Aplicación de estilos al mapa: se probó que la configuración de estilos definidos por el usuario y la generación del código XML correspondiente a la estilización del mapa se realizaran correctamente. Asociar mapa a plantilla de aplicación Web: se verificó que la plantilla Web elegida del catálogo de plantillas fuera creada conteniendo el mapa estilizado Publicación de la aplicación Web: se probó que los archivos necesarios para la ejecución de la aplicación en la Web fueran copiados en el contenedor Web. Visualización de la aplicación Web: se verificó la correcta ejecución y visualización de la aplicación Web publicada. Los casos de prueba que se presentan en este capítulo se encuentran descritos en el plan de pruebas del anexo E. Página 76 Capítulo 5 Pruebas 5.1 Resultados de las pruebas A continuación se muestran los resultados obtenidos en cada caso de prueba efectuado al sistema. Tabla 5.1. Caso de prueba MAPWEBDE-01.01 Registro de usuarios CASO DE PRUEBA: MAPWEBDE-01.01 Registro de usuarios. RESULTADO: Los datos ingresados a la página Registrarse.jsp se registraron satisfactoriamente en la base de datos del sistema MapWeb Designer. En la figura (5.1) se muestra la interfaz en la que se ingresan los datos del usuario. Figura 5.1. Interfaz en la que se proporcionan los datos del usuario En la figura (5.2) se muestra la tabla usuario de la base de datos del sistema. Figura 5.2. Usuario registrado en la base de datos del sistema En la figura (5.3) se ilustra la interfaz que se le proporciona al usuario cuando no ocurre ningún error al registrarse. Página 77 Capítulo 5 Pruebas Figura 5.3. Interfaz mostrada al registrar adecuadamente al usuario En la figura (5.4) se ilustra la interfaz que se le muestra al usuario cuando intenta registrarse con un login que ya se encuentra registrado en la base de datos. Figura 5.4. Interfaz mostrada al ingresar un login registrado OBSERVACIONES: Los datos ingresados por el usuario se registraron adecuadamente en la base de datos. Antes de registrar al usuario se encripta la clave para que no sea fácil de visualizar en la base de datos. El sistema muestra correctamente las excepciones del sistema. RESPONSABLE DE LA PRUEBA: Janet de Jesús García Alba Página 78 Capítulo 5 Pruebas Tabla 5.2. Caso de prueba MAPWEBDE-01.02 Autentificación al sistema CASO DE PRUEBA: MAPWEBDE-01.02 Autentificación al sistema. RESULTADO: El usuario registrado anteriormente pudo iniciar sesión sin problemas. En la figura (5.5) se ilustra la interfaz que se le muestra al usuario una vez que inicia sesión. Figura 5.5. Ingreso al sistema OBSERVACIONES: Al usuario se le muestran dos opciones: crear un nuevo proyecto y Abrir un proyecto existente. La opción crear nuevo proyecto permite que el usuario ingrese al catálogo de mapas que provee el WMS para realizar la solicitud de un mapa y posteriormente estilizarlo y publicarlo en la Web. La opción Abrir un proyecto existente muestra los mapas publicados por el usuario. RESPONSABLE DE LA PRUEBA: Janet de Jesús García Alba Tabla 5.3. Caso de prueba MAPWEBDE-01.03 Rechazo al inicio de sesión CASO DE PRUEBA: MAPWEBDE-01.03 Rechazo al inicio de sesión. RESULTADO: Se rechazo a cualquier usuario que no se encontraba registrado en el sistema. En la figura (5.6) se muestra la interfaz que se le presenta al usuario cuando se le niega el ingreso al sistema. La figura (5.7) muestra el mensaje de error que se le presenta al usuario cuando no se logra establecer conexión con la base de datos. Página 79 Capítulo 5 Pruebas Figura 5.6. Interfaz de rechazo al ingreso del sistema Figura 5.7. Interfaz de error de conexión con la base de datos OBSERVACIONES: En caso de que el manejador de base de datos no se encuentre en servicio el sistema notifica el error. RESPONSABLE DE LA PRUEBA: Janet de Jesús García Alba Página 80 Capítulo 5 Pruebas Tabla 5.4. Caso de prueba MAPWEBDE-01.04 Acceso al sistema CASO DE PRUEBA: MAPWEBDE-01.04 Acceso al sistema RESULTADO: El usuario registrado anteriormente pudo iniciar sesión sin problemas y visualizar el catálogo de mapas que provee el servidor WMS Geoserver. En la figura (5.8) se ilustra la interfaz que muestra los mapas disponibles en el servidor de mapas. Figura 5.8. Catálogo de mapas OBSERVACIONES: El catálogo de mapas es mostrado de acuerdo al sistema de referencia seleccionado por el usuario. RESPONSABLE DE LA PRUEBA: Janet de Jesús García Alba Página 81 Capítulo 5 Pruebas Tabla 5.5. Caso de prueba MAPWEBDE-02 Solicitud y visualización de mapas CASO DE PRUEBA: MAPWEBDE-02 Solicitud y visualización de mapas RESULTADO: El usuario pudo visualizar los mapas seleccionados del servidor de mapas Geoserver. En la figura (5.9) se muestra que el mapa de México es visualizado en el visor de mapas de la aplicación. A la derecha del visor de mapas se pueden observar los componentes de estilo que permiten modificar la apariencia del mapa visualizado de acuerdo a las necesidades de estilo del usuario. Figura 5.9. Visualización del mapa solicitado OBSERVACIONES: El mapa se muestra con un estilo predefinido. RESPONSABLE DE LA PRUEBA: Janet de Jesús García Alba Tabla 5.6. Caso de prueba MAPWEBDE-03.01 Estilizar líneas CASO DE PRUEBA: MAPWEBDE-03.01 Estilizar líneas RESULTADO: El usuario pudo visualizar la configuración de estilos de línea aplicados al mapa visualizado. Para cumplir con esta prueba, se realizaron dos configuraciones de estilo: la primera contempla la configuración de una línea sólida y la segunda de una línea punteada. En la figura (5.10) se muestra el mapa antes de ser personalizado. Al lado derecho del mapa se observa la configuración de estilo establecida por el usuario. Como primera prueba se solicitó un estilo de línea sólida de color azul, con un nivel de transparencia 1.0 y grosor de 1 punto. Página 82 Capítulo 5 Pruebas Figura 5.10. Estado del mapa antes de ser estilizado En la figura (5.11) se observa el resultado de la aplicación del estilo. Figura 5.11. Mapa después de aplicarle la configuración de línea sólida En la figura (5.12) se muestra la segunda prueba aplicada al sistema con un estilo punteado, de color azul, con un nivel de transparencia de 1.0 y con un grosor de 2 puntos. Página 83 Capítulo 5 Pruebas En esta prueba se requirió aumentar la escala del mapa para poder apreciar el punteado de las líneas Figura 5.12. Mapa después de aplicarle la configuración de línea punteada OBSERVACIONES: Para aplicar esta prueba se seleccionó el mapa de la vialidad de Cuernavaca. RESPONSABLE DE LA PRUEBA: Janet de Jesús García Alba Tabla 5.7. Caso de prueba MAPWEBDE-03.02 Estilizar polígonos CASO DE PRUEBA: MAPWEBDE-03.02 Estilizar polígonos RESULTADO: El usuario pudo visualizar la configuración de estilo aplicada a los polígonos del mapa visualizado. En la figura (5.13) se muestra el mapa antes de ser personalizado. Al lado derecho del mapa se observa la configuración de estilo establecida por el usuario, el cual define de color morado el relleno de los polígonos con un nivel de transparencia de 1.0; color rosa el contorno del polígono con un grosor de 2 puntos y un nivel de transparencia de 1.0. La figura (5.14) muestra el mapa después de aplicar el estilo configurado por el usuario. Página 84 Capítulo 5 Pruebas Figura 5.13. Mapa de México antes de ser personalizado Figura 5.14. Mapa de México con estilo personalizado OBSERVACIONES: Para aplicar esta prueba se seleccionó el mapa de México. RESPONSABLE DE LA PRUEBA: Janet de Jesús García Alba Página 85 Capítulo 5 Pruebas Tabla 5.8. Caso de prueba MAPWEBDE-03.03 Estilizar puntos CASO DE PRUEBA: MAPWEBDE-03.03 Estilizar puntos RESULTADO: El usuario pudo visualizar la configuración personalizada de los puntos. En la figura (5.15) se muestra el mapa antes de ser estilizado y a la derecha del mapa se observa la configuración de estilo a aplicar. La figura (5.16) muestra la apariencia del mapa una vez que se estableció la configuración mostrada en la figura (5.15). Figura 5.15. Puntos del mapa de México antes de ser personalizado Figura 5.16. Puntos con estilo personalizado Página 86 Capítulo 5 Pruebas En la figura (5.17) se muestra el resultado de la configuración de estilo de simbolizaciones puntuales utilizando símbolos gráficos. Figura 5.17. Puntos personalizados utilizando un gráfico OBSERVACIONES: Para cumplir con esta prueba se realizaron dos configuraciones de estilo: la primera contempló una configuración utilizando “nombres bien conocidos” por la especificación SLD (ver esquema XML de Mark en anexo D) y la segunda contempló la configuración de estilo puntual utilizando símbolos gráficos (ver esquema XML de ExternalGraphic en anexo D ). Para aplicar esta prueba se seleccionó el mapa de México. RESPONSABLE DE LA PRUEBA: Janet de Jesús García Alba Tabla 5.9. Caso de prueba MAPWEBDE-03.04 Estilizar texto CASO DE PRUEBA: MAPWEBDE-03.04 Estilizar texto RESULTADO: El usuario pudo visualizar las configuraciones personalizadas de las etiquetas del mapa. Para realizar esta prueba se realizaron tres tipos de configuraciones de estilo: Configuración 1: se estableció la etiqueta NAME con el tipo de letra Arial Narrow en itálica y negrita de tamaño 12 y color negro sin sombra utilizando una ubicación puntual de X=0 (AnchorPointX) y Y=0 (AnchorPointY) con un desplazamiento X=0 (DisplacementX) y Y=0 (DisplacementY) a un grado de rotación. Configuración 2: se estableció la etiqueta NAME con el tipo de letra Baskerville Old Face en estilo normal y negrita de tamaño 13 de color verde y sombra amarilla con 4 puntos de grosor utilizando una ubicación puntual de X=0.5, Y=0.5 sin desplazamiento (X=0,Y=0) a veinte grados de rotación. Configuración 3: etiqueta NOMBRE con el tipo de letra Times New Roman en estilo normal y negrita de tamaño 13 de color negro sin sombra y con una ubicación lineal de uno. Página 87 Capítulo 5 Pruebas En la figura (5.18) se observa el mapa de México antes de estilizar el texto y en la figura (5.19) se presenta el mapa de México con la aplicación del estilo textual definido en la configuración 1. Figura 5.18. Mapa de México antes de personalizar el texto Figura 5.19. Mapa con personalización de texto utilizando la ubicación PointPlacement. Página 88 Capítulo 5 Pruebas En la figura (5.20) se observa el mapa de México antes de estilizar el texto y en la figura (5.21) se presenta el mapa de México después de aplicar el estilo textual definido en la configuración 2. Figura 5.20. Mapa de México antes de aplicar la configuración de texto Figura 5.21. Mapa de México que muestra el estilo de texto con rotación Página 89 Capítulo 5 Pruebas En la figura (5.22) se observa el mapa de la vialidad de Cuernavaca antes de estilizar el texto y en la figura (5.23) se presenta el mapa de la vialidad de Cuernavaca después de aplicar el estilo textual definido en la configuración 3. Figura 5.22. Mapa de la vialidad de Cuernavaca antes de aplicar estilo de texto Figura 5.23. Mapa con personalización de texto utilizando la ubicación LinePlacement. Página 90 Capítulo 5 Pruebas En la figura (5.24) se muestra la vialidad de Cuernavaca a una escala mayor para apreciar mejor la posición del texto Figura 5.24. Mapa de Morelos que muestra la estilización del texto OBSERVACIONES: Para aplicar esta prueba se utilizó el mapa de México y el mapa de la vialidad de Cuernavaca. RESPONSABLE DE LA PRUEBA: Janet de Jesús García Alba Tabla 5.10. Caso de prueba MAPWEBDE-03.05 Generación de Código XML CASO DE PRUEBA: MAPWEBDE-03.05 Generación de Código XML RESULTADO: El documento XML se crea de manera satisfactoria. Para realizar este caso de prueba se solicitó el mapa de México y se aplicaron configuraciones de estilo de tipo punto, línea, polígono y texto. En la figura (5.25) se muestra un fragmento del documento XML que sigue la especificación SLD y que describe los estilos aplicados al mapa de México. En la figura (5.26) se ilustra el mapa de México que tiene aplicados los estilos definidos en el documento XML. Página 91 Capítulo 5 Pruebas Figura 5.25. Documento SLD Figura 5.26. Mapa que muestra el estilo descrito en el documento SLD OBSERVACIONES: Para aplicar esta prueba se aplicó una configuración de estilo al mapa de México. RESPONSABLE DE LA PRUEBA: Janet de Jesús García Alba Página 92 Capítulo 5 Pruebas Tabla 5.11. Caso de prueba MAPWEBDE-04 Asociar mapa a plantilla de página Web CASO DE PRUEBA: MAPWEBDE-04 Asociar mapa a plantilla de página Web RESULTADO: El sistema creó el código de la plantilla con el mapa asociado de forma satisfactoria. En la figura (5.27) se muestra el valor de la variable tempText que almacena el código de la página que contiene el mapa estilizado. Figura 5.27. Variable tempText que contiene la plantilla de aplicación Web y el mapa solicitado OBSERVACIONES: En el debug realizado al sistema se pudo verificar que se creó el código de la plantilla con el mapa asociado. RESPONSABLE DE LA PRUEBA: Janet de Jesús García Alba Tabla 5.12. Caso de prueba MAPWEBDE-05 Publicación de la página Web CASO DE PRUEBA: MAPWEBDE-05 Publicación de la página Web RESULTADO: en la carpeta Web del usuario se almacenaron los archivos necesarios para la publicación del mapa. En la figura (5.28) se observan los archivos almacenados en la carpeta Web del usuario. Figura 5.28. Carpeta Web del usuario OBSERVACIONES: Cada publicación que realiza un usuario se almacena en la carpeta Web personal. RESPONSABLE DE LA PRUEBA: Janet de Jesús García Alba Página 93 Capítulo 5 Pruebas Tabla 5.13. Caso de prueba MAPWEBDE-06 Visualización de la página Web CASO DE PRUEBA: MAPWEBDE-06 Visualización de la página Web RESULTADO: El usuario pudo visualizar la aplicación Web publicada. En la figura (5.29) se muestra el prototipo de aplicación Web que eligió el usuario para publicar el mapa estilizado. Figura 5.29. Plantilla de estilo publicado en la Web OBSERVACIONES: sin observaciones RESPONSABLE DE LA PRUEBA: Janet de Jesús García Alba De los casos de prueba anteriores (pruebas de unidad) se puede observar el funcionamiento correcto de cada uno de los módulos programados. A continuación se presenta la prueba de integración (no contemplada en el plan de pruebas) con la finalidad de mostrar el funcionamiento general del sistema, tomando en cuenta que el usuario ya se encuentra registrado. Página 94 Capítulo 5 Pruebas Tabla 5.14. PRUEBA DE INTEGRACION-Funcionamiento general del sistema PRUEBA DE INTEGRACION: Funcionamiento general del sistema RESULTADO: El usuario pudo realizar cada una de las funciones del sistema obteniendo buenos resultados. En la figura (5.30) se muestra el inicio de sesión del usuario. Cuando el usuario inicia correctamente se le muestran las opciones que se ilustran en la figura (5.31). Figura 5.30. Interfaz para iniciar sesión Figura 5.31. Interfaz de opciones a elegir en una sesión activa Página 95 Capítulo 5 Pruebas Si el usuario desea crear un nuevo proyecto se le proporciona el catálogo de mapas (ver figura 5.32). En caso contrario si desea abrir un proyecto existente, se le proporciona la interfaz de la figura (5.41). En la figura (5.32) se observa que el usuario eligió el mapa llamado Mexico:AliasMexico. Figura 5.32. Interfaz del catálogo de mapas que provee el WMS La figura (5.33) ilustra el mapa Mexico:AliasMexico sin ningún estilo definido por el usuario. Figura 5.33. Mapa de México sin estilos definidos por el usuario Página 96 Capítulo 5 Pruebas En la figura (5.34) se observa el resultado de la configuración de estilo de tipo PUNTO realizada por el usuario. Figura 5.34. Estilización de puntos En la figura (5.35) se muestra el resultado de la configuración tipo LINEA realizada por el usuario. Figura 5.35. Estilización de líneas En la figura (5.36) se presenta el resultado de la configuración de tipo POLIGONO realizada por el usuario. Página 97 Capítulo 5 Pruebas Figura 5.36. Estilización de polígonos En la figura (5.37) se muestra el resultado de la configuración tipo TEXTO realizada por el usuario. Figura 5.37. Estilización de texto Las configuraciones de estilo aplicadas al mapa de México se ven reflejadas en un documento XML que sigue la especificación SLD. En la figura (5.38) se muestra una parte del documento. Página 98 Capítulo 5 Pruebas Figura 5.38. Documento XML que describe los estilos definidos por el usuario Cuando el usuario termina de estilizar el mapa, el sistema le proporciona un catálogo de plantillas de aplicaciones Web para que pueda publicarlo en la red. En la figura (5.39) se muestra las plantillas disponibles en el sistema. Figura 5.39. Elección de plantilla Web Una vez que el usuario elige la plantilla procede a asociar el mapa y publicarlo en la Web. En la figura (5.40) se muestra el mapa publicado. Página 99 Capítulo 5 Pruebas Figura 5.40. Publicación del mapa en plantilla de aplicación Web En la figura (5.41) se presenta la interfaz que lista las publicaciones realizadas por el usuario. Figura 5.41. Publicaciones realizadas por el usuario OBSERVACIONES: sin observaciones RESPONSABLE DE LA PRUEBA: Janet de Jesús García Alba Página 100 Capítulo 5 Pruebas 5.2 Análisis de resultados Las pruebas realizadas al sistema MapWeb Designer fueron de tipo funcional, es decir, pruebas que buscan verificar que las funciones del sistema sean correctas. En primera instancia se hicieron pruebas de unidad, las cuales permitieron verificar que cada módulo del sistema funcionara de manera correcta. Posteriormente se realizaron pruebas de integración para verificar que todos los módulos programados interactuaran y funcionaran sin problemas. Con respecto a los resultados obtenidos de las pruebas se menciona lo siguiente: Para visualizar un mapa que contenga varias capas, se requiere que todas se encuentren en extensiones territoriales cercanas, de lo contrario no se visualizarán de manera inmediata en el visor de mapas (OpenLayers). Para lograr verlas, se requiere buscarlas utilizando los componentes de interacción que proporciona OpenLayers. Partiendo de ésto y pensando en que los usuarios del sistema no están familiarizados con términos geográficos, se optó por solo permitir que el usuario seleccione una capa a la vez y así evitar la confusión de que el sistema no muestra todos los mapas que se eligen. Las configuraciones de estilo que proporciona el usuario permiten construir el documento XML conforme a la especificación SLD. Es importante que el usuario conozca que el orden en que sean realizadas las configuraciones de estilo, es el mismo que se sigue para escribir el documento XML. Considerando que los estilos se dibujan siguiendo la secuencia descrita en el documento XML, el usuario observará en algunas ocasiones empalmes entre objetos. Cuando el visor de mapas trata de procesar mapas que contienen mucha información, éste se vuelve lento dependiendo mucho de las capacidades del equipo del cliente. Página 101 Capítulo 5 Pruebas Página 102 CAPÍTULO 6 CONCLUSIONES En este capítulo se exponen las conclusiones a las que se llegaron al desarrollar el presente proyecto de tesis. Se mencionan también las aportaciones y trabajos futuros. Capítulo 6 Conclusiones Con la elaboración de la presente investigación se establecen las siguientes conclusiones: Se demostró con el desarrollo de la aplicación MapWeb Designer que es posible interactuar y diseñar la apariencia de mapas geográficos utilizando el estándar XML y un API de código abierto que permite el acceso a servidores de mapas. MapWeb Designer utiliza la especificación Styled Layer Descriptor (SLD) para permitir obtener de manera rápida y automática un documento XML que describe los estilos definidos por el usuario. Al utilizar la especificación SLD, se garantiza que el documento de estilo generado por MapWeb Designer, es legible por herramientas que cumplen con las especificaciones WMS y SLD de la OGC. MapWeb Designer utiliza un API visora de mapas (OpenLayers) y un servidor WMS (Geoserver) de código abierto. Esto hace que la aplicación no dependa de software GIS propietario que es costoso y complejo de utilizar. El uso del API de OpenLayers (ver anexo A) permite que MapWeb Designer pueda en un futuro utilizar mapas remotos provenientes de múltiples servidores de mapas como Google maps, Yahoo maps y Mapserver. Esto gracias a que es un API independiente del servidor de mapas. Utilizar el servidor de mapas (WMS) Geoserver, permite subir de manera sencilla y rápida mapas vectoriales. Esto gracias a que proporciona una interfaz amigable en comparación con los demás servidores estudiados. Por lo que es recomendable utilizarlo cuando el objetivo de la investigación no sea profundizar en la funcionalidad de los servidores de mapas. La ventaja de realizar una aplicación como MapWeb Designer es permitir el acceso y manipulación de mapas de manera remota a múltiples usuarios situados en diversas áreas del mundo. Los usuarios pueden ingresar al sistema y manipular los mapas a sus conveniencias, haciendo transparente la construcción del documento SLD y las peticiones al servidor WMS, ya que no es necesario que el usuario conozca los tags de la especificación SLD y el funcionamiento de los servidores de mapas. Por otro lado, durante el desarrollo del trabajo surgieron varios problemas, siendo el principal el de la renderización de mapas del lado del cliente. En principio se había planteado solicitar los mapas al WMS en formato GML, pero debido a que la API no soportaba archivos grandes se optó por solicitar los mapas en formato imagen. Este cambio se vio reflejado en los parámetros de la petición GetMap, ya que el documento SLD ya no fue asociado con funciones de la API, sino que se mandó como parámetro al servidor de mapas por medio de SLD_BODY. Para visualizar un mapa que contenga varias capas, se requiere que soporten niveles de transparencia para poder superponerlas. El problema de esto surge cuando estas capas se encuentran en extensiones territoriales diferentes, y crea la idea de que del sistema no carga todas las capas. Es por eso que se optó por permitir que los usuarios Página 104 Capítulo 6 Conclusiones seleccionaran un mapa a la vez con el objetivo de evitar la confusión de que el sistema no muestra todos los mapas que se eligen. Con respecto a las pruebas aplicadas al sistema, éstas fueron de tipo funcional y se definieron en el plan de pruebas (ver anexo E). Los resultados que se obtuvieron fueron los esperados, por lo que se cumplió el objetivo de la tesis y la hipótesis planteada en el plan de pruebas. Aportaciones Las aportaciones del presente trabajo de tesis son: Haber programado una aplicación Web estilizadora y publicadora de mapas geográficos que hasta el momento no se encuentra en el mercado. Esta aplicación genera de manera automática un archivo SLD que describe los estilos aplicados a un mapa en particular. Está programada siguiendo el patrón MVC de Java (Struts) con la finalidad de reducir costos de depuración y pruebas. Además fue desarrollada utilizando exclusivamente software libre Se contribuyó con la investigación de tecnologías geográficas las cuales son importantes de conocer para todo aquél que desee trabajar con información espacial. Se programó un proxy que permite acceder a los atributos de un mapa. Este proxy se implementó en un servlet el cual aporta más ventajas que el CGI que sugiere OpenLayers. Trabajos futuros El presente trabajo cumplió con el objetivo de estilizar y publicar mapas geográficos a través de la Web. Sin embargo se le pueden incluir más servicios que convendría en un futuro se pudieran implementar: Implementar filtros avanzados mediante la incorporación de la especificación Filter Encoding para poder definir reglas de estilo que afecten de manera individual a cada característica del mapa. Con esto se obtendría un mapa estilizado con simbologías complejas. Creación de interfaces que permitan realizar consultas georeferenciables y no georeferenciables sobre el mapa para poder encontrar puntos de interés cercanos a una ubicación. Creación de mecanismos para la búsqueda de rutas óptimas. Generación de código que permita introducir los mapas estilizados en forma de Widget a cualquier página personal. Incorporación de componentes que permitan dibujar objetos sobre los mapas visualizados. Implementar la funcionalidad de almacenar los estilos definidos por el usuario al servidor. Página 105 Capítulo 6 Conclusiones Implementar la parte de obtención de la leyenda de los mapas estilizados. Página 106 ANEXOS ANEXOS Página 108 ANEXO A Evaluación de APIs visoras de mapas Anexo A. Evaluación de APIs visoras de mapas 1. Introducción El presente documento reporta la evaluación de APIs visoras de mapas las cuales permiten visualizar mapas provenientes de servidores de mapas. El objetivo de esta actividad fue elegir la API que se integrará en el sistema MapWeb Designer. Para cumplir con el objetivo se instalaron las APIs y se realizaron pruebas de solicitud de mapas a servidores. 2. Características de APIs visoras de mapas de código libre. 2.1. msCross [DATACROSSING. 2007] Es un cliente Web Ajax, desarrollado como interfaz JavaScript para UMN MapServer. Fue desarrollado para permitir a los usuarios visualizar dinámicamente capas de información geográfica en la Web. Sus características principales son: Es de software libre, distribuido bajo la licencia GPL. Funciona del lado del cliente. Corre en múltiples plataformas. No requiere instalación (es sólo un archivo JavaScript). Se puede personalizar y extender. Está basado en Ajax (JavaScript y XML Asíncronos). Soporta a UMN Mapserver en modo CGI. Soporta WFS para capas de puntos, es decir, devuelve información de los puntos. Soporta WMS. Se puede realizar peticiones siguiendo el estándar WMS. Provee una barra de herramientas de personalización. Permite la depuración (debug). Ha sido probado en Mozilla Firefox >= 1.0.5, Internet Explorer >=6.0 y Opera >=8.51. A continuación se muestra un ejemplo de solicitud de un mapa, utilizando la API de msCross. Para visualizar un mapa en msCross es necesario tener instalado MapServer o bien conocer la ruta de los servidores MapServer externos para hacer la petición. Una vez cumpliendo este requisito se siguen los siguientes pasos: 1. Crear un documento HTML o JSP e incluir la librería msCross (ver figura A.1). Figura A.1. Referencia a la librería msCross 2. Crear un elemento DIV con un identificador. En este caso se identificó como aqui_va_el_mapa. Posterior a esto se realiza la petición al servidor tal y como se indica en la figura (A.2). Página 110 Anexo A. Evaluación de APIs visoras de mapas Figura A.2. Definición de elemento DIV y solicitud a servidor de la NASA 3. Correr la aplicación y visualizar el mapa (ver figura A.3) Figura A.3. Visualización de mapas 2.2. OpenLayers [OPENLAYERS, 2008] OpenLayers es una API codificada en JavaScript usada para poner fácilmente mapas dinámicos en páginas y aplicaciones Web y se ejecuta en los navegadores modernos sin dependencias del lado del servidor. Permite mostrar porciones de mapa y marcadores cargados de cualquier fuente e implementa la tecnología AJAX para la interacción con los mapas. Metacarta fue quien desarrolló la primera versión de OpenLayers y lo abrió al público. Es totalmente gratuito pues fue liberado bajo la licencia BSD. OpenLayers permite construir mashups con información geográfica similares a los mashups de Google Maps y MSN Earth. Implementa métodos estándar como WMS, WFS, WFS-T para acceder a datos geográficos y SLD para estilos. Fue desarrollado con el fin de obtener una cartografía similar a la de Google Maps y Virtual Earth API Sus características principales son: Es cliente ligero de cartografía. Es interactivo (permite zoom in, zoom out, paneo, visualización de coordenadas, habilitado y deshabilitado de capas) Permite cargar mapas provenientes de diferentes servidores. Página 111 Anexo A. Evaluación de APIs visoras de mapas No requiere instalación. Soporta WMS, WFS, WFS-T, SLD del la OGC. En su versión más reciente (versión 2.6) incorpora características muy potentes que mejoran la interacción con el usuario. Estas mejoras son: soporta reproyección del lado del cliente; soporta la lectura y escritura de varias versiones de WMC; y el paneo de las capas comerciales lo hace como Google Maps y Yahoo Maps; (The OpenLayers Team, 2008). A continuación se ejemplifica la solicitud de un mapa por medio de OpenLayers. La solicitud de mapas utilizando OpenLayers se realiza de la siguiente manera: 1. Crear un documento HTML o JSP e incluir la librería OpenLayers.js (ver figura A.4). Figura A.4. Referencia a la librería OpenLayers 2. En una función crear un objeto tipo mapa con opciones de configuración (por ejemplo: sistema de referencia y extensión territorial). Al objeto mapa se le asignarán las capas que se deseen (ver figura A.5). Figura A.5. Creación de objeto mapa 3. Dentro de la función definida en el paso 2, realizar la petición a los servidores que se deseen ya que OpenLayers permite realizar solicitudes a varios servidores de mapas. En este caso se hizo solicitud al servidor de mapas Geoserver (ver figura A.6). Nota: dentro de la función también es posible definir los controles para la manipulación del mapa. Figura A.6. Solicitud al servidor Geoserver utilizando OpenLayers 4. Añadir la solicitud anterior al objeto mapa creado en el paso 2 (ver figura A.7). Página 112 Anexo A. Evaluación de APIs visoras de mapas Figura A.7. Adición de la capa México al objeto map 5. Una vez definida la función de inicialización. Se define un elemento DIV en el documento HTML o JSP, según sea el caso, con un identificador. Esto se realiza para indicarle a OpenLayers dónde mostrar el mapa (ver figura A.8). Figura A.8. Elemento DIV con identificador map 6. En el evento onload de la etiqueta body llamar a la función init() implementada en el paso 2. Figura A.9. Llamada de la función init() 7. Ejecutar la aplicación en un servidor Web (ver figura A.10). Figura A.10. Mapa de México visualizado utilizando OpenLayers Página 113 Anexo A. Evaluación de APIs visoras de mapas 2.3. Ka-Map [MapTools, 2008] Ka-Map es un proyecto de código libre que proporciona un API JavaScript para desarrollar interfaces de mapas Web. Desarrollado en AJAX y PHP. Tiene escalas de zoom prefijadas, de forma que se mantiene en un caché de imágenes sobre las capas ya combinadas, acelerando el proceso de visualización sin que sea necesaria la intervención del servidor de mapas. Puede ser distribuido en live CD o DVD. Las principales características son: Es interactivo, permite paneo continuo sin necesidad de recargar la página. Proporciona navegación desde el teclado (zoom, paneo). Provee escalas de zoom predefinidas. Soporta la visualización de mapa clave, barra de escala y leyendas. Permite controlar las capas desde el cliente, es decir, se pueden hacer visibles o invisibles las capas deseadas. Presume ser estable en cualquiera de los navegadores modernos. Permite que cualquier persona contribuya a añadir nuevas funcionalidades y reportar errores. No es bueno para cantidades grandes de datos. Ka-Map es un API creada para visualizar mapas de UMN MapServer. Este servidor se encarga del tratamiento, programación y generación de mapas en el cual una serie de scripts PHP proporcionados por Ka-Map gestionan las respuestas de MapServer. Ka-Map por su parte, proporciona un API en JavaScript para realizar las peticiones de datos desde una variedad de navegadores (ver tabla A.1). Tabla A.1. Navegadores soportados por Ka-Map Fuente: Paul Spencer, 2006 NAVEGADOR Internet Explorer Mozilla/Firefox WINDOWS LINUX MAC OS X Si(6) - - Si(1.0+) Si(1.0+) Si(1.0+) Netscape Si(7+) Si(7+) Si(7+) Epiphany - Si - Si(7+) Si(7+) Si(7+) Konqueror - No - Safari - - Si Opera A continuación se expone un ejemplo de visualización de mapas con Ka-Map. Para visualizar un mapa de MapServer utilizando Ka-Map se requiere configurar lo siguiente: 1. 2. 3. Instalar y configurar MapServer con Apache. Descargar Ka-Map de http://ka-map.maptools.org/ (página oficial). En esta prueba se descargó la versión 1.0. Copiar todos los archivos, directorios y subdirectorios de htdocs situados en /ka-mapms4w-1.0/ms4w/apps/ka-map-1.0/ a la carpeta /ms4w/Apache/htdocs/Ka-Map. Página 114 Anexo A. Evaluación de APIs visoras de mapas 4. 5. 6. Descargar y descomprimir el paquete gmap-ms46 de http://dl.maptools.org/dl/ para cargar mapas predefinidos por Ka-Map y copiar los archivos en /ms4w/Apache/htdocs/Ka-Map/ gmap-ms46. En la carpeta gmap-ms46/htdocs se encuentran varios archivos .map predefinidos para visualizarlos en Ka-Map. En el archivo de configuración config.php asegurarse si la variable $aszGMap apunta a la dirección correcta de instalación de gmap75.map. Una vez realizadas las configuraciones anteriores se procede a realizar el archivo HTML en el que se invocarán las librerías necesarias para la codificación de funciones que se encargarán de visualizar un mapa. En la figura (A.11) se observa la visualización de un mapa utilizando el API de Ka-Map. Figura A.11. Visualización de mapas con Ka-Map 2.4.WMS JavaScript Library [WMSJALI, 2008] WMS Java Script Library (wmsmap.js) es una librería JavaScript que facilita la creación de mapas dinámicos utilizando servidores de mapas. Por ejemplo, para crear un mapa dinámico equivalente a la petición HTTP GET http://www.idee.es/wms/IDEE-Base/IDEEBase?VERSION=1.1.0&REQUEST=GetMap&LAYERS=Relieve, se necesita incluir la librería JavaScript; definir un objeto Layer; crear un nuevo objeto mapa y asociarlo con un elemento DIV de un documento HTML. Es una librería inspirada por Ka-Map y la API de Google Maps. Visualiza mapas provenientes de servidores MapServer y Geoserver. Además utiliza Prototype.js el cual es utilizado para crear aplicaciones web dinámicas. Página 115 Anexo A. Evaluación de APIs visoras de mapas La documentación que presenta en su sitio es nula pues únicamente muestra cinco ejemplos de solicitudes de mapas y las funciones del API no están documentadas. A continuación se muestra un ejemplo de solicitud y visualización del mapa de México a MapServer. Para publicar un mapa utilizando WMS JavaScript Library se requiere: 1. Construir un archivo HTML o JSP en el que se incluyan las librerías: prototype.js, dragdrop.js, util.js, example_layers.js y wmsmap.js según se vayan requiriendo. En el archivo example_layers.js se codifican las solicitudes a los servidores de mapas tal como se muestra en la figura (A.12). Figura A.12. Creación de petición a WMS. 2. En el documento HTML ó JSP, según sea el caso, definir un elemento DIV con un identificador (en este caso map) para indicar que en ése lugar del documento será mostrado el mapa (ver figura A.13). Figura A.13. Definición de elemento DIV 3. Definir una función llamada init() en el que se definirá el objeto mapa para que éste invoque la capa definida anteriormente (ver figura A.14). Figura A.14. Definición de función init() 4. Finalmente invocar la función init() en el evento onload del elemento body (ver figura A.15). Figura A.15. Invocación de función init() 5. Para visualizar el mapa ejecutar la aplicación en un servidor Web si se trata de un documento HTML, o en un contenedor Web en caso de documentos JSP. En nuestro caso se desarrolló un documento JSP, por lo que se tuvo que ejecutar en Apache Página 116 Anexo A. Evaluación de APIs visoras de mapas Tomcat. En la figura (A.16) se observa el mapa de México visualizado sobre el API WMS JavaScript Library. Figura A.16. Mapa visualizado en WMS JavaScript Library 2.5.Mapbuilder MapBuilder permite añadir mapas dinámicos e información de muchas otras fuentes para un sitio Web. La filosofía de diseño de MapBuilder es minimizar los requisitos del servidor, pero para una aplicación Web es necesario un servidor Web para servir las páginas como mínimo. MapBuilder es una librería JavaScript que implementa el patrón de diseño Modelo-VistaControlador (MVC). Los objetos Modelo, Vista y Controlador que se utilizarán en la página Web se configura en un archivo XML. [MAPBUILDER, 2007] Las principales características son [HONCEVAR, 2007]: ● Cliente ligero de cartografía. ● Soporta estándares del Open Geospatial Consortium (OGC). ● Dibuja mapas provenientes de Web Map Services (WMS), Web Feature Services (WFS), GeoRSS y Google Maps. ● Soporta funciones de edición de mapas mediante el uso de Web Features Services (WFS-T). ● Permite a los usuarios construir sus propios mapas, guardarlos y compartirlos utilizando Web Map Context (WMC, Solo soportado para mapas proporcionados por un WMS) y Open Web Services Context (OWS Context es similar a WMC sólo que puede almacenar más capas WMS. Las capas pueden provenir de WMS, WFS, GML, GeoRSS y posiblemente fuentes externas). ● Es rápido e interactivo pues fue construido usando AJAX. ● Funciona con la mayoría de los navegadores modernos (Firefox 1.0+, Internet Explorer 6.0+, Mozilla 1.3+, Navigator 6+) ● Personalizable y fácil de extender. ● De código abierto bajo la licencia LGPL. Página 117 Anexo A. Evaluación de APIs visoras de mapas ● No requiere plugins. En su versión más reciente (versión 1.5) incorpora OpenLayers para la renderización de los mapas. Esto debido a que en septiembre de 2006 durante el FOSS4G (Free and Open Source Software for Geospatial) varios proyectos de WebMapping se reunieron y decidieron en una sola biblioteca para renderizar mapas. Como consecuencia de ello MapBuilder sustituye su biblioteca MapPane.js y MapPane2.js por MapPaneOL.js. Para visualizar mapas utilizando la API Mapbuilder se siguen los siguientes pasos: 1. En un archivo HMTL o JSP se incluye la librería Mapbuilder.js (ver figura A.17). Figura A.17. Referencia a la librería Mapbuilder.js 2. Posteriormente se crea un elemento DIV con identificador (en este caso se usó mainMapPane ) y en el evento onload de la etiqueta body se manda llamar la función mbDoLoad() la cual es una función de Mapbuilder que se encarga de abrir y leer el archivo de configuración (en el paso 3 se describe el archivo de configuración) . Este archivo se referencía asignando la URL a la variable mbConfigUrl (ver figura A.18). Figura A.18. Configuraciones utilizadas en documentos HTML o JSP 3. El archivo de configuración es un archivo XML que utiliza etiquetas definidas en el archivo config.xsd (Ver figura A.19) para describir los modelos que contendrá el mapa a visualizar, es decir, describe que componentes (zoom in, zoom out, paneo, etc.) se desean incorporar al mapa. En la figura (A.20) se muestra un trozo de código que define las características del mapa a visualizar. El archivo demisWorldMap.xml (ver figura A.21) contiene las peticiones a los servidores de mapas. Página 118 Anexo A. Evaluación de APIs visoras de mapas Figura A.19. Trozo de código XML del archivo config.xsd Figura A.20. Archivo de configuración Página 119 Anexo A. Evaluación de APIs visoras de mapas Figura A.21. Trozo de código XML del archivo demisWorldMap.xml 4. Si se realizan correctamente los pasos anteriores se visualizará un mapa tal y como se muestra en la figura (A.22). Figura A.22. Mapa visualizado en Mapbuilder 3. Definición de metodología de evaluación Para realizar la evaluación de las APIs anteriormente mencionadas se llevaron a cabo los siguientes pasos: 1. Definir criterios de evaluación, es decir, qué características debe cumplir la API para utilizarla en el proyecto (ver tabla A.2). Tabla A.2. Definición de criterios CRITERIOS Característica 1 Característica 2 Característica N Página 120 Anexo A. Evaluación de APIs visoras de mapas 2. Asignar ponderaciones a cada criterio en un rango del 1 al 5 tomando como base la importancia de cada una de éstas en el proyecto (ver tabla A.3). . Tabla A.3. Asignación de ponderaciones a cada criterio CRITERIOS PONDERACIÓN 5 Característica 1 3 Característica 2 1 Característica N 5: más importante, 1: menos importante 3. Evaluar cada API de acuerdo a los criterios que se definieron en el paso 1. La forma de evaluar cada característica es asignar una calificación del 1 al 10 de acuerdo a que tanto cumple con los requerimientos (ver tabla A.4) y si se desea se pueden incluir observaciones en cada asignación de calificación. Tabla A.4. Asignación de calificaciones a cada API de acuerdo a los criterios CRITERIOS Característica 1 Característica 2 Característica N PESO API-1 CALIFICACIÓN API-2 CALIFICACIÓN 5 10 3 5 1 8 10: más importante, 1: menos importante 1 4 2 4. Obtener el producto de cada una de las características y ponderaciones asignadas a las mismas para obtener un subtotal (ver tabla A.5). Tabla A.5. Obtención de productos por criterio CRITERIOS PESO API 1 API 2 50 Califiic. 1 Subtotal 5 Calific. 10 Subtotal Característica 1 Característica 2 3 5 15 4 12 Característica N 1 8 8 2 2 5 5. Realizar la sumatoria por API de los subtotales obtenidos en el paso 4 (ver tabla A.6). Tabla A.6. Obtención de sumatorias por API CRITERIOS PESO API 1 API 2 50 Califiic. 1 Subtotal 5 Calific. 10 Subtotal Característica 1 Característica 2 3 5 15 4 12 Característica N 1 8 8 2 2 TOTAL - 73 5 19 6. Comparar los resultados del paso 5 y elegir la API que más puntaje tenga (ver figura A.23). Página 121 Anexo A. Evaluación de APIs visoras de mapas Figura A.23. Gráfico comparativo de la evaluación de las APIs 4. Desarrollo de la metodología de evaluación A continuación se desarrollan los pasos definidos en la metodología de evaluación con las APIs mencionadas al principio del documento. Paso 1. Definición de criterios de evaluación Para elegir el visor mapas que se usará en el proyecto, se definieron los siguientes criterios para realizar la evaluación de las APIs: Código abierto: se requiere tener total libertad de uso del código fuente del visor de mapas por si en un caso determinado se necesita adaptar una función del API para cumplir la finalidad del proyecto. Buena documentación: el API debe estar bien documentada y mostrar ejemplos que permitan aprender su uso de manera rápida. Codificado en JAVA: el API debe de estar implementado en este lenguaje debido a que el proyecto de tesis se basa en la especificación J2EE. Seguir las especificaciones de la OGC: el API debe estar implementada siguiendo las especificaciones SLD, WMS y WFS para proporcionar un ambiente estandarizado. Permitir recuperar mapas de diferentes fuentes: el producto final de la tesis únicamente trabajará con los mapas provenientes de un servidor de mapas, pero para no dejar limitado el proyecto, es necesario utilizar un API que visualice mapas de diferentes servidores de mapas. Sencillo de usar: se requiere que sea fácil de utilizar para evitar invertir tiempo en instalar o configurar el API en caso que así se requiera. Paso 2. Asignación de ponderaciones De acuerdo al nivel de importancia que tienen los criterios mencionados en el paso 1, se asignan los siguientes pesos: Página 122 Anexo A. Evaluación de APIs visoras de mapas Tabla A.7. Asignación de ponderaciones a cada criterio CRITERIOS Código abierto Buena documentación Codificado en JAVA Cumplir con especificaciones OGC Permitir recuperar mapas de diferentes fuentes PONDERACIÓN 5 4 5 4 3 4 Sencillo de usar Paso 3,4 y5. Asignación de calificaciones, producto de calificación-peso y sumatoria En la tabla (A.8) se presenta la matriz de evaluación de las APIS. Las calificaciones mostradas se asignaron de acuerdo a la experiencia obtenida al realizar solicitudes de mapas con las APIs mencionadas al inicio del documento. Paso 6. Comparar resultados En la figura (A.24), se observa que la API OpenLayers es quien más puntaje presenta. Mapbuilder puede ser también buena alternativa, pero por la ventaja de 20 puntos de OpenLayers no es posible elegirla. De acuerdo a los resultados obtenidos y tomando en cuenta que OpenLayers se ha convertido en un API estándar para renderizar mapas, el API adecuada a utilizar en el proyecto es OpenLayers. Gráfica de resultados 300 250 250 230 200 150 171 168 181 100 50 0 msCross OpenLayers Ka-Map WMS JavaScript Library Mapbuilder Figura A.24. Resultados de la evaluación de APIs Página 123 Anexo A Tabla A.8. Matriz de evaluación CRITERIOS Código abierto P E S O 5 OpenLayers msCross Ka-Map WMS JavaScript Library MapBuilder C Obser S C Obser S C Obser S C Obser S C Obser S 10 Permite bajar el código del API en su sitio Web 50 10 Permite bajar el código del API 50 10 Permite bajar el código del API 50 10 Permite bajar el código del API 50 10 Permite bajar el código del API 50 20 10 Provee variedad de ejemplos y cada función del API está documentada 40 9 Provee ejemplos y las funciones del API documentadas 36 2 Provee 5 ejemplos y no documenta la API 8 10 Proporciona ejemplos útiles para aprender sobre las funciones del API 40 Buena documentación 4 5 Documenta sólo algunas funciones del API Codificado en Java 5 10 Está escrito en JavaScript 50 10 Está escrito en JavaScript 50 5 Está escrito en Java y PHP 25 10 Está escrito en JavaScript 50 10 Está escrito en JavaScript 50 Cumplir con especificaciones OGC 4 5 No soporta la especificación SLD 20 10 Soporta WMS, WFS y SLD 40 10 Soporta WMS, WFS y SLD 40 5 Soporta WMS y WFS 20 10 Soporta WMS, WFS y SLD 40 0 Únicamente soporta los mapas que provee MapServer 30 0 Únicamente soporta los mapas que provee MapServer 0 7 Recupera mapas de Geoserver y MapServer 21 10 Recupera mapas de Geoserver y MapServer 30 7 Proporciona pocos ejemplos por lo que no es posible saber la utilidad de todas las funciones que proporciona 5 Requiere la configuración de Apache y Mapserver 8 Los ejemplos que proporciona no son suficientes para conocer todas las funciones del API 5 Requiere el conocimiento de etiquetas XML para realizar las solicitudes de mapas 20 Permitir recuperar mapas de diferentes fuentes 3 Sencillo de usar 4 TOTAL - 168 0 28 10 10 Recupera mapas de Geoserver, MapServer, Yahoo Maps, Google Maps, entre otros Con los ejemplos que proporciona es suficiente para guiar a los usuarios a crear sus primeras aplicaciones 250 40 171 20 181 32 230 C: calificación S: subtotal Obser: observaciones Página 124 ANEXO B Evaluación de Servidores de Mapas Anexo B. Evaluación de servidores de mapas 1. Introducción El presente documento reporta la evaluación de los servidores de mapas disponibles de manera gratuita. Para realizar la evaluación se instalaron cada uno de los servidores y se valoró en base a cinco criterios con un peso determinado a cada uno. Los servidores que se analizaron fueron: Degree; Geoserver y MapServer. A continuación se describe cada servidor de mapas. 2. Características de servidores de mapas de código libre. 2.1. Degree [LATLON, 2008] Este servidor de mapas nació como un proyecto del departamento de geografía de la Universidad de Bonn, fundándose posteriormente la empresa lat/lon GmbH, que además de continuar con la evolución del proyecto, presta servicios comerciales alrededor de esta plataforma. [DEGREE, 2008] Degree es un servidor Framework de Java que se puede desplegar sobre cualquier servidor que cumpla la especificación J2EE. Destaca por su elevado número de especificaciones OGC e ISO Technical Committee 211 – Geographic Information/Geoinformation (ISO/TC 211) que afirma cumplir. Los formatos vectoriales, ráster y conexiones a bases de datos que soporta son: PostgreSQL/PostGIS, Oracle, bases de datos que permiten conexiones JDBC, ESRI Shapefiles, GML2, JPEG, GIF, PNG, TIFF, GeoTiff. Alrededor de este servidor se han ido desarrollando otros proyectos complementarios como Degree iGeoPortal, Degree iGeoSecurity, Degree iGeo3D, deeJUMP. [DEGREE, 2008] A continuación se muestra un ejemplo de publicación de un mapa en Degree. Degree se instala con conjuntos de datos muestra, todos esos datos se extraen automáticamente cuando se desempaqueta el demo de Degree WMS. Para mostrar uno de los mapas predeterminados en Degree se realiza la siguiente petición HTTP GET: http://localhost:8080/deegreewms/services?REQUEST=GetMap&SERVICE=WMS&VERSION=1.1.1&WIDTH=603&HE IGHT=476&LAYERS=Vegetation,Lake,Roads&TRANSPARENT=TRUE&FORMAT=image /png&BBOX=372233.9342431239,4460438,489069,4552689&SRS=EPSG:26912&STYLES =default,default,default Y se mostrará en el navegador la imagen presentada en la figura (B.1). Página 126 Anexo B. Evaluación de servidores de mapas Figura B.1. Mapa visualizado en Degree. 2.2. Geoserver [GEOSERVER, 2008] Es un servidor de código abierto que conecta información a la Web. Con Geoserver es posible publicar y editar datos utilizando estándares abiertos. Su información se encuentra disponible en una gran variedad de formatos. Está construido sobre GeoTools2 Java GIS toolkit. Es usado en conjunción con clientes tales como OpenLayers para páginas Web, Google Earth, Udig, GVSig y otros. El uso de estándares permite que la información de Geoserver pueda ser fácilmente combinada con otros datos geográficos. Características de Geoserver [GEOSERVERFEA, 2008]: Totalmente compatible con especificaciones WMS, WFS (1.0, 1.1), WFS-T, SLD y WCS. Sencillo de usar pues posee una herramienta basada en Web para la configuración de archivos. Soporta PostGIS, ShapeFile, ArcSDE, DB2, Oracle, MySQL, MapInfo VPF y Cascading WFS. Soporta la proyección a vuelo. Mapas en formato JPEG, GIF, PNG, SVG, GeoJSON GeoRSS. Excelente soporte de Google Earth. OpenLayers integrado como visor predeterminado AJAX. Soporta SLD definidos por el usuario. Está basado en la especificación J2EE, por lo que puede ejecutarse en cualquier contenedor Web. Está diseñado para ser extendido. Corre en diferentes plataformas. Página 127 Anexo B. Evaluación de servidores de mapas A continuación se muestra un ejemplo de publicación de un mapa en Geoserver. Para visualizar archivos Shape en Geoserver se siguen los siguientes pasos: 1. Ingresar a http://localhost:8080/geoserver/welcome.do y en la ventana resultante ingresar al menú Configuración (ver figura B.2) Figura B.2. Ingreso a Configuración. 2. Iniciar sesión en el sistema con nombre de usuario= admin y contraseña= geoserver (ver figura B.3). Figura B.3. Inicio de sesión en Geoserver. 3. Ingresar al menú Datos (ver figura B.4). Figura B.4. Ingreso a los datos de Geoserver. 4. Dar clic en Espacios de nombres y en la página resultante dar clic en Nuevo (ver figura B.5). Página 128 Anexo B. Evaluación de servidores de mapas Figura B.5. Configuración de espacio de nombres. 5. Ingresar el prefijo Mexico y pulsar Nuevo y en la casilla URI ingresar http://localhost:8080/geoserver y pulsar Enviar (ver figura B.6). Figura B.6. Creación del espacio de nombres. 6. Verificar que el espacio de nombres se haya creado como lo muestra la figura (B.7) y pulsar aplicar y guardar para hacer efectivos los cambios en el servidor. Figura B.7. Visualización del espacio de nombre México creado. 7. Crear un almacén de datos. El almacén de datos indica en tipo de archivo se va a publicar. Para realizar esto dar clic en Configuración->Datos->Almacenes->Nuevo. En la descripción de datos se selecciona Shapefile y se identifica al almacén con DS_Mexico tal como lo muestra la figura (B.8) Y finalmente se pulsa el botón Nuevo. Página 129 Anexo B. Evaluación de servidores de mapas Figura B.8. Creación de un nuevo almacén de datos. 8. En el Editor del almacén de datos se ingresa el espacio de nombres Mexico, la URL donde se encuentra el archivo Shape que se desea publicar, en este caso se ingresa file:data/janet/States_region.shp, el cual corresponde a el path C:/Program Files/GeoServer 1.6.2/data_dir/data/janet. En la carpeta data de Geoserver, se copian los archivos Shape que se desean visualizar. Finalmente se da clic en Enviar (ver figura B.9). Figura B.9. Editor del almacén de datos 9. Al dar clic en Enviar se abre el Editor de entidades. En él se ingresa el alias del mapa, en este caso ingresamos AliasMexico, se ingresa el Estilo que se desea aplicar a el mapa, en este caso se crea un nuevo estilo llamado States_Region_Style. Se indica el sistema de referencia a trabajar. En nuestro caso es 4326 el cual es el identificador del sistema de referencia WGS84. Se da clic en el botón Generar para crear las longitudes máximas y mínimas en las que se visualizará el mapa. Finalmente se da clic en Enviar. Y se verifica en Entidades que se haya agregado correctamente la entidad (ver figura B.10). Página 130 Anexo B. Evaluación de servidores de mapas Figura. B.10. Entidades disponibles en Geoserver 10. Para visualizar el mapa es necesario situarse en la página principal de Geoserver e ingresar en la liga Demostración->Vista Preliminar de Mapas. Se visualizará una lista parecida a la mostrada en la figura (B.11). En la lista se da clic en Mexico:AliasMexico, y posteriormente visualizaremos el mapa como se muestra en la figura (B.12). Generando Geoserver la siguiente cadena: http://localhost:8080/geoserver/wms?bbox=-119.99049000000001,13.621244999883022,85.12511,33.62705500002082&styles=&Format=application/openlayers&request=GetMa p&layers=Mexico:AliasMexico&width=800&height=430&srs=EPSG:4326 Figura B.11. Entidades disponibles en Geoserver Página 131 Anexo B. Evaluación de servidores de mapas Figura B.12. Visualización del mapa de México en Geoserver 2.3. MapServer [MAPSERVER, 2008] MapServer es un ambiente de desarrollo de código abierto para construir aplicaciones destinadas a ser publicadas en internet. No es un sistema GIS ni aspira a serlo. En lugar de ello, MapServer sobresale en la presentación de datos espaciales (mapas, imágenes y datos vectoriales) para su publicación a través de la Web. MapServer fue originalmente desarrollado en la Universidad de Minesota (UMN) en colaboración con la NASA y el Departamento de Recursos Naturales de Minesota (MNDNR). Actualmente, MapServer es acogido por el proyecto TerraSIP, un proyecto patrocinado por la NASA, UMN y el consorcio de intereses en gestión de la tierra. Las características principales de MapServer son: Salida cartográfica avanzada. o Dibuja capas de información dependiendo de la escala. o Dibuja etiquetas evitando la colisión entre ellas. o Muestra elementos del mapa automáticos, como son escala gráfica, mapa de referencia y leyenda. Corre en plataformas Linux, Windows, Mac OS X y Solaris Soporta los formatos vectoriales: ESRI Shapefile, PostGIS, ESRI ArcSDE, Oracle Spatial, MySQL y otros vía OGR. Soporta los formatos raster: TIFF/GeoTIFF, EPPL7, JPG, PNG, GIF y otros vía GDAL. Cumple con las especificaciones OGC: WMS, WFS, WMC,WCS, Filter Encoding, SLD, GML, SOS. Trabaja en dos modos: o Modo CGI. o Modo MapScript. A continuación se muestra un ejemplo de publicación de un mapa en MapServer. Para publicar un mapa usando MapServer es necesario tener claros algunos conceptos que se definen enseguida. MapServer puede funcionar en dos modos diferentes: Página 132 Anexo B. Evaluación de servidores de mapas Como ejecutable CGI. Se trata de un ejecutable que puede ser invocado desde páginas Web para generar de forma dinámica imágenes. Como biblioteca (MapScript). La necesidad de realizar tareas específicas en el lado del servidor obligó a publicar las funcionalidades en este servidor en diferentes lenguajes de programación (PHP, Python, Perl, Ruby, Java y C#) para poder realizar tareas con un alto contenido dinámico. Generalmente funciona como una aplicación CGI (CGI es una norma para establecer comunicación entre un servidor Web y un programa, de modo que el programa pueda interactuar en internet) y corre dentro de un servidor http. El CGI de MapServer utiliza los siguientes recursos: Un servidor http como Apache o Internet Information Server. Software MapServer. Un archivo de inicialización que active la primera vista de la aplicación MapServer (opcional). Un archivo MapFile que controle lo que MapServer hace con los datos. Un Template File que controle la aplicación de MapServer en la ventana del navegador de Internet. Una fuente de datos GIS. MapServer es normalmente instalado en el directorio cgi-bin del servidor http, y la fuente de datos GIS es almacenada en el directorio de documentos del servidor http. El archivo de inicialización puede ser parte de otro archivo HTML, pero por simplicidad puede ser un archivo separado. Este archivo se utiliza para enviar una consulta inicial al servidor http que devuelve un resultado del servidor de mapas. MapServer está sin estado, este es iniciado y ejecuta una consulta cada vez que esta es recibida, para esto el archivo de inicialización es requerido, para pasar una variedad de parámetros a la aplicación. El MapFile especifica los datos que definen cómo las salidas del mapa y las leyendas de MapServer se deben presentar en la página HTML. El MapFile contiene información acerca de cómo se debe dibujar el mapa, la leyenda y el resultado de realizar una consulta. El MapFile tiene extensión .map y se codifica con etiquetas especiales. El Template File permite al autor del mapa colocar la posición de presentación del mapa, la leyenda y determina que vías son disponibles para que el usuario interactúe con la aplicación MapServer (browse, query, zoom in, zoom out, etc.). Para producir el documento HTML que se envía al navegador, MapServer usa palabras clave en el archivo Template y las reemplaza con información que se encuentra en la fuente de datos GIS. Cuando un Template File es usado para crear un archivo HTML, este es almacenado generalmente con extensión .HTML. El conjunto de datos GIS que el CGI MapServer usa es el formato Shapefile como formato vectorial por default y en formato ráster utiliza geoTiff y Tiff. Puede utilizar algunos otros formatos, dependiendo de cómo MapServer es compilado. El conjunto de datos GIS puede ser ubicado en un directorio, el cual es referenciado al MapFile. Para mostrar un ejemplo de visualización de un mapa en MapServer se requiere codificar un archivo .map, siguiendo las etiquetas que se definen en la tabla (B.1). Página 133 Anexo B. Evaluación de servidores de mapas Tabla B.1. Abstracto de etiquetas usadas en MapServer COMANDO IMAGETYPE EXTENT DESCRIPCION La palabra clave IMAGETYPE es usada para definir que formato de imagen podría usar el programa CGI Map Server para la salida de las imágenes. En este caso se usa el color indexado PNG (similar al GIF). Este podría ser GIF, si se compila la librería GD con soporte para GIF, WBMP, o JPEG. También se puede especificar otros formatos de salida (PDF, SWF, Geotiff) asumiendo que se ha compilado el soporte para los mismos y que el OUTPUTHFORMAT es de este tipo. Este parámetro especifica las dimensiones de salida del mapa. Este necesita ser en las mismas unidades de los datos. En este caso nuestra unidad de salida son los metros. Para extraer los valores de la extensión, se puede usar ArcView u otro software SIG. SIZE Este es el tamaño de la imagen (el mapa) que el Map Server puede generar, en pixeles. Así el mapa es de 400 pixeles de ancho por 300 pixeles de alto. SHAPEPATH Esta es la ruta en la que se localizan los archivos Shapefile que se desean visualizar. IMAGECOLOR Este es el color de fondo del mapa, los valores son RGB y valores como 255 Red, 255 Green y 255 Blue resultan en un fondo de color blanco. LAYER Marca el inicio de un objeto LAYER dentro de un objeto MAP. En MapServer se puede especificar los layers que se deseen y el límite de capas (se proporcionan 100 por default). Para modificar el límite de capas a visualizar se requiere recompilar el CGI Map Server. NAME Este es el identificador del nombre de cada uno de los layers especificados. DATA El nombre del dato (Shapefile en este caso). Map Server soporta formatos vectoriales y otros Shapefiles que ESRI usa de ORG library (parte del GDAL software). TYPE Se usa para especificar el tipo de dato que se va a visualizar el cual puede ser: POLYGON; LINE o POINT para formatos vectoriales. STATUS Los layers pueden ser colocados en ON u OFF basados en su STATUS. DEFAULT es siempre en ON o visible. ON u OFF funciona cuando el nombre del LAYER es pasado como parte del parámetro del query string. CLASS Marca el inicio de un objeto CLASS dentro de un objeto LAYER. Se pueden especificar muchas clases en un layer y por default se permiten 50. Para cambiar este valor se requiere recompilar el CGI Map Server. COLOR Este es el color de relleno del polígono. En caso de que el TYPE sea LINE, este es el color de línea. Los valores son en formato RGB. OUTLINECOLOR Este es el color de línea de salida de los polígonos. Este valor esta dado en RGB. CLASSITEM Esta palabra clave es usada para especificar que atributos se usan para separar un objeto de la clase. EXPRESSION FONSET LABELITEM LABEL COLOR SHADOWSIZE TYPE FONT SIZE POSITION Por cada clase, se requiere especificar qué valores de atributos se utilizan. Esta es la forma simple del valor EXPRESSION. EXPRESSION puede ser más complejo incluso que esto. Aquí se especifica la ruta completa de el archivo truetype fontlist (lista de fuentes). Este archivo lista cada una de las fuentes disponibles. Este especifica que atributos de datos se usa para el etiquetado. LABELITEM es un parámetro del objeto LAYER. Marca el inicio del objeto LABEL. El objeto label puede ser usado bajo otros objetos (Ejemplo: El objeto SCALEBAR). En el objeto LABEL, COLOR especifica el control de etiqueta de texto. Especifica el tamaño de la sombra. El valor correspondiente para las variables X e Y en pixeles. Para “2 2” quiere decir dos pixeles de ancho y dos pixeles de alto. En el objeto LABEL, TYPE especifica qué tipo de fuente se va a usar. Es posible escoger entre TRUETYPE o Bitmap (el constructor en fuentes). Si se especifica TYPE como TRUETYPE, éste necesita especificar qué fuente usará. El valor de esta es el “alias” en el archivo de lista de fuentes. Si se usan fuentes truetype, el valor del tamaño es en pixeles. Si es bitmap, se puede escribir “small” o “large”. Indica la posición de la etiqueta de texto con relación a los puntos de label. Los valores son una combinación de posiciones verticales y horizontales. Se puede elegir para una alineación vertical: C para el centro, L para la izquierda y R para la derecha. Para la alineación de la etiqueta de texto en el centro del label ID se debe usar el valor “CC” (centercenter). O si se quiere por abajo del ID se debe usar el “LL”. En la figura (B.13) se ilustra el archivo MAP utilizado para publicar el mapa de México en MapServer. Página 134 Anexo B. Evaluación de servidores de mapas Figura B.13. Archivo .map Una vez que se configura el archivo .map se procede a crear el archivo de inicialización. Este archivo mandará los parámetros a MapServer. El archivo de inicialización del archivo MAPFILE mostrado en la figura anterior se ilustra en la figura (B.14). Figura B.14. Archivo de inicialización ejemplo2.html Finalmente para visualizar el mapa se introduce la cadena de petición http://127.0.0.1:8081/ejemplo2/ejemplo2.html en el navegador Web y como resultado observamos el archivo de inicialización. Al hacer clic en “Click Me” se visualiza el mapa como se observa en la figura (B.15). Página 135 Anexo B. Evaluación de servidores de mapas Figura B.15. Mapa visualizado en MapServer 3. Definición de metodología de evaluación Para realizar la evaluación de los servidores de mapas anteriormente mencionados se llevaron a cabo los siguientes pasos: 1. Definir criterios de evaluación, es decir, qué características debe cumplir el servidor de mapas para utilizarlo como proveedor de mapas en el proyecto (ver tabla B.2). Tabla B.2. Definición de criterios CRITERIOS Característica 1 Característica 2 Característica N 2. Asignar ponderaciones a cada criterio en un rango del 1 al 5 tomando como base la importancia de cada una de éstas en el proyecto (ver tabla B.3). . Tabla B.3. Asignación de ponderaciones a cada criterio CRITERIOS PONDERACIÓN 5 Característica 1 3 Característica 2 1 Característica N 5: más importante, 1: menos importante 3. Evaluar cada servidor de acuerdo a los criterios que se definieron en el paso 1. La forma de evaluar cada característica es asignar una calificación del 1 al 10 de acuerdo a que tanto cumple con los requerimientos (ver tabla B.4) y si se desea se pueden incluir observaciones en cada asignación de calificación. Página 136 Anexo B. Evaluación de servidores de mapas Tabla B.4. Asignación de calificaciones a cada servidor de mapas de acuerdo a los criterios CRITERIOS Característica 1 Característica 2 Característica N PESO WMS-1 CALIFICACIÓN WMS-2 CALIFICACIÓN 5 10 3 5 1 8 10: más importante, 1: menos importante 1 4 2 4. Obtener el producto peso-calificación por característica definida en el paso 1 con la finalidad de obtener un subtotal (ver tabla B.5). Tabla B.5. Obtención de productos por criterio CRITERIOS PESO WMS-1 WMS-2 50 Califiic. 1 Subtotal 5 Calific. 10 Subtotal Característica 1 Característica 2 3 5 15 4 12 Característica N 1 8 8 2 2 5 5. Realizar la sumatoria por servidor de los subtotales obtenidos en el paso 4 (ver tabla B.6). Tabla B.6. Obtención de sumatorias por WMS CRITERIOS PESO WMS- 2 WMS-1 50 Califiic. 1 Subtotal 5 Calific. 10 Subtotal Característica 1 Característica 2 3 5 15 4 12 Característica N 1 8 8 2 2 TOTAL - 73 5 19 6. Comparar los resultados del paso 5 y elegir el servidor de mapas que mayor puntaje tenga (ver figura B.16). Figura B.16. Gráfico comparativo de la evaluación de los servidores de mapas Página 137 Anexo B. Evaluación de servidores de mapas 4. Desarrollo de la metodología de evaluación A continuación se desarrollan los pasos definidos en la metodología de evaluación tomando en cuenta los tres servidores de mapas mencionados en la sección 3 del documento. Paso 1. Definición de criterios de evaluación Para elegir el servidor de mapas que se usará en el proyecto, se definieron los siguientes criterios a evaluar: Código abierto: el servidor de mapas debe de tener disponible su código fuente para tener total libertad de utilizarlo y modificarlo en caso de que se requiera. Fácil de instalar y manejar: se requiere que el servidor de mapas sea sencillo de manejar para no invertir mucho tiempo en la instalación y manipulación del servidor. Codificado en JAVA: el servidor de mapas debe estar codificado en Java para cumplir con las especificaciones del proyecto de tesis. Implementar las especificaciones de la OGC: el servidor de mapas debe cumplir con especificaciones OGC en especial WMS, WFS y SLD ya que la estandarización aporta beneficios en términos de migración de datos. Soportar el formato Shapefile: el servidor de mapas a elegir debe ser capaz de visualizar archivos vectoriales (shp) ya que es el formato en el que se basa el proyecto de tesis. Paso 2. Asignación de ponderaciones De acuerdo al nivel de importancia que tienen los criterios mencionados en el paso 1, se asignan los siguientes pesos: Tabla B.7. Asignación de ponderaciones a cada criterio CRITERIOS Código abierto Fácil de instalar y manejar Codificado en JAVA Implementar las especificaciones OGC Soportar el formato Shapefile PONDERACIÓN 5 5 2 5 5 Paso 3,4 y5. Asignación de calificaciones, producto de calificación-peso y sumatoria Las calificaciones mostradas en la tabla (B.8) se asignaron de acuerdo a la experiencia obtenida al realizar la instalación y configuración de los servidores de mapas mencionados en la sección 3 del documento. Página 138 Anexo B. Evaluación de servidores de mapas Tabla B.8. Comparativa de servidores CRITERIOS Código abierto P E S C O 5 GEOSERVER DEGREE MAPSERVER Observaciones S C Observaciones S C Observaciones S 10 Se puede descargar el código en un archivo.jar 50 10 Es posible descargar el código fuente de la página oficial. 50 10 Permite descargar el código fuente de la página oficial. 50 10 10 Provee una interfaz amigable que permite configurar el servidor sin introducir líneas de código. Además de que se encuentra disponible en español y muestra los mapas en OpenLayers. 50 2 Para visualizar un mapa se necesita codificar manualmente un archivo de configuración MAPFILE y un archivo de inicialización. 10 Fácil de instalar y manejar 5 2 La instalación es sencilla pero la manipulación del servidor es compleja. Se requiere codificar manualmente archivos XML Codificado en Java 2 10 Está programado en Java 20 10 La interfaz sigue el modo de programación Struts 20 0 Está programado en C++ 0 Implementar las especificaciones OGC 5 10 Implementa una amplia gama de especificaciones entre ellas están WMS, WFS y SLD 50 10 Cumple con varias especificaciones y entre ellas se encuentran WMS, WFS y SLD 50 10 Cumple con varias especificaciones y entre ellas se encuentran WMS, WFS y SLD 50 Soportar el formato Shapefile 5 10 También soporta formatos ráster 50 10 Soporta archivos Shp y gracias a su programación es posible ampliar la cantidad de formatos 50 10 Soporta otros archivos vía GDAL y OGR 50 TOTAL - 180 220 160 C: calificación S: subtotal Página 139 Anexo B. Evaluación de servidores de mapas Paso 6. Comparar resultados De los servidores de mapas analizados, Geoserver es el servidor que implementa las especificaciones OGC que se requieren en el proyecto y permite publicar los mapas por medio de interfaces gráficas, por lo que resulta sencilla su manipulación. Por otro lado Degree y Mapserver no cumplen con la característica de facilidad de manejo, esto debido a que se requiere codificar manualmente los archivos necesarios para la publicación de un mapa. Por lo tanto, como el objetivo de la tesis no se enfoca en la profundización del funcionamiento de los servidores de mapas, Geoserver es la mejor alternativa de servidor para publicar mapas en la Web. En la figura (B.17) se muestra la gráfica de los resultados obtenidos de la evaluación de mapas. Gráfica de resultados 250 220 200 150 180 160 100 50 0 DEGREE GEOSERVER MAPSERVER Figura B.17. Resultados de la evaluación de servidores de mapas Página 140 ANEXO C Diseño de objetos para el documento SLD Anexo C. Diseño de objetos para el documento SLD UserStyle - Name : java.lang.String - Title : java.lang.String - Abstracts : java.lang.String - IsDefault : boolean + + + + + + + + StyledLayerDescriptor - version : java.lang.String - Name : java.lang.String - Title : java.lang.String - Abstracts : java.lang.String + + + + + + + + <<Getter>> <<Setter>> <<Getter>> <<Setter>> <<Getter>> <<Setter>> <<Getter>> <<Setter>> NamedLayer getVersion () setVersion (java.lang.String newVersion) getName () setName (java.lang.String newName) getTitle () setTitle (java.lang.String newTitle) getAbstracts () setAbstracts (java.lang.String newAbstracts) : : : : : : : : - Name : java.lang.String 1..1 java.lang.String void java.lang.String void java.lang.String void java.lang.String void 1..* + <<Getter>> getName () : java.lang.String + <<Setter>> setName (java.lang.String newName) : void 0..* 1..1 getName () setName (java.lang.String newName) getTitle () setTitle (java.lang.String newTitle) getAbstracts () setAbstracts (java.lang.String newAbstracts) getIsDefault () setIsDefault (boolean newIsDefault) : : : : : : : : java.lang.String void java.lang.String void java.lang.String void boolean void 1..* Rule - Featureid 0..* - Fid : java.lang.String 0..* <<Getter>> <<Setter>> <<Getter>> <<Setter>> <<Getter>> <<Setter>> <<Getter>> <<Setter>> Filter 0..1 1..1 + <<Getter>> getFid () : java.lang.String + <<Setter>> setFid (java.lang.String newFid) : void 1..1 ElseFilter 0..1 1..1 + + + + + + + + + + + + Name Title Abstracts LegendGraphic MinScaleDenominator MaxScaleDenominator <<Getter>> <<Setter>> <<Getter>> <<Setter>> <<Getter>> <<Setter>> <<Getter>> <<Setter>> <<Getter>> <<Setter>> <<Getter>> <<Setter>> : : : : : : FeatureTypeStyle java.lang.String java.lang.String java.lang.String Graphic float float getName () setName (java.lang.String newName) getTitle () setTitle (java.lang.String newTitle) getAbstracts () setAbstracts (java.lang.String newAbstracts) getMinScaleDenominator () setMinScaleDenominator (float newMinScaleDenominator) getMaxScaleDenominator () setMaxScaleDenominator (float newMaxScaleDenominator) getLegendGraphic () setLegendGraphic (Graphic newLegendGraphic) : : : : : : : : : : : : - 1..* java.lang.String void java.lang.String void java.lang.String void float void float void Graphic void + + + + + + + + + + 1..1 Name Title Abstracts FeatureTypeName SemanticTypeIdentifier <<Getter>> <<Setter>> <<Getter>> <<Setter>> <<Getter>> <<Setter>> <<Getter>> <<Setter>> <<Getter>> <<Setter>> : : : : : java.lang.String java.lang.String java.lang.String java.lang.String java.util.Collection getName () setName (java.lang.String newName) getTitle () setTitle (java.lang.String newTitle) getAbstracts () setAbstracts (java.lang.String newAbstracts) getFeatureTypeName () setFeatureTypeName (java.lang.String newFeatureTypeName) getSemanticTypeIdentifier () setSemanticTypeIdentifier (java.util.Collection newSemanticTypeIdentifier) : : : : : : : : : : java.lang.String void java.lang.String void java.lang.String void java.lang.String void java.util.Collection void 1..1 1..* SymbolizerType {abstract} Label Halo - Label : java.lang.String - Radius : float 0..1 + <<Getter>> getLabel () : java.lang.String + <<Setter>> setLabel (java.lang.String newLabel) : void + <<Getter>> getRadius () : float + <<Setter>> setRadius (float newRadius) : void 1..1 LineSymbolizer TextSymbolizer 1..1 1..1 1..1 0..1 PointSymbolizer PolygonSymbolizer 1..1 1..1 1..1 0..1 1..1 1..1 LabelPlacement 1..1 1..1 1..1 1..1 1..1 1..1 0..1 1..1 ExpressionType Stroke 0..1 1..1 0..1 0..1 {abstract} 1..1 - expression : java.lang.String 1..1 LinePlacement PointPlacement 0..1 + <<Getter>> getRotation () : float + <<Setter>> setRotation (float newRotation) : void 0..1 0..1 0..1 PropertyNameType 0..1 - AnchorPointX : float - AnchorPointY : float + <<Getter>> getPropertyName () : PropertyNameType + <<Setter>> setPropertyName (PropertyNameType newPropertyName) : void + + + + <<Getter>> <<Setter>> <<Getter>> <<Setter>> getAnchorPointX () : float setAnchorPointX (float newAnchorPointX) : void getAnchorPointY () : float setAnchorPointY (float newAnchorPointY) : void 0..1 PerpendicularOffset Displacement AnchorPoint - PropertyName : PropertyNameType GraphicFill 0..1 0..1 Geometry 0..1 0..1 1..1 1..1 1..1 - Rotation : float + <<Getter>> getExpression () : java.lang.String + <<Setter>> setExpression (java.lang.String newExpression) : void - DisplacementX : float - DisplacementY : float + <<Getter>> getDisplacementX () : float + <<Setter>> setDisplacementX (float newDisplacementX) : void + <<Getter>> getDisplacementY () : float + <<Setter>> setDisplacementY (float newDisplacementY) : void - PerpendicularOffset : java.lang.String + <<Getter>> getPerpendicularOffset () : java.lang.String + <<Setter>> setPerpendicularOffset (java.lang.String newPerpendicularOffset) : void 0..1 0..* CssParameter Font 0..* - name : java.lang.String - valor : java.lang.String 0..1 0..1 GraphicStroke Graphic 0..1 - Opacity : java.lang.String - Size : java.lang.String - Rotation : java.lang.String + + + + + + <<Getter>> <<Setter>> <<Getter>> <<Setter>> <<Getter>> <<Setter>> 0..1 1..1 + <<Getter>> getName () : java.lang.String + <<Setter>> setName (java.lang.String newName) : void + <<Getter>> getValor () : java.lang.String + <<Setter>> setValor (java.lang.String newValor) : void 0..1 0..* 0..1 getOpacity () setOpacity (java.lang.String newOpacity) getSize () setSize (java.lang.String newSize) getRotation () setRotation (java.lang.String newRotation) : : : : : : java.lang.String void java.lang.String void java.lang.String void 0..1 Fill 1..1 0..1 0..1 1..1 0..1 1..1 1..1 1..1 Mark 0..* 1..1 - WellKnownName : java.lang.String + <<Getter>> getWellKnownName () : java.lang.String + <<Setter>> setWellKnownName (java.lang.String newWellKnownName) : void 0..* ExternalGraphic SimpleLink - OnlineResource : SimpleLink - Format : java.lang.String - type : java.lang.String - href : java.lang.String + <<Getter>> getOnlineResource () : SimpleLink + <<Setter>> setOnlineResource (SimpleLink newOnlineResource) : void + <<Getter>> getFormat () : java.lang.String + <<Setter>> setFormat (java.lang.String newFormat) : void + <<Getter>> getType () : java.lang.String + <<Setter>> setType (java.lang.String newType) : void + <<Getter>> getHref () : java.lang.String + <<Setter>> setHref (java.lang.String newHref) : void = simple Figura C.1. Diagrama de objetos SLD Página 142 Anexo C. Diseño de objetos para el documento SLD class SLD NamedLayer StyledLayerDescriptor + - abstracts: java.lang.String name: java.lang.String namedLayer: java.util.Collection title: java.lang.String version: java.lang.String + + + + + + + + + + + + + + addNamedLayer(NamedLayer) : void getAbstracts() : java.lang.String getIteratorNamedLayer() : java.util.Iterator getName() : java.lang.String getNamedLayer() : java.util.Collection getTitle() : java.lang.String getVersion() : java.lang.String removeAllNamedLayer() : void removeNamedLayer(NamedLayer) : void setAbstracts(java.lang.String) : void setName(java.lang.String) : void setNamedLayer(java.util.Collection) : void setTitle(java.lang.String) : void setVersion(java.lang.String) : void UserStyle + name: java.lang.String userStyle: java.util.Collection + + + + + + + + addUserStyle(UserStyle) : void getIteratorUserStyle() : java.util.Iterator getName() : java.lang.String getUserStyle() : java.util.Collection removeAllUserStyle() : void removeUserStyle(UserStyle) : void setName(java.lang.String) : void setUserStyle(java.util.Collection) : void CssParameter - name: java.lang.String valor: java.lang.String + + + + getName() : java.lang.String getValor() : java.lang.String setName(java.lang.String) : void setValor(java.lang.String) : void - format: java.lang.String onlineResource: SimpleLink + + + + getFormat() : java.lang.String getOnlineResource() : SimpleLink setFormat(java.lang.String) : void setOnlineResource(SimpleLink) : void abstracts: java.lang.String featureTypeStyle: java.util.Collection isDefault: boolean name: java.lang.String title: java.lang.String + + + + + + + + + + + + + + addFeatureTypeStyle(FeatureTypeStyle) : void getAbstracts() : java.lang.String getFeatureTypeStyle() : java.util.Collection getIsDefault() : boolean getIteratorFeatureTypeStyle() : java.util.Iterator getName() : java.lang.String getTitle() : java.lang.String removeAllFeatureTypeStyle() : void removeFeatureTypeStyle(FeatureTypeStyle) : void setAbstracts(java.lang.String) : void setFeatureTypeStyle(java.util.Collection) : void setIsDefault(boolean) : void setName(java.lang.String) : void setTitle(java.lang.String) : void Featureid - fid: java.lang.String + + getFid() : java.lang.String setFid(java.lang.String) : void ExternalGraphic Displacement displacementX: float displacementY: float + + + + getDisplacementX() : float getDisplacementY() : float setDisplacementX(float) : void setDisplacementY(float) : void +displacement + - abstracts: java.lang.String featureTypeName: java.lang.String name: java.lang.String rule: java.util.Collection semanticTypeIdentifier: java.util.Collection title: java.lang.String + + + + + + + + + + + + + + + + addRule(Rule) : void getAbstracts() : java.lang.String getFeatureTypeName() : java.lang.String getIteratorRule() : java.util.Iterator getName() : java.lang.String getRule() : java.util.Collection getSemanticTypeIdentifier() : java.util.Collection getTitle() : java.lang.String removeAllRule() : void removeRule(Rule) : void setAbstracts(java.lang.String) : void setFeatureTypeName(java.lang.String) : void setName(java.lang.String) : void setRule(java.util.Collection) : void setSemanticTypeIdentifier(java.util.Collection) : void setTitle(java.lang.String) : void + + + + Filter ElseFilter + + - externalGraphic: java.util.Collection mark: java.util.Collection opacity: java.lang.String rotation: java.lang.String size: java.lang.String + + + + + + + + + + + + + + + + + + addExternalGraphic(ExternalGraphic) : void addMark(Mark) : void getExternalGraphic() : java.util.Collection getIteratorExternalGraphic() : java.util.Iterator getIteratorMark() : java.util.Iterator getMark() : java.util.Collection getOpacity() : java.lang.String getRotation() : java.lang.String getSize() : java.lang.String removeAllExternalGraphic() : void removeAllMark() : void removeExternalGraphic(ExternalGraphic) : void removeMark(Mark) : void -legendGraphic setExternalGraphic(java.util.Collection) : void setMark(java.util.Collection) : void setOpacity(java.lang.String) : void setRotation(java.lang.String) : void setSize(java.lang.String) : void +graphic SimpleLink -onlineResource - AnchorPoint - Graphic FeatureTypeStyle + - +graphic + featureid: java.util.Collection + + + + + + addFeatureid(Featureid) : void getFeatureid() : java.util.Collection getIteratorFeatureid() : java.util.Iterator removeAllFeatureid() : void +filter removeFeatureid(Featureid) : void setFeatureid(java.util.Collection) : void +elseFilter Rule +graphic href: java.lang.String type: java.lang.String = "simple" getHref() : java.lang.String getType() : java.lang.String setHref(java.lang.String) : void setType(java.lang.String) : void PerpendicularOffset - anchorPointX: float anchorPointY: float + + + + getAnchorPointX() : float getAnchorPointY() : float setAnchorPointX(float) : void setAnchorPointY(float) : void - perpendicularOffset: java.lang.String + + getPerpendicularOffset() : java.lang.String setPerpendicularOffset(java.lang.String) : void GraphicFill +perpendicularOffset + +graphicFill graphic: Graphic +anchorPoint +graphicFill GraphicStroke + -propertyName + + addCssParameter(CssParameter) : void getCssParameter() : java.util.Collection getIteratorCssParameter() : java.util.Iterator removeAllCssParameter() : void removeCssParameter(CssParameter) : void setCssParameter(java.util.Collection) : void +font + + getExpression() : java.lang.String setExpression(java.lang.String) : void Stroke +linePlacement Font cssParameter: java.util.Collection expression: java.lang.String perpendicularOffset: PerpendicularOffset +pointPlacement + + + + + + - Fill getRotation() : float setRotation(float) : void + addSymbolizerType(SymbolizerType) : void getAbstracts() : java.lang.String getIteratorSymbolizerType() : java.util.Iterator getLegendGraphic() : Graphic getMaxScaleDenominator() : float getMinScaleDenominator() : float getName() : java.lang.String getSymbolizerType() : java.util.Collection getTitle() : java.lang.String removeAllSymbolizerType() : void removeSymbolizerType(SymbolizerType) : void setAbstracts(java.lang.String) : void setLegendGraphic(Graphic) : void setMaxScaleDenominator(float) : void setMinScaleDenominator(float) : void setName(java.lang.String) : void setSymbolizerType(java.util.Collection) : void setTitle(java.lang.String) : void ExpressionType LinePlacement + + + + + + + + + + + + + + + + + + + PropertyNameType +graphicStroke anchorPoint: AnchorPoint displacement: Displacement rotation: float abstracts: java.lang.String elseFilter: ElseFilter filter: Filter legendGraphic: Graphic maxScaleDenominator: float minScaleDenominator: float name: java.lang.String symbolizerType: java.util.Collection title: java.lang.String graphic: Graphic PointPlacement + + - + + + - LabelPlacement + + linePlacement: LinePlacement pointPlacement: PointPlacement +labelPlacement + + cssParameter: java.util.Collection graphicFill: GraphicFill + + + + + + addCssParameter(CssParameter) : void getCssParameter() : java.util.Collection getIteratorCssParameter() : java.util.Iterator removeAllCssParameter() : void removeCssParameter(CssParameter) : void setCssParameter(java.util.Collection) : void +fill Label +fill +fill +fill + + + cssParameter: java.util.Collection graphicFill: GraphicFill graphicStroke: GraphicStroke + + + + + + addCssParameter(CssParameter) : void getCssParameter() : java.util.Collection getIteratorCssParameter() : java.util.Iterator removeAllCssParameter() : void removeCssParameter(CssParameter) : void setCssParameter(java.util.Collection) : void +stroke - label: java.lang.String + + getLabel() : java.lang.String setLabel(java.lang.String) : void +label Geometry +geometry - propertyName: PropertyNameType + + getPropertyName() : PropertyNameType setPropertyName(PropertyNameType) : void +stroke +geometry +geometry +geometry +stroke Mark Halo + - fill: Fill radius: float + + getRadius() : float setRadius(float) : void + + - fill: Fill stroke: Stroke wellKnownName: java.lang.String + + getWellKnownName() : java.lang.String setWellKnownName(java.lang.String) : void PolygonSymbolizer + + + fill: Fill geometry: Geometry stroke: Stroke LineSymbolizer + + geometry: Geometry stroke: Stroke PointSymbolizer + + geometry: Geometry graphic: Graphic +halo TextSymbolizer + + + + + + fill: Fill font: Font geometry: Geometry halo: Halo label: Label labelPlacement: LabelPlacement SymbolizerType Figura C.2. Diagrama de clases SLD Página 143 Anexo C. Diseño de objetos para el documento SLD Página 144 ANEXO D Síntesis de la Especificación SLD -Styled Layer Descriptor Versión 1.0.0- Anexo D. Síntesis de la especificación SLD 1. Introducción La presente especificación describe de manera general el esquema del lenguaje de estilizado de mapas para producir mapas geográficos con estilos definidos por el usuario. 2. Especificación SLD Styled Layer Descriptor (SLD por sus siglas en inglés) es un lenguaje XML para personalizar la apariencia de un mapa. Tiene una estructura propia, formado por el elemento principal StyledLayerDescriptor el cual contiene una secuencia de definiciones de estilo para los mapas. 2.1 Elemento principal del archivo SLD El esquema XML que define la cabecera de un documento SLD se muestra en la figura (D.1): Figura D.1. Esquema SLD del elemento raíz En la figura (D.1) se puede apreciar que la cabecera está formada por los elementos NamedLayer y UserLayer. El atributo version es utilizado para indicar la versión del documento SLD. Por ejemplo un documento SLD basado en la presente especificación debería tener la cadena “1.0.0” asignada en el atributo version. Es importante tener en cuenta que el orden en que aparezcan las capas en el documento SLD será el orden en que se dibujen. 2.2 Named Layers Una capa o layer es definida como un conjunto de entidades que pueden ser de varias clases. La especificación WMS usa el parámetro LAYER para hacer referencia a los nombres de las capas. Por ejemplo: LAYERS=carreteras, ríos, casas Un servidor WMS va a reconocer directamente las Named Layers, esto gracias a que el documento GetCapabilities describe las capas que provee el servidor de mapas. Si se quiere personalizar la visualización de las capas es necesario utilizar SLD, es decir, no utilizar los estilos definidos por el WMS, sino personalizar los elementos que va a contener la capa. El esquema XML del elemento NamedLayer se presenta en la figura (D.2): Página 146 Anexo D. Síntesis de la especificación SLD Figura D.2. Esquema de elemento NamedLayer El elemento NamedLayer está formado por los elementos Name, LayerFeatureConstrains, NameStyle y UserStyle. El elemento Name identifica un nombre bien conocido (well-known name) de las capas y es obligatorio. El elemento LayerFeatureConstraints es opcional y es para definir restricciones en las entidades que se seleccionan. El elemento NamedStyle es utilizado para incluir cualquier número y en cualquier orden los nombres de estilos tanto definidos por el usuario como por el servidor WMS. Todos los estilos disponibles para cada capa son normalmente citados en el documento GetCapabilities. 2.3 UserLayers Un WMS utiliza el parámetro STYLES para especificar el estilo relativo a las capas LAYERS, por ejemplo: LAYERS=carreteras, ríos, casas STYLES=Centerline, Centerline, Outline El esquema XML para el elemento UserLayers se presenta en la figura (D.3): Figura D.3. Esquema de elemento UserLayer El elemento Name indica el nombre de la capa que va a definir el usuario. El elemento RemoteOWS especifica el lugar en el que se encuentran los datos a personalizar, es decir, el servidor Web OGC utilizado (WFS/WCS). El esquema XML que describe a RemoteOWS se presenta en la figura (D.4): Página 147 Anexo D. Síntesis de la especificación SLD Figura D.4. Esquema de elemento RemoteOWS El elemento RemoteOWS está formado por los elementos Service y OnlineResource. Por su parte, LayerFeatureConstrains especifica qué tipos de entidades se van a incluir en la capa. El fragmento de esquema XML de LayerFeatureConstrains se presenta en la figura (D.5): Figura D.5. Esquema XML para el elemento LayerFeatureConstraints Página 148 Anexo D. Síntesis de la especificación SLD LayerFeatureConstrains está formado por los elementos FeatureTypeName, Filter y Extent (name, value). Los Named Styles no pueden ser usados con capas definidas por el usuario. Sólo estilos definidos por el usuario (UserStyles) pueden ser usados en capas definidas por el usuario (UserLayers) En la figura (D.6) se presenta el ejemplo de un SLD que usa capas definidas por el usuario: Figura D.6. Ejemplo de capa definida por el usuario 2.4 UserStyles UserStyle especifica el estilo creado por el usuario. La definición del esquema se presenta en la figura (D.7). Figura D.7. Esquema XML del estilo definido por el usuario Página 149 Anexo D. Síntesis de la especificación SLD UserStyle está formado por los elementos Name, Title, Abstract,IsDefault, FeatureTypeStyle. Name, Title y Abstract son opcionales. Name se usa para llamar al estilo externamente cuando un SLD se almacena dentro de un WMS, Title es una descripción corta para el estilo y Abstract es una descripción más extensa. El elemento IsDefault identifica si un estilo es el estilo por defecto para una capa (Se usa 1 para verdadero y 0 para falso). A continuación en la figura (D.8) se muestra un ejemplo incompleto de un estilo definido por el usuario utilizando un NamedLayer. Figura D.8. Ejemplo de UserStyle 2.5 FeatureTypeStyles Los FeatureTypeStyles definen el estilo que se va a aplicar a un tipo de entidad de una capa. Un UserStyle puede contener uno o más elementos de éste. El esquema XML se muestra en la figura (D.9): Figura D.9. Esquema XML de FeatureTypeStyle FeatureTypeStyles está formado por los elementos Name, Title, Abstract, FeatureTypeName, SemanticTypeIdentifier y Rule. FeatureTypeName: identifica el tipo de entidad específica para el FeatureTypeStyle que se ha definido. SemanticTypeIdentifier es experimental e identifica que estilo de entidad es conveniente para ser usada por muchos tipos de entidades. Es un string indefinido pero se definen los siguientes valores: “generic:line”, ”generic:polygon”, ”generic:point”, ”generic:text”, ”generic:raster” y “generic:any”. Página 150 Anexo D. Síntesis de la especificación SLD Un elemento FeatureTypeStyle contiene una o más elementos Rule. El elemento Rules identifica las reglas a cumplir por FeatureTypeStyle. 2.6 Rules Describe las reglas a cumplir para el dibujo de los elementos según la escala de los mapas y las características de los elementos. El esquema XML para el elemento Rule se muestra en la figura (D.10). Figura D.10. Esquema XML del elemento Rule El elemento Rule está formado por los elementos Name, Title, Abstract, LegendGraphic, Filter, ElseFilter, MinScaleDenominator, MaxScaleDenominator, LineSimbolizer, PoligonSymbolizer, PointSymbolizer, TextSymbolizer y RasterSymbolizer. Las Rules deben localizarse en orden de “prioridad” dentro de UserStyle (las más importantes primero). Title y Abstract son elementos que dan un título corto de la regla para aparecer en una lista y una descripción de la misma. Name permite referenciar externamente la regla. El elemento LegendGraphic contiene el símbolo Graphic para luego ser mostrado en la leyenda. El esquema XML de este elemento se presenta en la figura (D.11): Figura D.11. Esquema XML de LegendGraphic Página 151 Anexo D. Síntesis de la especificación SLD MinScaleDenominator y MaxScaleDenominator define el rango de escalas de visualización del mapa. En la figura (D.12) se presenta su esquema: Figura D.12. Esquema XML para MinScaleDenominator y MaxScaleDenominator Los valores usados son el denominador de la escala. La mínima escala es inclusive y la máxima exclusive y son opcionales. Por ejemplo: <MinScaleDenominator>100e3</MinScaleDenominator> <MaxScaleDenominator>1e6</MaxScaleDenominator> Corresponden a la siguiente condición lógica: scale_denom >= 100e3 && scale_denom < 1e6 Filter y ElseFilter permiten la selección de entidades según condiciones definidas por sus atributos. Filter permite tanto filtrar espacialmente como por atributos. Los filtros se ejecutan en el orden que van apareciendo. ElseFilter permite definir reglas que son activadas para entidades que no se ven afectadas por otra regla. En la figura (D.13) se muestra un ejemplo del uso de Filter y ElseFilter: Figura D.13. Ejemplo de Filter y ElseFilter El ejemplo anterior describe que todas las entidades en la capa se van a dibujar, las que tienen atributo igual a 1 se dibujarán en rojo y las restantes en gris. 2.7 Simbolización Está localizada dentro de la definición de las “Reglas” y describe cómo van a aparecer las entidades en el mapa (forma, color, etc.). Se define según el tipo y tienen sus parámetros asociados. Los tipos de simbolización son: Línea, Polígono, Punto, Texto y Ráster. 2.8 Simbolización Lineal (LineSymbolizer) Los símbolos lineales se definen como lo muestra el esquema de la figura (D.14): Página 152 Anexo D. Síntesis de la especificación SLD Figura D.14. Esquema XML de la simbolización Lineal El elemento LineSymbolizer está formado por los elementos Geometry y Stroke. Geometry (Geometría) es opcional, todas las clases de simbolización pueden contener este elemento. Si no se define se toma “por defecto” como geometría la definida en “FeatureStyleType”. El esquema de Geometry se presenta en la figura (D.15): Figura D.15. Esquema XML de Geometry El elemento ogc: PropertyName (se define en la especificación WFS) puede tener como contenido una definición de geometría, utilizando GML o unas propiedades de entidad. Los tipos de geometría son: Línea. Línea de longitud X con orientación horizontal centrada en un punto, delimitada por dos nodos. Polígono: Línea cerrada con relleno interior. Ráster: línea rasterizada. En la figura (D.16) se presenta un ejemplo de uso de este sub-elemento: Figura D.16. Ejemplo de uso de Geometry El elemento Stroke (Borde) es opcional. Todas las clases de simbolización pueden contener este elemento. Si no se define entonces no se dibuja. Su esquema SLD se presenta en la figura (D.17). Página 153 Anexo D. Síntesis de la especificación SLD Figura D.17. Esquema XML de Stroke Está formada por los elementos GraphicFill, Graphicstroke y cssParameter. Los bordes pueden ser de tres tipos: Solid-color (color sólido), GraphicFill (efecto punteado) y GraphicStroke (símbolo gráfico repetido linealmente). Si no se proporcionan GraphicFill o GraphicStroke entonces el símbolo lineal se rellena de color sólido. El elemento cssParameter proporciona los parámetros para describir los estilos de las líneas. La definición de su esquema se presenta en la figura (D.18). Figura D.18. Esquema XML de CssParameter El elemento GraphicFill especifica la línea punteada repetida que se va a utilizar. En la figura (D.19) se muestra el esquema XML: Figura D.19. Esquema XML de GraphicFill El elemento GraphicStroke especifica el símbolo gráfico repetido que se va a utilizar. En la figura (D.20) se presenta el esquema XML de este elemento. Página 154 Anexo D. Síntesis de la especificación SLD Figura D.20. Esquema XML de GraphicStroke Ejemplo: Capa con todas las entidades del tipo río que se van a mostrar con líneas azules de 2 píxeles de ancho. En la figura (D.21) se muestra una sección del documento SLD que describe la configuración de estilo mencionada anteriormente y en la figura (D 22) se presenta el resultado al aplicar el estilo definido en la figura (D.21). Figura D.21. Ejemplo de LineSymbolizer Figura D.22. Resultado al aplicar la simbolización LineSymbolizer definida en la figura (D.21) 2.9 Simbolización Poligonal Se usa para dibujar un polígono formado por un relleno interior y línea de contorno. La figura (D.23) muestra el esquema de la simbolización poligonal. Figura D.23. Esquema XML de PolygonSymbolizer Primero se dibuja el relleno (fill) y después el borde (stroke) encima. PolygonSymbolizer está formado por los elementos Geometry, Fill, Stroke. Fill (Relleno) se define como lo muestra la figura (D.24): Página 155 Anexo D. Síntesis de la especificación SLD Figura D.24. Esquema XML de Fill Existen dos tipos de relleno: color sólido y GraphicFill (patrón repetido). Por su lado, CssParameters define parámetros referidos al relleno: Fill ( relleno) y Fill-Opacity ( nivel de transparencia). Por defecto el valor del relleno (Fill) es gris (“#808080”). Ejemplo: Tipo de entidad Lago que se desea representar con relleno azul claro y su borde con una línea en azul oscuro. En la figura (D.25) se muestra las líneas XML que describen la configuración anterior. Y en la figura (D.26) se presenta el resultado al aplicar la configuración de estilo presentada en la figura (D.25). Figura D.25. Ejemplo de estilización poligonal Figura D.26. Resultado de la definición mostrada en la figura (D.25) 2.10 Simbolización Puntual Se usa para dibujar elementos puntuales mediante símbolos. La figura (D.27) presenta la definición de esta simbolización: Figura D.27. Esquema XML de PointSymbolizer Página 156 Anexo D. Síntesis de la especificación SLD Está formada por los elementos Geometry, Graphic. Si se utiliza una geometría tipo línea, polígono o Ráster entonces se usa el centroide de la geometría. Graphic (Gráfico) es el símbolo (vector o Ráster) utilizado con un relleno, color y tamaño. El símbolo puede proceder de una URL externa o se puede especificar características del mismo. Si no se especifica ni ExternalGraphic ni Mark entonces por defecto se aplica un cuadrado de un relleno de gris y línea de contorno de ancho 6 píxeles y color negra. El esquema XML se presenta en la figura (D.28). Figura D.28. Esquema XML de Graphic y ExternalGraphic Los elementos que lo constituyen son: ExternalGraphic (símbolo externo) hace referencia a una URL exterior donde se encuentra el símbolo y está formado por los elementos OnlineResource, y Format. Mark (símbolo) define el color de relleno, el color de línea de la figura elegida para la simbolización puntual. La figura (D.29) muestra la definición de su esquema. Página 157 Anexo D. Síntesis de la especificación SLD Figura D.29. Esquema XML Mark El elemento WellKnownName especifica el nombre de la forma del símbolo el cual puede ser Square(cuadrado),circle(círculo),triangle (triángulo),star(estrella),cross(cruz) y X. Por defecto su valor es “square”. El dibujo de estos símbolos puede ser sólido o vacío dependiendo de los elementos Fill y Stroke. Opacity (Opacidad) establece el grado de opacidad (igual que stroke-opacity y fillopacity). Size (tamaño) establece el tamaño del símbolo numéricamente. Rotation (rotación) establece la orientación del símbolo en dirección de las agujas del reloj y codificado con un número. Por defecto el valor es 0.0.Se permiten valores negativos. En la figura (D.30) se presenta el documento SLD que describe lo siguiente: Simbolización de Hospitales mediante elementos puntuales en forma de estrellas centrados en la localización de los hospitales. La figura (D.31) muestra el resultado de la configuración de estilo anterior. Figura D.30. Ejemplo de estilización Puntual Figura D.31. Resultado de la definición mostrada en la figura (D.30) Página 158 Anexo D. Síntesis de la especificación SLD 2.11 Textos La simbolización TextSymbolizer es utilizada para definir el estilo de las etiquetas textuales. En la figura (D.32) se muestra la definición del esquema XML. Figura D.32. Esquema XML de TextSymbolizer Está formada por los elementos Geometry, Label, Font, LabelPlacement, Halo y Fill. El tipo de geometría es punto o línea y necesita el elemento LabelPlacement (localización etiqueta).El elemento Label (etiqueta) hace referencia al contenido de la etiqueta. Se define como: Si un elemento Label no se proporciona dentro del elemento TextSymbolizer no se dibujará y por tanto no aparecerá. El elemento Font (fuente) identifica la familia, estilo, y tamaño de la fuente. La figura (D.33) muestra la definición del esquema de este elemento. Figura D.33. Esquema XML de Font Donde el elemento Cssparameter puede ser: Font-family: nombre de la familia de la fuente Font-Style: estilo de la fuente (“normal”, “italic”, “oblique”). Font-weight: formato de la fuente (“normal”,”negrita”). Font-size: tamaño de la fuente, por defecto es 10 píxeles. El elemento LabelPlacement (Localización etiqueta) posiciona la etiqueta relativa a un punto o a una línea. La definición de su esquema se presenta en la figura (D.34). Página 159 Anexo D. Síntesis de la especificación SLD Figura D.34. Esquema XML de LabelPlacement, PointPlacement y LinePlacement PointPlacement (localización puntual) está formado por: AnchorPoint el cual proporciona la localización dentro de la etiqueta para usarlo como anclaje y se define como lo muestra la figura (D.35). Figura D.35. Esquema XML de AnchorPoint Donde los elementos AnchorPointX y AnchorPointY toman valores entre 0.0 (esquina inferior izquierda) y1.0 (esquina superior derecha). Por defecto se tienen los valores de x=0, y= 0.5. La figura (D.36) muestra las posiciones de la etiqueta con respecto a los valores que se le asignen al elemento AnchorPoint. Figura D.36. Valores que puede tomar AnchorPoint Algunos ejemplos de uso de la ubicación puntual se muestran en la tabla (D.1). Página 160 Anexo D. Síntesis de la especificación SLD Tabla D.1. Ejemplos de ubicaciones puntuales (x=0, y=0.5) DEFAULT – la etiqueta se localiza a la derecha del punto (x=0.5, y=0.5) – el centro de la etiqueta se localiza sobre el punto (x=1, y=0.5) – la etiqueta se localiza a la izquierda del punto (x=0.5, y=0) – la etiqueta se localiza centrada encima del punto Displacement proporciona el desplazamiento X, Y del texto con respecto al elemento puntual al que da nombre (ver tabla D.2). Rotation: proporciona los grados de rotación de la etiqueta en grados (ver tabla D.3). Tabla D.2. Ejemplos de desplazamientos Desplazamiento de 10 pixeles es similar a la ubicación puntual (x = 0, y = 0,5) Desplazamiento de y = -10 pixeles es similar a la ubicación puntual (x=0.5, y=1.0) Tabla D.3. Ejemplos de rotación 45 grados de rotación simple 45 grados de rotación con ubicación puntual de (x=0.5, y=0.5) 45 grados de rotación con 40 pixeles de desplazamiento en X 45 grados de rotación con ubicación puntual de (x=0.5,y=0.5) y 40 pixeles de desplazamiento en Y Página 161 Anexo D. Síntesis de la especificación SLD LinePlacement (localización lineal) está formado por PerpendicularOffset que permite proporcionar la distancia perpendicular a la línea sobre la que se localizará el texto (ver tabla D.4). La distancia se establece en pixeles, los cuales pueden ser positivos (sitúa el texto a la derecha o arriba de la línea) y negativos (sitúa el texto a la izquierda o abajo de la línea). Por defecto se toma el valor de 0. Tabla D.4. Ejemplos de localización lineal PerpendicularOffset=0 PerpendicularOffset=10 El elemento Halo (halo) define el tipo de relleno que se aplica al fondo de la fuente. Se define como se muestra en la figura (D.37): Figura D.37. Esquema XML de Halo Donde Radius define el tamaño absoluto en píxeles del radio de halo, por defecto es 1 pixel y Fill que por defecto es blanco. Fill (relleno), por defecto el relleno de las letras es negro sólido (“#000000”). En la figura (D.38) se presenta el ejemplo de la descripción de una configuración textual aplicada a un mapa. El resultado de esta configuración se puede apreciar en la figura (D.38). Página 162 Anexo D. Síntesis de la especificación SLD Figura D.38. Ejemplo de simbolización Texto Figura D.39. Resultado de la definición mostrada en la figura (D.38) Página 163 Anexo D. Síntesis de la especificación SLD Página 164 ANEXO E Plan de Pruebas Anexo E. Plan de pruebas 1. Introducción El presente documento expone el plan de pruebas basado en el estándar 829 de la IEEE utilizado para pruebas de software. Este plan permite evaluar el sistema MapWeb Designer. [IEEE 1998]. El sistema a probar es una herramienta creadora de prototipos de aplicaciones Web que contienen mapas estilizados por el usuario (diseñador). Los módulos que se desarrollaron son: Gestión de acceso al sistema. Solicitud y visualización de mapas. Aplicación de estilos al mapa. Generación de plantilla de aplicación Web con la asociación del mapa estilizado. Publicación del prototipo de aplicación Web. Visualización del prototipo de aplicación Web publicado. La hipótesis nula a probar es la siguiente: Con herramientas editoras y visualizadoras de mapas vectoriales, no es posible publicar aplicaciones Web y aplicar estilos a los mapas definidos por el usuario a través de la Web. La hipótesis alterna es: Con una herramienta Web es posible visualizar y estilizar mapas vectoriales aplicando estilos definidos por el usuario (diseñador). Además es posible publicar un prototipo de aplicación Web con el mapa estilizado. El presente documento se encuentra organizado de la siguiente manera: Identificador del plan de pruebas: describe la forma en que se identificaron las pruebas. Descripción del plan de pruebas: se hace una descripción general de las características que se probaron; se definen los criterios necesarios para aprobar, suspender o reanudar una prueba; se mencionan las tareas necesarias y las condiciones ambientales para aplicar las pruebas. Casos de prueba: expone los grupos y subgrupos de los casos prueba. Procedimiento de pruebas: describe los pasos realizados para ejecutar las pruebas. 2. Identificador del plan de pruebas MAPWEBDE-XX.YY SIGLAS MAP WEB DE XX YY SIGNIFICADO Mapas Web Designer Grupo de prueba Caso de prueba MapWeb Designer: Diseñador de mapas en Web. Página 166 Anexo E. Plan de pruebas 3. Descripción del Plan de Pruebas 3.1. Elementos de prueba Los módulos del sistema MapWeb Designer que fueron probados se identifican como lo muestra la tabla E.1. TIPO Módulo Módulo Módulo Módulo Módulo Módulo 3.2. Tabla E.1. Elementos de prueba NOMBRE MAPWEBDE-01 Gestión de acceso al sistema. MAPWEBDE-02 Solicitud y visualización de mapas. MAPWEBDE-03 Aplicación de estilos al mapa. MAPWEBDE-04 Asociar mapa a plantilla de aplicación Web MAPWEBDE-05 Publicación de la página Web. MAPWEBDE-06 Visualización de la página Web. Características probadas La siguiente lista describe las características que fueron probadas en cada módulo mencionado en los elementos de prueba: Gestión de acceso al sistema: se verificó que se realizara correctamente el registro de usuarios del sistema así como el acceso y denegación al mismo. Solicitud y visualización de mapas: se verificó que las solicitudes de mapas fueran correctas y que se visualizaran los mapas solicitados en el visor de mapas de la aplicación. Aplicación de estilos al mapa: se probó que la configuración de estilos definidos por el usuario y la generación del código XML correspondiente a la estilización del mapa fueran realizados correctamente. Asociar mapa a plantilla de aplicación Web: se verificó que la plantilla Web elegida del catálogo de plantillas, fuera creada conteniendo el mapa estilizado Publicación de la aplicación Web: se probó que los archivos necesarios para la ejecución de la aplicación en la Web fueran copiados en el contenedor Web. Visualización de la aplicación Web: se verificó la correcta ejecución y visualización de la aplicación Web publicada. 3.3. Características excluidas de las pruebas El presente plan de pruebas no abarca los siguientes aspectos: No se realizaron pruebas al hardware en que se ejecutó el sistema. No se realizaron pruebas de velocidad de carga de mapas y rendimiento del sistema MapWeb Designer. No se examinaron compatibilidades y configuración del software a desarrollar. 3.4. Enfoque Las pruebas que se le efectuaron al sistema MapWeb Designer fueron de funcionalidad. MapWeb Designer interactua con un servidor de mapas (WMS por sus siglas en inglés) el cual tiene el papel de proveedor de mapas vectoriales. Además resuelve las necesidades de estilo Página 167 Anexo E. Plan de pruebas que el diseñador configura por medio de componentes de estilo disponibles y tiene la funcionalidad de publicar el mapa en la Web. Las pruebas se realizaron invocando la aplicación MapWeb Designer desde un navegador Web 3.5. Criterio pasa/no pasa de los elementos En la descripción de cada uno de los casos de prueba contenidos en el presente documento, se detallan los resultados esperados del caso de prueba. Se consideró que una prueba pasaba con éxito cuando los resultados esperados coincidieron con los descritos en el caso de prueba. Cuando no se pasaba la prueba, el responsable de la prueba analizó el problema y realizó las modificaciones necesarias hasta que se cumplieran los resultados esperados. 3.6. Criterios de suspensión y requerimientos de reanudación En ningún caso de prueba descrito en el presente documento se establecieron criterios para suspender las pruebas. Todos los casos de prueba fueron llevados a cabo y cuando se encontraron errores, se solucionaron hasta obtener los resultados esperados descritos en cada caso de prueba. 3.7. Tareas de prueba Las tareas a desarrolladas para aplicar las pruebas se describen en la tabla E.2: TAREA 1. Realizar el plan de pruebas. 2. Realizar las pruebas. 3. Resolver los incidentes resultantes de las pruebas. 4. Evaluar los resultados. 3.8. Tabla E.2. Descripción de las tareas de prueba TAREA PRECEDENTE HABILIDADES ESPECIALES Análisis y diseño de la Conocer el estándar 829 de la IEEE y herramienta MapWeb las funciones que realizará MapWeb Designer. Designer. Tarea 1 e Conocer la arquitectura de MapWeb implementación de la Designer, los casos de uso, las clases herramienta MapWeb y métodos desarrollados. Designer. Conocimiento de J2EE, XML, JavaScript, Ajax, funciones del API Tarea 2 visora de mapas y las especificaciones SLD y WMS de la OGC. Conocer el objetivo de la tesis, Tarea 3 alcances, limitaciones e hipótesis de prueba de la investigación. RESPONSABILIDADES Autora de esta tesis. Autora de esta tesis. Autora de esta tesis. Autora de esta tesis. Necesidades ambientales Los requisitos necesarios tanto de hardware como de software que cumplieron los equipos cliente y servidor para llevar a cabo la correcta ejecución de pruebas se describen en la tabla E.3. Nota: las características que se presentan para el equipo servidor son regulares ya que si se desea almacenar grandes cantidades de información espacial, se tiene que aumentar las capacidades en disco duro, memoria RAM y procesador. Página 168 Anexo E. Plan de pruebas REQUISITO PC(Equipo servidor) PC(Equipo cliente) 3.9. Tabla E.3. Requisitos ambientales CARACTERÍSTICAS Procesador Pentium 4 o superior. 1 GB de memoria RAM o superior. 80 GB en disco duro. Windows XP/ Windows Vista/Linux. Navegador web Mozilla. Contenedor Web Apache Tomcat 5.5 Servidor de mapas (WMS) elegido en la fase de análisis de servidores. Mapas vectoriales de servicios municipales y carreteros. NetBeans 6.0 como entorno de programación. Macromedia Dreamweaver para el diseño de plantillas Web. JDK 1.5. PostgreSQL utilizado como manejador de base de datos. Procesador opcional. 512 de memoria RAM superior. Espacio en disco duro opcional. Sistema operativo opcional. Cualquier navegador Web (se recomienda utilizar Mozilla). Máquina virtual de Java. Liberación de pruebas Las pruebas fueron liberadas una vez que se obtuvieron los resultados esperados en cada caso de prueba. 3.10. Responsabilidades La autora de esta tesis tuvo la responsabilidad de efectuar todas las pruebas que se especificaron. 3.11. Riesgos y contingencias El tiempo fue factor importante para que todas las pruebas se efectuaran de manera correcta. Cuando se extendió el tiempo destinado a las pruebas del software, se continuó hasta que el sistema quedara libre de errores. Cuando se presentaron errores en el sistema que no se consideraron en el presente documento, fueron resueltos por el responsable de las pruebas. 4. Casos de prueba 4.1. Pruebas a realizar La tabla E.4 expone los casos de prueba de cada uno de los elementos de prueba mencionados anteriormente. Cada caso de prueba está identificado por el número asignado al elemento de prueba seguido de un número consecutivo: Página 169 Anexo E. Plan de pruebas Tabla E.4. Casos de prueba IDENTIFICADOR NOMBRE MAPWEBDE-01 Gestión de acceso al sistema. MAPWEBDE-01.01 Registro de usuarios. MAPWEBDE-01.02 Autentificación al sistema. MAPWEBDE-01.03 Rechazo al inicio de sesión. MAPWEBDE-01.04 Acceso al sistema. MAPWEBDE-02 Solicitud y visualización de mapas. MAPWEBDE-03 Aplicación de estilos al mapa. MAPWEBDE-03.01 Estilizar líneas MAPWEBDE-03.02 Estilizar polígonos. MAPWEBDE-03.03 Estilizar puntos. MAPWEBDE-03.04 Estilizar texto. MAPWEBDE-03.05 Generación de código XML. MAPWEBDE-04 Asociar mapa a plantilla de aplicación Web. MAPWEBDE-05 Publicación de la página Web. MAPWEBDE-06 Visualización de la página Web. 5. Procedimiento de pruebas En esta sección se presenta la descripción de cada caso de prueba. Para cada uno de los casos de prueba se describe el propósito del caso de prueba, el entorno necesario para la ejecución de la prueba, el procedimiento que se llevó a cabo para efectuar la prueba y los resultados que se esperaron. 5.1. MAPWEBDE-01 Gestión de acceso al sistema Propósito Verificar que los usuarios se registren e ingresen satisfactoriamente al sistema. En el caso de usuarios no registrados o de introducir incorrectamente el nombre de usuario (login) o el password, el sistema rechazará el acceso al mismo. Entorno Para la ejecución de los casos de prueba contenidos en este grupo se utilizarán los siguientes elementos: Equipo servidor en el que estará almacenada la aplicación MapWeb Designer y la base de datos. Equipo cliente el cual ejecutará la aplicación Web MapWeb Designer desde un navegador Web. Nombre de usuario (login). Contraseña. Datos del usuario (en caso del registro de usuarios). Resultado esperado El usuario se registrará en la base de datos y se le proporcionará el ingreso o rechazo al sistema. Página 170 Anexo E. Plan de pruebas 5.2. MAPWEBDE-01.01 Registro de usuarios Propósito Verificar que el usuario registre sus datos en el sistema satisfactoriamente. Entorno El usuario debe de tener ejecutando la página de registro de usuarios. Proceso 1. Ingresar datos personales (nombre, apellido paterno, apellido materno, organización, país, correo electrónico, confirmar correo, nombre de usuario, contraseña, confirmar contraseña y seleccionar estar de acuerdo con los términos y condiciones de la herramienta). 2. Pulsar botón “Registrar Usuario”. Resultado esperado El usuario debe de estar registrado en el sistema y podrá iniciar sesión con el nombre de usuario y contraseña proporcionados en el registro. En caso de que el usuario a registrarse ingrese un login que se encuentre almacenado en la base de datos, el sistema deberá notificar el error. 5.3. MAPWEBDE-01.02 Autentificación al sistema Propósito Verificar que el usuario ingrese al sistema satisfactoriamente. Entorno El usuario debe de estar registrado previamente en el sistema, es decir, éste ya posee un nombre de usuario y contraseña válidos que le permitirán ingresar al sistema. Proceso 1. Ingresar el nombre de usuario (login). 2. Ingresar contraseña. 3. Pulsar el botón “iniciar sesión”. Resultado esperado Si el usuario ingresó correctamente los datos deberá ver la interfaz del sistema MapWeb Designer. 5.4. MAPWEBDE-01.03 Rechazo al inicio de sesión Propósito Verificar que los usuarios no registrados tengan acceso denegado al sistema. Los usuarios registrados que ingresen datos de login y contraseña incorrectos deberán ser rechazados al inicio de la sesión en el sistema. Página 171 Anexo E. Plan de pruebas Entorno El usuario debe de ingresar el login y contraseña en la página correspondiente al inicio de sesión. Proceso 1. Ingresar el nombre de usuario (login). 2. Ingresar contraseña. 3. Pulsar el botón “iniciar sesión”. Resultado esperado Si el usuario aún no está registrado e ingresa datos de login y contraseña, el sistema deberá rechazar el ingreso. En caso de que un usuario registrado ingrese login o contraseña incorrectos el sistema también rechazará su acceso. 5.5. MAPWEBDE-01.04 Acceso al sistema Propósito Verificar que los usuarios registrados que ingresan login y contraseña correctos tengan acceso al sistema. Entorno El usuario registrado debe de ingresar el login y contraseña correctos en la página correspondiente al inicio de sesión. Proceso 1. Ingresar el nombre de usuario correctamente (login). 2. Ingresar contraseña correcta. 3. Pulsar el botón “iniciar sesión”. Resultado esperado El usuario deberá visualizar la interfaz del sistema. 5.6. MAPWEBDE-02 Solicitud y visualización de mapas Propósito Verificar que las peticiones de mapas solicitados sean visualizadas en un visor de mapas dentro del sistema MapWeb Designer. Entorno El usuario deberá estar autentificado en el sistema y se requiere de los siguientes elementos: Equipo Servidor de mapas (WMS) Aplicación MapWeb Designer corriendo en una máquina cliente. Datos de solicitud del mapa Página 172 Anexo E. Plan de pruebas Proceso 1. 2. 3. 4. 5. Ingresar al sistema. Elegir Nuevo Proyecto. Seleccionar el mapa a visualizar. Enviar solicitud a WMS. Esperar la respuesta del WMS. Resultado esperado El mapa solicitado se visualizará en el visor de mapas de la aplicación. 5.7. MAPWEBDE-03 Aplicación de estilos al mapa Propósito Verificar que los estilos aplicados al mapa se vean reflejados en el visor de mapas. Entorno El usuario debe estar autentificado en el sistema y haber visualizado en el visor de mapas de la aplicación un mapa solicitado al WMS. Resultado esperado Se visualizarán los cambios de estilos sobre el mapa y se generará un archivo XML el cual contendrá la estilización del mapa. 5.8. MAPWEBDE-03.01 Estilizar líneas Propósito Verificar que el tipo de línea, color, ancho y transparencia configurados sean aplicados correctamente a las líneas del mapa visualizado. Entorno El usuario debe estar autentificado en el sistema y haber visualizado el mapa solicitado en el visor de mapas de la aplicación. Proceso 1. Elegir tipo de geometría línea. Para indicar que se van a estilizar las líneas del mapa. 2. Configurar las opciones de estilo según las necesidades del usuario. 3. Aplicar el estilo al mapa visualizado. Resultado esperado Los objetos tipo línea mostradas en el mapa deben de cambiar de color, tipo de línea y grosor de acuerdo a la configuración realizada por el usuario. Página 173 Anexo E. Plan de pruebas 5.9. MAPWEBDE-03.02 Estilizar polígonos Propósito Verificar que las líneas y el relleno de polígonos visualizados en el mapa, cambien de estilo de acuerdo a configuración de estilo proporcionada por el usuario. Entorno El usuario debe de haberse autentificado en el sistema y haber visualizado el mapa solicitado sobre el visor de mapas de la aplicación. Proceso 1. Elegir tipo de geometría polígono para indicar que se van a estilizar los polígonos del mapa. 2. Configurar las opciones de estilo según las necesidades del usuario. 3. Aplicar el estilo al mapa visualizado. Resultado esperado Los objetos tipo polígono mostrados en el mapa deben de cambiar de apariencia de acuerdo a la configuración realizada por el usuario. 5.10. MAPWEBDE-03.03 Estilizar puntos Propósito Verificar que los puntos mostrados en el mapa, cambien de estilo de acuerdo a la configuración proporcionada por el usuario. Entorno El usuario debe estar autentificado en el sistema y haber visualizado el mapa solicitado en el visor de mapas de la aplicación. Proceso 1. Elegir tipo de geometría punto para indicar que se van a estilizar los puntos del mapa. 2. Configurar las opciones de estilo según las necesidades del usuario. 3. Aplicar el estilo al mapa visualizado. Resultado esperado Los objetos tipo punto mostrados en el mapa deben de cambiar de apariencia de acuerdo a la configuración realizada por el usuario. 5.11. MAPWEBDE-03.04 Estilizar texto Propósito Verificar que el texto asociado al mapa, cambie de estilo de acuerdo a la configuración proporcionada por el usuario. Página 174 Anexo E. Plan de pruebas Entorno El usuario debe estar autentificado en el sistema y haber visualizado el mapa solicitado en el visor de mapas de la aplicación. Proceso 1. Elegir tipo de geometría texto para indicar que se van a asignar propiedades de estilo a texto relacionado con el mapa. 2. Dar clic sobre cualquier objeto del mapa para obtener los nombres de las etiquetas asociadas al mapa. 3. Configurar las opciones de estilo según las necesidades del usuario. 4. Aplicar el estilo al mapa visualizado. Resultado esperado Los objetos tipo texto mostrados en el mapa deben de cambiar de apariencia de acuerdo a la configuración realizada por el usuario. 5.12. MAPWEBDE-03.05 Generación de código XML Propósito Verificar que se genere correctamente el código XML correspondiente a los estilos aplicados sobre el mapa visualizado en el visor de mapas. Entorno El usuario debe haberse autentificado en el sistema, haber visualizado el mapa solicitado y estar en el proceso de estilización del mapa. Proceso 1. Realizar un cambio de estilo en el mapa. Resultado esperado Cada vez que se realice un cambio de estilo sobre el mapa visualizado en la aplicación, se deberá generar el código XML correspondiente al estilo aplicado. 5.13. MAPWEBDE-04 Asociar mapa a plantilla de página Web Propósito Verificar que el mapa estilizado sea asociado a una plantilla de página Web elegida por el usuario. Entorno El usuario debe de haberse autentificado en el sistema, haber visualizado y estilizado el mapa solicitado y finalmente haber seleccionado una plantilla de página Web. Proceso 1. Terminar de estilizar el mapa. 2. Seleccionar “Asociar mapa a plantilla de página Web”. Página 175 Anexo E. Plan de pruebas 3. Del catálogo de plantillas Web elegir la que se desee. 4. Pulsar Asociar mapa y publicar página Web Resultado esperado La plantilla elegida deberá contener el mapa estilizado por el usuario. 5.14. MAPWEBDE -05 Publicación de la página Web Propósito Verificar que la publicación de la página Web se efectúe de manera correcta. Entorno El usuario debe de estar autentificado en el sistema, haber terminado de diseñar la aplicación Web y haber elegido una plantilla de página Web. Proceso 1. 2. 3. 4. 5. 6. Ingresar al sistema. Solicitar un mapa. Estilizar el mapa. Seleccionar “Asociar mapa a plantilla general”. Del catálogo de plantillas predefinidas elegir una de ellas. Seleccionar “Asociar mapa y publicar página Web”. Resultado esperado Los archivos necesarios para la publicación del mapa deberán ser copiados a la carpeta Web del usuario de manera satisfactoria. 5.15. MAPWEBDE-06 Visualización de la página Web Propósito Verificar que la página Web publicada se ejecute y visualice en el navegador de forma correcta. Entorno El usuario debe de estar autentificado en el sistema, haber terminado de diseñar y publicar la página Web. Proceso 1. Ingresar al sistema. 2. Elegir la opción de abrir proyecto. 3. Seleccionar ver publicación del mapa que se desee visualizar. Resultado esperado Deberá visualizarse en el navegador la aplicación Web con el mapa estilizado. Página 176 Referencias REFERENCIAS [ADSENSE, 2008] Google AdSense. Información acerca de AdSense. [En línea] https://www.google.com/adsense/login/es/?hl=es&gsessionid=CUFlUhiS L9-aVYqx3weFrg. Consultado en Diciembre 2008 [ARMSTRONG, 2007] Armstrong Eric, et al, 2007. The J2EE 1.4 Tutorial. Página 44. Sun Java System Application Server Platform Edition 8.2. [En línea] http://java.sun.com/j2ee/1.4/docs/tutorial/doc/J2EETutorial.pdf. Consultado en Octubre 2008. [BRISABOA, 2007] Brisaboa Nieves R., et al , sf. Definición e implementación de un servicio Web de mapas activos. Universidad de Coruña. [CARMONA, 2007] Carmona Álvaro, Monsalve Jhon. Sistemas de Información Geográficos. [En línea] http://www.monografias.com/trabajos/gis/gis.shtml. Consultado en Marzo de 2007 [CLICK2MAP 2008] Click2Map, 2008. Click2Map, a new way to build your Google Maps. [En línea] http://www.click2map.com/. Consultado en Agosto 2008. [CRANE, 2006] Crane Dave, Pascarello Eric with Darren James. Ajax in action MANNING. Greenwich. 2006 Págs. 4, 17-27, 32. [CSGRIP, 2008] Consejo Superior Geográfico, 2008.Infraestructura de Datos Espaciales de España. Rincón del Programador. [En línea] http://www.idee.es/show.do?to=pideep_ejemplosOGC.ES. Consultado en Febrero 2008. [CSGWMS, 2008] Consejo Superior Geográfico, Infraestructura de Datos Espaciales de España, 2008. Web Map Service 1.3.0. [En línea] http://www.idee.es/show.do?to=pidee_programador_wms.ES. Consultado en Febrero 2008. [DATACROSSING, 2007] DataCrossing, 2007. msCross: AJAX (WEB 2.0) WEB GIS Client. [En línea] http://datacrossing.crs4.it/en_Documentation_mscross.html. Consultado el 9 de Abril de 2008. [DEGREE, 2008] Degree, 2008. Some bits of history first. [En línea] http://deegree.sourceforge.net/inf/about.html. Consultado en Marzo 2008. [DESIGE, 2008] Département des Sciences Géomatiques. Qu'est-ce que la géomatique. [En línea] http://www.scg.ulaval.ca/page.php?nom=geomatique. Consultado en Diciembre 2008 [DIGECA, 2008] Dirección General del Catastro, 2008. Servicio WMS de Ponencias de valores. [En línea] http://www.catastro.meh.es/pdf/wms_ponencias.pdf. Consultado en Febrero 2008. [EDNEW, 2009]. Educación Newton. Sistema de referencia. [En línea] http://newton.cnice.mec.es/escenas/cinematica/sist_ref.php. Consultado en Enero 2009. Página 177 Referencias [EGUILUZ, 2008] Eguíluz Pérez Javier, 2008. Introducción a JavaScript. [En línea] http://www.librosweb.es/javascript/pdf/introduccion_javascript.pdf. Consultado en Octubre 2008. [ESRI, 2008] Sitio oficial ESRI. ESRI GIS and Mapping Software. [En línea], http://www.esri.com/. Consultado en Noviembre de 2008 [FERNANDEZ, 2004] Fernández Hernán Darío, 2004. Introducción al Framework Web de Jakarta Struts con WSAD 5.1, Colombia. [GEORSS, 2007] Sitio oficial GeoRSS. Geographycally Encoded Objects for RSS feeds, [En línea] http://www.georss.org/1#intro. Consultado en Octubre 2007. [GEOSERVER, 2008] Página oficial de Geoserver, 2008. Geoserver Home, What is Geoserver. [En línea] http://geoserver.org/display/GEOS/GeoServer+Home. Consultado en Marzo 2008. [GEOSERVERFEA, 2008] Página oficial de Geoserver, 2008. Features, Geoserver Features. [En línea] http://geoserver.org/display/GEOS/Features. Consultado en Marzo 2008. [GOOGLEMAPS, 2007] Google Maps, 2007. Sitio oficial de Google Maps.[En línea] http://www.google.com/apis/maps/. Consultado en 18 de Abril de 2007 [GUTIERREZ, 2000] Gutiérrez Rodríguez Abraham; Martínez González Raúl. XML a través de ejemplos. Alfaomega Ra-Ma [HONCEVAR, 2007] Honcevar, Andreas, 2007. About Mapbuilder. [En http://communitymapbuilder.org/. Consultado en abril de 2008 [IEEE, 1998] IEEE,1998. Software Engineering Technical Committee of the IEEE Computer Society. IEEE Standard for Software Test Documentation. [En línea] http://www.ucsc.cl/~marciam/weblog/images/ieeestd8291998standardtest_documentation.pdf. Consultado en Octubre 2007 [LATLON, 2008] Lat/lon, Universidad de Bonn, 2008. Degree Web Map Service v.2.1, Departamento de Geografía de la Universidad de Bonn. [LBSPRO, 2007] LBSPRO, 2007. Sistema de información geográfico. [En línea] http://wiki.lbspro.com/index.php?title=Sistema_de_Informaci%C3%B3n_ Geogr%C3%A1fico. Consultado el 9 de marzo de 2007. [LEARNER, 2003] "Cartography." World of Earth Science. Eds. K. Lee Lerner and Brenda Wilmoth Lerner. Vol. 1. Detroit: Gale, 2003. Págs. 95-96. [LEWOTSKY, 2004] Lewotsky, Karen. "Cartography." Gale Encyclopedia of Science. Eds. K. Lee Lerner and Brenda Lerner. Vol. 1. 3rd ed. Detroit: Gale, 2004. Págs. 742-748. [LOPEZ, 2006] López Romero Emilio, F. Rodríguez Antonio, 2006. IDEE. Recomendaciones para la creación y configuración de servicios de mapas. Consejo Superior Geográfico. Pág. 7. [MAP24 2008] Map24, 2008. Map24 México. [En línea] http://www.mx.map24.com/. Consultado en Agosto 2008. línea] Página 178 Referencias [MAPBUILDER, 2007] Mapbuilder, 2007. Sitio Oficial MapBuilder.[En línea] http://www.mapbuilder.net/index.php. Consultado en Noviembre 2007. [MAPBUILDER, 2008] MapBuilder, 2008. MapBuilder User Guide. [En línea] http://geodiscover.cgdi.ca/mapbuilder/userGuide?page=intro. Consultado en abril de 2008. [MAPSERVER, 2008] Página Oficial de MapServer, 2008. Welcome to MapServer, Features. [En línea] http://mapserver.gis.umn.edu/. Consultado en Marzo 2008. [MAPTOOLS, 2007] MapTools.org, 2007. Ka-Map. [En línea] http://ka-map.maptools.org/. Consultado en abril 2008. [MONTESINOS, 2007] Montesinos Lajara Miguel, Sanz Salinas Jorge Gaspar, Panorama actual del ecosistema de software libre para SIG. [En línea] http://www.sigte.udg.es/jornadassiglibre2007/comun/1pdf/12.pdf. Consultado en Diciembre 2007. [OGC, 2008] Open Geospatial Consortium, 2008. Sitio Oficial de la OGC,About OGC.[En línea] http://www.opengeospatial.org/ogc. Consultado en Agosto, 2008. [OGCGML, 2007] Open Geospatial Consortium Inc., 2007. OpenGIS Geography Markup Language (GML) Encoding Specification. Version 3.2.1, Clemens Portele. [OGCSLD, 2002] Open Geospatial Consortium Inc., 2002. Styled Layer Descriptor Implementation Specification. Version 1.0.0, William Lalonde. [OGCWFS, 2002] Open Geospatial Consortium Inc., 2002. Web Feature Service Implementation Specification. Version 1.1.1, Panagiotis A. Vretanos. [OGCWMS, 2002] Open Geospatial Consortium Inc., 2002. OpenGIS Web Map Server Implementation Specification. Version 1.1.1, Jeff de la Beaujardiere. [OPENLAYERS, 2008] OpenLayers, 2008. About . [En línea] http://www.openlayers.org/. Consultado en Abril de 2008. [POKML, 2008] Página Oficial de Google, 2008. Acerca de KML. [En línea] http://earth.google.es/userguide/v4/ug_kml.html. Consultado en Diciembre 2008. [RFC4180, 2005] Y. Shafranovich. Common Format and MIME Type for Comma-Separated Values (CSV) Files, Octubre de 2005 [SARRIA, 2007] Sarría Francisco Alonso,2007. Sistemas de Información Geográfica. [En línea] http://www.um.es/geograf/sigmur/sigpdf/temario.pdf. Consultado en marzo 2007. [SOMMERVILLE 2005] Sommerville Ian, Ingeniería del Software. Pearson Addison Wesley, séptima edición, 2005. [VON, 2005] Von Braun, Margrit, and Deena Lilya. "GIS (Geographic Information System)." Pollution A to Z. Ed. Richard M. Stapleton. Vol. 1. New York: Macmillan Reference USA, 2004. 222-224. 2 vols. Gale Virtual Reference Library. Thomson Gale. Dir. de Institutos Tecnológicos. 14 Aug. 2007 Página 179 Referencias [WIKIAPI, 2007] Wikipedia. Application Programming Interface. [En http://es.wikipedia.org/wiki/API. Consultado en Abril de 2007 línea], [WIKIGMAPS, 2007] Wikipedia, 2007. Google maps. [En línea], http://es.wikipedia.org/wiki/Google_Maps. Consultado en 18 de Abril de 2007 [WIKIMASH, 2009] Wikipedia. Definición de Mashup. [En línea], http://es.wikipedia.org/wiki/Mashup_(aplicaci%C3%B3n_web_h%C3%A Dbrida). Consultado en 20 de enero de 2009. [WIKIMATH, 2009] Wikipedia. Definición de MathML. [En línea], http://es.wikipedia.org/wiki/MathML. Consultado en 20 de enero de 2009. [WIKISHP, 2008] Wikipedia. Definición de ShapeFile. [En línea]. http://es.wikipedia.org/wiki/Shapefile. Consultado en Noviembre de 2008 [WIKIWIDG, 2009] Wikipedia. Definición de widget. [En línea]. http://es.wikipedia.org/wiki/Artilugio. Consultado en Enero de 2009. [WMSJALI, 2008] Brent Pedersen, 2008 .WMS JavaScript Library. [En línea] http://wmsmap.sourceforge.net/. Consultado en febrero de 2008. [W3CSGML, 2009] World Wide Web Consortium. Overview of SGML resources. [En línea] http://www.w3.org/MarkUp/SGML/. Consultado en Enero 2009. [YAHOOMAPS, 2007] Yahoo Maps, 2007. Sitio official de Yahoo Maps. [En línea] http://espanol.maps.yahoo.com. Consultado en Abril 2007. [ZOOM IN 2007] ZOOMIN, 2007. El mejor camino para explorar Australia.[En línea] http://zoomin.com.au/. Consultado en Noviembre 2007. Página 180