UNIVERSIDAD CENTRAL DEL ECUADOR FACULTAD DE INGENIERÍA, CIENCIAS FÍSICAS Y MATEMÁTICA CARRERA DE INGENIERÍA INFORMÁTICA DISEÑO Y DESARROLLO DE UNA HERRAMIENTA WEB GEOGRÁFICA PROTOTIPO PARA APOYAR LA OPTIMIZACIÓN DE TIEMPOS DE RESPUESTA A LOS SERVICIOS DE SALUD AMBULATORIOS DENTRO DE LAS ÁREAS POBLADAS URBANAS DEL DISTRITO METROPOLITANO DE QUITO –DMQ-. TRABAJO DE GRADUACIÓN PREVIO A LA OBTENCIÓN DEL TÍTULO DE INGENIERO INFORMÁTICO. AUTOR: JHONATHAN GUILLERMO VACA CABRERA TUTOR: ING. LUIS FELIPE BORJA BORJA QUITO – ECUADOR 2015 DEDICATORIA Dedico la presente tesis a Dios, a mis padres que con su incansable apoyo, esfuerzo y sabiduría han sabido guiar mis pasos, a mis abuelos que ven en este documento cumplir uno de sus sueños y más anhelados regalos, a mi enamorada y amigos que siempre han estado ahí para apoyarme y a todas las personas que al conocerlas han marcado el camino que hoy recorro. A mi hermana que siempre me motivo a ser y seguir siendo mejor en todo lo que me propongo ya que ha visto en mí el modelo de persona a seguir en su vida personal y profesional. ii AGRADECIMIENTO A la Universidad Central del Ecuador, a la facultad de Ingeniería, Ciencias Físicas y Matemática, a todo el personal docente que han aportado con su conocimiento en mi formación personal y profesional. A mi tutor de tesis que fomento en mí el interés en los sistemas de información geográfica. Un agradecimiento especial a EXCO y a su gerente de proyectos Elvis Benítez por su amistad, apoyo y guía durante el desarrollo de la presente tesis. iii AUTORIZACIÓN INTELECTUAL Yo, JHONATHAN GUILLERMO VACA CABRERA en calidad de autor del trabajo de investigación o tesis realizada sobre el Diseño y desarrollo de una herramienta web geográfica prototipo para apoyar la optimización de tiempos de respuesta a los servicios de salud ambulatorios dentro de las áreas pobladas urbanas del Distrito Metropolitano de Quito –DMQ-, por el presente autorizo a la UNIVERSIDAD CENTRAL DEL ECUADOR, hacer uso de todos los contenidos que me pertenecen o de parte de los que contiene esta obra, con fines estrictamente académicos o de investigación. Los derechos que como autor me corresponden, con excepción de la presente autorización, seguirán vigentes a mi favor, de conformidad con lo establecido en los artículos 5, 6, 8, 19 y demás participantes de la Ley de Propiedad Intelectual y su reglamento. Quito, 15 Mayo de 2015 _________________________________________ JHONATHAN GUILLERMO VACA CABRERA C.C. 1721349890 iv v vi vii viii Contenido PORTADA .................................................................................................................... i DEDICATORIA........................................................................................................... ii AGRADECIMIENTO ................................................................................................. iii AUTORIZACIÓN INTELECTUAL ......................................................................... iv LISTA DE TABLAS ................................................................................................... xi LISTA DE ILUSTRACIONES .................................................................................. xii RESUMEN ................................................................................................................ xiv ABSTRACT ............................................................................................................... xv CAPÍTULO 1 ............................................................................................................... 1 Introducción .......................................................................................................... 1 Antecedentes ......................................................................................................... 1 Justificación e importancia .................................................................................... 3 Planteamiento del problema .................................................................................. 3 Formulación del problema .................................................................................... 4 Objetivos de la investigación ................................................................................ 4 Alcance .................................................................................................................. 4 Limitaciones .......................................................................................................... 5 CAPÍTULO 2 ............................................................................................................... 5 Servicios pre hospitalarios públicos en el DMQ ................................................... 5 a. Servicios pre hospitalarios ............................................................................. 5 b. Análisis de oferta de servicios públicos pre hospitalarios ............................. 6 c. Estándares nacionales e internacionales para manejo de información para atención pre hospitalaria. ...................................................................................... 8 d. Análisis y definición conceptual.................................................................. 11 e. Experiencias de otras ciudades metropolitanas referente a servicios de salud ambulatorios ........................................................................................................ 16 CAPÍTULO 3 ............................................................................................................. 16 GIS y Dispositivos móviles. ................................................................................ 16 a. Sistemas de información geográfica (GIS). ................................................. 16 i. Arquitectura de los servidores de mapas ..................................................... 18 ii. Entradas y salidas de datos soportados ........................................................ 20 iii. Tipos de servicios: WMS, WFS............................................................... 25 iv. Librerías de visualización geográfica ...................................................... 40 v. Frameworks para integración geográfica y alfanumérica. .............................. 42 b. ¿Qué es un dispositivo móvil? ........................................................................ 44 i. Sistemas operativos móviles. .......................................................................... 45 ix ii. Componentes incorporados en los móviles actuales. ...................................... 48 iii. Frameworks de desarrollo de aplicaciones móviles................................. 51 CAPÍTULO 4 ............................................................................................................. 53 Infraestructura tecnológica .................................................................................. 53 a. Bases de datos alfanuméricas .......................................................................... 53 b. Bases de datos geográficas .............................................................................. 54 c. Frameworks o librerías para el desarrollo de aplicaciones SIG ...................... 57 d. Algoritmo para encontrar la ruta más corta entre dos puntos ......................... 57 e. Librerías para desarrollo de aplicaciones móviles .......................................... 59 CAPÍTULO 5 ............................................................................................................. 60 Diseño, desarrollo y pruebas del sistema prototipo ............................................ 60 a. Objetivos generales y específicos ................................................................... 60 b. Diseño del sistema. .......................................................................................... 60 i. Diagrama entidad relación. .......................................................................... 61 ii. Diagramas de Casos de Uso ........................................................................ 63 iii. Formularios .............................................................................................. 63 iv. Prototipo de interfaz. (Móvil y WEB) ..................................................... 64 c. Pruebas......................................................................................................... 66 i. Rendimiento................................................................................................. 66 ii. Control. ........................................................................................................ 71 Manual de usuario. .............................................................................................. 72 a. Visor Geográfico ......................................................................................... 73 b. Aplicación Móvil ......................................................................................... 80 CAPÍTULO 6 ............................................................................................................. 83 Conclusiones y recomendaciones ....................................................................... 83 CAPÍTULO 7 ............................................................................................................. 85 Bibliografía ......................................................................................................... 85 ANEXOS............................................................................................................. 90 x LISTA DE TABLAS Tabla 1 – Número de ambulancias en el DMQ en el año 2012 (Extra, 2012) .........................................7 Tabla 2 – Representación de colores según su prioridad (Carrasco, Gonzáles, & Moreno, 2000). ......11 Tabla 3 –Alternativas de software requerido. .......................................................................................13 Tabla 4 –Recursos necesarios para desarrollo del sistema. ...................................................................15 Tabla 5 – Ejemplo de petición getCapabilities ......................................................................................28 Tabla 6 – Ejemplo de petición getMap .................................................................................................29 Tabla 7 – Ejemplo de petición getFeatureInfo ......................................................................................29 Tabla 8 – Ejemplo de petición getCapabilities (WFS) ..........................................................................37 Tabla 9 – Ejemplo de petición DescribeFeatureType (WFS) ...............................................................37 Tabla 10 – Ejemplo de petición getFeature (WFS) ...............................................................................38 Tabla 11 – Ejemplo de petición getPropertyValue (WFS) ....................................................................39 Tabla 12 – Ejemplo de petición getFeatureWithLock (WFS) ...............................................................40 Tabla 13 – Unidades de Smartphones vendidos en los años 2013 y 2014 (GFK, 2015) .......................45 Tabla 14 – Porcentaje de distribución del mercado mundial según el sistema operativo al año 2014 (IDC, International Data Corporation, 2014) ........................................................................................47 Tabla 15 – Unidades de Smartphones vendidos en los años 2012,2013 y 2014 clasificados por sistema operativo (GFK, 2015). .........................................................................................................................48 Tabla 16 – Comparativa SGBD. ...........................................................................................................54 Tabla 17 – Comparativa extensiones geográficas. ................................................................................56 Tabla 18 – Pruebas de rendimiento prototipo web. ...............................................................................67 Tabla 19 – Pruebas de rendimiento prototipo móvil. ............................................................................70 xi LISTA DE ILUSTRACIONES Ilustración 1.Esquema de decisión de triaje efectuado por el personal en la atención pre hospitalaria (Carrasco, Gonzáles, & Moreno, 2000, pág. 177). ..................................................................................9 Ilustración 2.Triaje START usado por la Cruz Roja Ecuatoriana (e-mergencia.com, 2009) ................10 Ilustración 3.Sistema de tarjetas usado por la Cruz Roja Ecuatoriana (Carrasco, Gonzáles, & Moreno, 2000, pág. 173). ....................................................................................................................................11 Ilustración 4. Situaciones de emergencia y prioridad de atención prehospitalaria (Carrasco, Gonzáles, & Moreno, 2000, pág. 172). ..................................................................................................................11 Ilustración 5.Diagrama de procesos para la atención medica pre hospitalaria. .....................................12 Ilustración 6.Mapa de pozos y decesos por cólera. (Wikipedia, 2005) .................................................17 Ilustración 7.Representacion de un mapa geográfico conformado por diversas capas. ........................18 Ilustración 8.Diagrama de un servidor de mapas en internet (IMS). .....................................................19 Ilustración 9.representación geográfica con GML. ...............................................................................23 Ilustración 10.representación geográfica con KML. .............................................................................24 Ilustración 11.representación geográfica con WMS. ............................................................................24 Ilustración 12.representación funcionamiento de los servicios WMS (Osegeo Live, 2014). ................25 Ilustración 13.representación funcionamiento de los servicios WFS (OSGeo Live, 2014). .................30 Ilustración 14.Relación entre clientes web geográficos (GeoTux, 2012). .............................................41 Ilustración 15. Gráfico arquitectura Geomajas (Geomajas, 2014). .......................................................43 Ilustración 16.Indicador de personas con Smartphones en el Ecuador (INEC, 2013). ..........................45 Ilustración 17.Modelo de capas de un sistema operativo móvil (Android) (Maksim, 2013). ...............46 Ilustración 18.Evolución ventas de Smartphones clasificados por sistema operativo (Wikipedia, 2015). ..............................................................................................................................................................47 Ilustración 19 A-GPS. Diagrama de funcionamiento (Windows Central, 2009). .................................50 Ilustración 20.Orbitas de satélites en la tierra, Glonass (izquierda) y GPS (derecha) (Barbian, 2014). ..............................................................................................................................................................50 Ilustración 21.Triangulación asistida por GPS y Glonass (Glonass.it, s.f.). ..........................................51 Ilustración 22.Android Studio (Android Developer, 2015)...................................................................51 Ilustración 23.IDE XCode (Apple, Inc., 2015). ....................................................................................52 Ilustración 24.Infraestructura de base de datos y extensión geográfica seleccionada para el sistema. ..............................................................................................................................................................57 Ilustración 25.Infraestructura de la capa de presentación seleccionada para el sistema. ...................57 Ilustración 26. Ejemplo topología de red vial. .......................................................................................59 Ilustración 27. Diseño arquitectura del sistema. ..................................................................................61 Ilustración 28. Modelo de base de datos geográfica. ...........................................................................62 Ilustración 29. Diagrama de casos de uso. ............................................................................................63 Ilustración 30.Formulario para el registro de emergencias. .................................................................64 Ilustración 31.Prototipo de interfaz web para el registro de emergencias. .........................................65 xii Ilustración 32.Prototipo de interfaz móvil (pantalla inicial). .................................................................65 Ilustración 33.Prototipo de interfaz móvil (pantalla de capas temáticas). ...........................................66 Ilustración 34.Estadística de peticiones y bytes de carga durante la primera carga (prototipo web). .68 Ilustración 35.Estadística de peticiones y bytes de carga durante la re - visita (prototipo web). ........68 Ilustración 36.Estadística de peticiones y bytes de carga durante la primera carga (prototipo móvil). ..............................................................................................................................................................71 Ilustración 37.Estadística de peticiones y bytes de carga durante la re - visita (prototipo móvil)........71 Ilustración 38. Pantalla de ingreso al sistema .......................................................................................73 Ilustración 39. Descripción general del visor .......................................................................................73 Ilustración 40. Capas base ....................................................................................................................74 Ilustración 41. Servicios de Salud .........................................................................................................75 Ilustración 42. Medir distancia. ............................................................................................................76 Ilustración 43. Medir área ....................................................................................................................76 Ilustración 44. Punto de coordenadas. ................................................................................................77 Ilustración 45. Ingrese coordenadas para ir a un lugar del mapa. .......................................................77 Ilustración 46. Resultado de búsqueda. ...............................................................................................78 Ilustración 47. Información de elemento. ............................................................................................78 Ilustración 48. Agregar mapas WMS ....................................................................................................78 Ilustración 49. Registro de emergencias ..............................................................................................79 Ilustración 50. Pantalla de ingreso aplicación móvil ............................................................................80 Ilustración 51. Pantalla de inicio aplicación móvil ...............................................................................81 Ilustración 52. Pantalla de localización aplicación móvil .....................................................................81 Ilustración 53. Selección de capas temáticas .......................................................................................82 Ilustración 54. Presentación de la ruta ................................................................................................83 Ilustración 55. Presentación de la ruta más corta ................................................................................83 xiii RESUMEN DISEÑO Y DESARROLLO DE UNA HERRAMIENTA WEB GEOGRÁFICA PROTOTIPO PARA APOYAR LA OPTIMIZACIÓN DE TIEMPOS DE RESPUESTA A LOS SERVICIOS DE SALUD AMBULATORIOS DENTRO DE LAS ÁREAS POBLADAS URBANAS DEL DISTRITO METROPOLITANO DE QUITO –DMQ-. El presente trabajo de investigación explora la propuesta de desarrollar un sistema prototipo capaz de ayudar a automatizar la logística de los vehículos de servicios ambulatorios con la finalidad que a un futuro dichos servicios puedan mejorar a nivel local y/o nacional con estándares de tiempos de respuesta recomendados internacionalmente haciendo uso de aplicaciones web en tiempo real. La aplicación fue desarrollada con conceptos de programación distribuida, utilizando WebSockets e implementa la arquitectura de 4-capas, la capa de datos PostgreSQL, PostGIS y pgRouting para manejar topologías viales, la capa de negocio usa estándares JEE6 sobre el servidor WildFly (v8.2), una capa de servicios para interoperabilidad del sistema con servicios REST desacoplando la capa de presentación, permitiendo una aplicación escalable y una capa de presentación desarrollada con HTML5, JavaScript, JQuery, OpenLayers, JSON y GeoJSON. DESCRIPTORES: VISOR GEOGRÁFICO / SIG / WMS / WFS / JSON / GEOJSON / OPENLAYERS / JAVA / WEBSOCKETS / SERVICIOS WEB REST / POSTGRESQL / POSTGIS / PGROUTING / WILDFLY / HTML5 / JQUERY / JQUERY MOBILE / JAVASCRIPT / HERON-MC xiv ABSTRACT DISIGN AND DEVELOP OF A GEOGRAPHIC PROTOTYPE WEB TOOL TO SUPPORT THE OPTIMIZATION OF RESPONSE TIMES TO OUTPATIENT HEALTH SERVICES IN POPULATED AREAS OF THE METROPOLITAN DISTRICT OF QUITO -DMQ-. This paper presents the proposal to develop a prototype system capable to help automate the logistics of vehicles outpatient services in order that in the near future improve these outpatient services locally and / or country standards of response times internationally recommended, using real time web applications. The application was developed under the concepts of distributed programming using WebSockets and implements the architecture of 4-tiers, where data tier is designed with PostgreSQL, PostGIS and pgRouting for handling road topologies, the business tier using JEE6 standards RedHat WildFly (v8.2) server, service tier designed for system interoperability with web services REST to decouple the presentation tier, enabling an scalable application and presentation tier developed with HTML5, JavaScript, JQuery, OpenLayers, JSON and GeoJSON. DESCRIPTORS: WEB MAPPING / GIS / WMS / WFS / JSON / GEOJSON / OPENLAYERS / JAVA / WEBSOCKETS / WEB SERVICES REST / POSTGRESQL / POSTGIS / PGROUTING / WILDFLY / HTML5 / JQUERY / JQUERY MOBILE / JAVASCRIPT / HERON-MC xv xvi xvii CAPÍTULO 1 Introducción La Universidad Central del Ecuador como institución de educación superior comprometida con la sociedad y la investigación, junto a la Facultad de Ingeniería Ciencias Físicas y Matemática formadora de nuevos profesionales con visión innovadora capaces de desarrollar soluciones tecnológicas que ayudan a mejorar la atención a los ciudadanos en distintos ámbitos tales como: educación, salud y bienestar social. En tal sentido siendo evidentes las necesidades de herramientas tecnológicas que apoyen en la gestión de información de las entidades de salud tanto públicas, como privadas las cuales requieren organizar sus recursos de manera eficiente con el fin de brindar una mejor atención a sus clientes, hemos seleccionado al servicio ambulatorio como uno de los servicios que actualmente varias casas de salud ofrecen a través de las llamadas de emergencia que realizan los clientes (pacientes), para esto es necesario optimizar al máximo los recursos y principalmente el tiempo necesario para la atención de emergencia. Una de las ramas de la informática que han tomado mucha fuerza en los últimos años por su utilidad y ayuda son los GIS o sistemas de información geográfica con el fin de resolver problemas complejos de planificación y gestión geográfica. Antecedentes Quito es una de las ciudades más pobladas del país con una población de 2,239,191 según los datos del último censo realizado en 2010, como toda metrópoli que aumenta cada vez su población necesita nuevas y mejores formas de distribuir sus recursos médicos o de atención pre hospitalaria. Quito cuenta con un sistema vial complejo, en ocasiones con vías de difícil acceso, las unidades de emergencia como las unidades ambulatorias presentan retrasos durante un llamado de emergencia y los tiempos de respuesta se encuentran por encima de los límites recomendados internacionalmente. Un promedio de 18 minutos tardan en responder a una emergencia las ambulancias que son coordinadas por el sistema ECU-911, según se confirmó en el Servicio de Atención Pre hospitalaria del Ministerio de Salud Pública (MSP) donde se admitió que aún no se llega al tiempo óptimo de respuesta. (La Hora, 2013) 1 Henry Ochoa, coordinador de atención pre hospitalaria de la Cruz Roja, mantiene que realmente debería ser de apenas cinco minutos, pero reconoce que el tiempo real desde que se despacha una ambulancia hasta que ésta llega al sitio donde fue requerida, puede variar de 2 hasta 12 minutos sin tomar en cuenta los siete adicionales que transcurren desde que una persona llama al ECU-911 hasta que el operador despacha la ambulancia, ese tiempo supera al recomendado internacionalmente, que fluctúa entre 5 a 8 minutos (La Hora, 2013). Los paramédicos reconocen que cerca del 80% de oportunidades, no han llegado a tiempo a una escena. “A veces no depende de nosotros, si el lugar queda muy lejos resulta muy complicado llegar a tiempo, en otras ocasiones el problema está en la central de emergencias” (ciudadaniainformada, 2009). (El Universo, 2014), “El informe del ECU-911, precisa en 14 minutos y 23 segundos el tiempo desde que se despacha una ambulancia hasta que esta llega al sitio del incidente”. Esta realidad no solo se presenta en la ciudad de Quito, como el caso de Guayaquil otra de las urbes con más densidad poblacional del país donde el 14% de las ambulancias pedidas no llegan al sitio según el informe del ECU-911 de Samborondón o en Santo Domingo que solo el 5.2% de los heridos llega a las unidades de salud en ambulancia. Datos que dan a conocer una realidad donde el ausentismo, falta de unidades ambulatorias o un tardío envío de las unidades desde los centros de control apunta que es necesario un cambio en la gestión de los recursos médicos y los centros de control. La introducción y uso de dispositivos móviles es cada vez más elevada, según información publicada por el ministerio de telecomunicaciones hasta el mes de junio del año 2014 la penetración de telefonía móvil alcanzó 17’600.0000 de teléfonos habilitados es decir el 105%, sobre la población que es aproximadamente 16’000.000 de personas, y todo apunta a que esta tendencia se mantendrá a lo largo de los próximos años. Nuevas formas de comunicación móvil y la incursión de los visores y sistemas de información geográfica permiten desarrollar aplicaciones capaces de mejorar la gestión de los centros de control y permitir una mejoría sustancial en la atención de los servicios de salud pre hospitalarios. 2 Justificación e importancia Hoy en día las herramientas de visualización geográfica son cada vez más difundidas y utilizadas como un instrumento para mejorar las soluciones a los problemas de logística. La gran difusión y uso de los equipos móviles con GPS y servicios de Internet móvil permiten hoy por hoy pensar en aplicaciones de bajo costo capaces de presentar información real bajo demanda Con el diseño y desarrollo de ésta aplicación web se proporciona una herramienta prototipo capas de ayudar a automatizar la logística de los vehículos de los servicios ambulatorios con la finalidad que a un futuro próximo dichos servicios ambulatorios puedan mejorar a nivel local y/o nacional con estándares de tiempos de respuesta recomendados internacionalmente. Planteamiento del problema Actualmente las dificultades para encontrar direcciones viales en la ciudad de Quito requiere de un tiempo considerable, se vuelve crítico el ubicar direcciones para prestar servicios de salud ocasionando pérdidas de tiempo innecesarias que pueden afectar negativamente el estado de salud de un paciente. La inexperiencia de las rutas por parte del personal que participa en las operaciones de los servicios ambulatorios o falta de información en determinado lugar puede recaer en la demora y posibles problemas de salud de las personas afectadas durante una emergencia o atención de salud. Una mejora en cuanto al cálculo de las distancias necesarias, tiempos máximos y centros de atención más cercanos permitirían mejorar la atención a la ciudadanía. Usar sistemas de información geográfica ayudará a actuar con mayor eficiencia a los operadores de los centros de monitoreo u operaciones en las entidades que prestan servicios de salud ambulatoria. 3 Formulación del problema ¿Cuál es la ventaja de diseñar y desarrollar un sistema de información geográfico para el registro y monitoreo geográfico de la atenciones pre hospitalarias? Objetivos de la investigación Objetivo General Generar una herramienta web que permita el registro de datos y cálculo de las distancias con las rutas óptimas para mejorar los procesos operativos y disminuir los tiempos de respuesta de los servicios de atención pre hospitalarios a pacientes con problemas de salud dentro de las áreas pobladas urbanas del DMQ. Objetivos Específicos Investigar las principales herramientas para el desarrollo de sistemas de información geográfica Diseñar y desarrollar una aplicación web que permita el registro y categorización de las atenciones pre hospitalarias por parte de un centro de operaciones. Diseñar una aplicación prototipo para localizar las unidades móviles de salud a través de GPS. Optimizar la asignación de los recursos vehiculares en los servicios de atención pre hospitalaria. Optimizar el tiempo de traslado por parte de los vehículos de salud para realizar la atención pre hospitalaria. Desarrollar una aplicación para dispositivos móviles que permita el Registro de datos del paciente con el estado de salud durante la atención. Preparar información de vías disponibles en la zona urbana del DMQ de acuerdo a las necesidades de la herramienta WEB basadas en información cartográfica disponible y válida. Alcance Siendo la logística un tema muy importante para las diferentes instituciones que proveen servicios de SALUD ambulatoria: atención a emergencias y/o consultas 4 médicas, por lo tanto este tema de tesis se centra principalmente en la creación de una herramienta informática prototipo que permita la optimización de tiempos de respuesta de los servicios de emergencia dentro de los sectores poblados urbanos en el DMQ durante la aparición de una emergencia médica. Limitaciones Se puede determinar las siguientes limitaciones. Falta o reducida información oficial sobre la topología vial. Políticas gubernamentales cambiantes acerca de la información vial. Quito y su planificación de nomenclatura vial que presenta constantes cambios como los vistos en la última década. Falta de actualización en los datos de la topología vial por parte de una entidad oficial. Información cartográfica de vías del DMQ de libre acceso disponible en Internet con cierto retraso en las actualizaciones de la misma. CAPÍTULO 2 Servicios pre hospitalarios públicos en el DMQ a. Servicios pre hospitalarios La atención pre hospitalario se define como un servicio operacional y de coordinación para los problemas médicos urgentes y que comprende todos los servicios de salvamento, atención médica y transporte que se presta a enfermos o accidentados fuera del hospital y que constituye una prolongación del tratamiento de urgencias hospitalarias. La atención pre hospitalaria debe constituirse en un sistema integrado de servicios médicos de urgencias y no entenderse como un simple servicio de traslado de pacientes en ambulancias, atendidos con preparación mínima. (Rodríguez H, 2014) El objetivo fundamental es ubicar el paciente en el lugar más indicado para su patología y realizar durante el transporte una serie de actividades médicas de reanimación y/o soporte que requieren capacitación específica al respecto, con lo cual se logra una mejor condición de ingreso del paciente al hospital y por tanto mayor sobrevida frente a la causa del evento urgente. En síntesis la filosofía de la APH se resume en "llevar al paciente adecuado, al lugar adecuado, en el tiempo adecuado" (Rodríguez H, 2014). 5 La implementación de la APH exige motivación y participación activa de los médicos, cooperación entre las instituciones prestadoras de servicios y educación a la comunidad sobre las ventajas, objetivos, forma de utilización de los recursos disponibles, etc. En la atención pre hospitalaria APH el traslado puede provenir como resultado de un llamado de emergencia al número de discado rápido, al número de ambulancias de una entidad de salud, etc. y responder a situaciones de traslado individual o colectivo. En ambos casos es deseable que existan sistemas de regulación que permitan definir el tipo de ambulancias requerido y las características del traslado (Rodríguez H, 2014). Existen diferentes tipos de traslado ya sean primario y secundario, sus diferencias son evidentes, en el traslado primario el personal no posee la información suficiente con antelación de un evento para preparar todo lo requerido con tan solo recibir una llamada, mientras en el traslado secundario el personal cuenta con toda la información indispensable para preparar un traslado con todos los implementos requeridos. En eventos de desastres el transporte de heridos conlleva una etapa previa de clasificación o triaje, existen diferentes cartillas con clasificación de colores según la gravedad y/o tipo de atención requerida que deben ser conocidos y aplicados por el personal encargado del manejo de los centros de clasificación de heridos o CACH. Existen casos infortunadamente frecuentes, donde se desplaza un número importante de medios de transporte de heridos a zonas de desastre pero esto no siempre significa un traslado de los pacientes graves. Como se mencionó el traslado de pacientes se ha dividido en dos tipos: primario desde el lugar de ocurrencia del evento urgente hasta el centro de atención y secundaria entre el centro de atención hacia el domicilio del paciente. También es importante tener en cuenta la clasificación de las ambulancias terrestres según el tipo de servicio de traslado que brindan ya sea simple, urgencias básicas o urgencias avanzadas (Secretaria de Salud, Estados unidos mexicanos, 2004). b. Análisis de oferta de servicios públicos pre hospitalarios El 7 de septiembre de 1995 el Ecuador a través de acuerdo ministerial N.2309 fundamentado en la “Ley de derecho y amparo al paciente” crea el comité Interinstitucional de la Red de emergencias médicas (CIREM) conformadas por Cruz 6 Roja, Cuerpo de Bomberos y gestión de riesgos (Carrasco, Gonzáles, & Moreno, 2000). En el distrito metropolitano de Quito la coordinación de las ambulancias pertenecientes al CIREM eran por parte de la central de coordinación de emergencias 911 esta entidad de coordinación tenía financiamiento del sistema Trolebús y del Patronato Municipal San José (Lcda. Estrella Silva, 2005, pág. 42), para el año 2002 el CIREM deja de funcionar y la central de emergencias 911 asume la coordinación con las entidades del ex CIREM. En 2003 en el Distrito Metropolitano de Quito empieza a funcionar la Central Metropolitana de Atención Ciudadana - CMAC la cual integra a la central de emergencias médicas 911, bomberos, cruz roja, policía nacional y el sistema de cámaras de vigilancia “ojos de águila” (La Hora, s.f.). El 29 de diciembre de 2011 bajo decreto N.988, el Econ. Rafael Correa Delgado como presidente constitucional de la República del Ecuador implementa el Servicio Integrado de Seguridad ECU-911 como herramienta tecnológica integradora de los servicios de emergencia que conforman el Sistema Nacional de Salud (CELI-MERO, SALDAÑA-SÁNCHEZ, & RODRÍGUEZ-PEÑAFIEL, 2013). Según indicó Mónica Benítez, directora de la CMAC, en el año 2012 el Distrito Metropolitano de Quito contaba con 18 unidades para atender las necesidades de 2’239.199 de personas distribuidas de la siguiente manera (Extra, 2012): Institución Cuerpo de bomberos Cruz Roja Policía Nacional Número de ambulancias 13 3 2 Tabla 1 – Número de ambulancias en el DMQ en el año 2012 (Extra, 2012) La Organización Mundial de Salud OMS, establece que se debe tener una ambulancia por cada 25.000 a 50.000 habitantes, según este indicador el DMQ requiere por lo menos de 45 ambulancias, existiendo un déficit de 27 ambulancias. Para reducir el déficit de ambulancias en el país, el gobierno nacional adquirió en 2013 alrededor de 200 ambulancias nuevas, que fueron distribuidas a todas las provincias del país. El 25 de julio de ese año fueron entregadas para el Distrito 7 Metropolitano de Quito 14 ambulancias nuevas pertenecientes al Ministerio de Salud Pública, a pesar de esta adquisición el DMQ aún presenta un déficit de 13 ambulancias (Ministerio de salud pública, 2013). c. Estándares nacionales e internacionales para manejo de información para atención pre hospitalaria. En atención prehospitalaria existen varios métodos para clasificar a los pacientes, también denominado Triaje que no es más que la clasificación y selección de pacientes basado en las prioridades de atención, según la información provista por estos métodos de clasificación un paciente será o no trasladado a un centro de atención privilegiando las posibilidades de supervivencia (Carrasco, Gonzáles, & Moreno, 2000, pág. 172). Los sistemas de triaje más usados en el mundo son: Triaje START, Triaje de Manchester, Triaje de Andorra y sus variaciones que varían de país en país, en Ecuador la Cruz Roja Ecuatoriana al igual que la USAID (La Agencia de los Estados Unidos para el Desarrollo Internacional) (USAID, 2009) divide las emergencias en dos clases, la primera se denomina emergencias cotidianas en la cual el objetivo del triaje es trasladar heridos al centro de atención hospitalario más adecuado para solventar los problemas médicos, se basa principalmente en la urgencia y secundariamente en la posibilidad de supervivencia. No existen criterios perfectos para efectuar el triaje, el esquema de decisión de triaje publicado en el Comité de Trauma del American College of Surgeons realiza un sobretriaje en un 30% de pacientes (Carrasco, Gonzáles, & Moreno, 2000, pág. 172). 8 Ilustración 1.Esquema de decisión de triaje efectuado por el personal en la atención pre hospitalaria (Carrasco, Gonzáles, & Moreno, 2000, pág. 177). La segunda clase se denomina emergencias en situaciones de desastre, en esta clasificación se usa el triaje y el sistema de tarjeteo que permiten seleccionar a las víctimas y categorizarlas de acuerdo a las probabilidades de recuperación. Cuando el tiempo, el personal y los recursos humanos y materiales son insuficientes para afrontar las necesidades de una situación de desastre en que hay gran cantidad de víctimas, el triage es el único 9 método para proveer un máximo de beneficio a la mayoría de víctimas o heridos en masa. (Carrasco, Gonzáles, & Moreno, 2000, pág. 172). El sistema de triaje usado en situaciones de desastre difiere del criterio de triaje anteriormente expuesto en este documento, la Cruz Roja Ecuatoriana implementa el uso de triaje START (Simple Triage and Rapid Transport) el cual evalúa tres ítems: respiración, circulación y nivel de conciencia para determinar el transporte de un paciente, implementa un código de prioridades basado en los colores negro, rojo, amarillo y verde al igual que el sistema de tarjeteo. Ilustración 2.Triaje START usado por la Cruz Roja Ecuatoriana (e-mergencia.com, 2009) 10 Ilustración 3.Sistema de tarjetas usado por la Cruz Roja Ecuatoriana (Carrasco, Gonzáles, & Moreno, 2000, pág. 173). Prioridad 0 Muertos, moribundos o heridos tan graves que no existe probabilidad razonable de sobrevivencia. Prioridad I Pacientes que necesita atención médica inmediata. Ej.: (paro cardiorespiratorio) Prioridad II Pacientes que corren poco riesgo. Ej.: (Traumatismo craneal sin alteración de la conciencia) Prioridad III Pacientes con lesiones leves y no requieren de traslado hacia un centro médico, se realiza la atención de manera ambulatoria. Ej.: (Lesiones en tejido blando) Tabla 2 – Representación de colores según su prioridad (Carrasco, Gonzáles, & Moreno, 2000). Ilustración 4. Situaciones de emergencia y prioridad de atención prehospitalaria (Carrasco, Gonzáles, & Moreno, 2000, pág. 172). d. Análisis y definición conceptual 11 i. Diagramas de procesos Ilustración 5.Diagrama de procesos para la atención medica pre hospitalaria. 12 ii. Factibilidad técnica, económica y operacional Para determinar y verificar si el presente proyecto es viable, se ha realizado un estudio de la factibilidad técnica, económica y operacional. Factibilidad técnica Para determinar la factibilidad técnica se analizaron tres aspectos: Tecnología y Conocimientos técnicos. Tecnología Para el desarrollo de la siguiente solución informática se requiere software y hardware con las siguientes características: Software Sistema operativo, base de datos, servidor de mapas, servidor de aplicaciones, navegador web, navegador web móvil. Software Alternativa Sistema operativo Linux Disponibilidad Centos, cualquier Ubuntu distribución o Software Open Source. de Linux Windows 7 o Windows server Software Comercial. 2008 sp2 Base de datos Servidor de mapas Navegador Web PostgreSQL - PostGIS Software Open Source. MySQL Spatial Software Open Source. Oracle Spatial Software Comercial. MS SQL Server Spatial Software Comercial. GeoServer Software Open Source. MapServer Software Open Source. ArcGis Server Software Comercial. Navegador web con soporte Software Freeware. HTML5 geolocation API (Can I Use, 2015). Navegador web móvil Navegador móvil con soporte Software Freeware. HTML5 geolocation API (Can I Use, 2015). Tabla 3 –Alternativas de software requerido. 13 Hardware Para la implementación del sistema se requiere dos computadores y/o servidores con mínimo 1.5 gb de RAM para el sistema operativo y 1gb para levantar el servidor de base de datos y el servidor de aplicación web, disco duro con espacio disponible de 200gb como mínimo, procesador dual core o superior y periféricos de entrada y salida estándares. Conocimientos técnicos. Los conocimientos técnicos del uso de las alternativas de software requerido para el desarrollo e implementación se encuentran cubiertos por parte del personal de desarrollo por su experiencia y vinculación con proyectos de geo informática. Factibilidad Operativa Dado que el sistema se basa en estándares web HTML5 su operación es muy sencilla, donde la curva de aprendizaje del funcionamiento del mismo es corta e intuitiva para cualquier usuario. El personal que haga uso del sistema no requerirá una capacitación específica para hacer uso del sistema. Factibilidad Económica Se requieren: Recurso Cantidad Costo Total 1 $600 $600 1 $1000 $4000 2 $150 $300 Computador Core i5, 4gb de RAM y 1Tb de disco Desarrollador (periodo de 4 meses) Tablet con 14 navegador web que soporte HTML5 TOTAL $4900 Tabla 4 –Recursos necesarios para desarrollo del sistema. Dados que los altos costos de licenciamiento en herramientas propietarias como ArcGis Server1 y Oracle Spatial2, se ha determinado el uso de programas Open Source para reducir los costes en el licenciamiento del software y también para alinearse con el decreto N° 1014 emitido el 10 de Abril de 2008 (Secretaría Nacional de Administración Pública, 2008), el cual fomenta el uso de software libre en las instituciones públicas del estado. Se concluye con este análisis que el sistema es factible y viable en su desarrollo e implementación. iii. Beneficios tangibles e intangibles del sistema Beneficios tangibles Los beneficios tangibles del presente sistema son: Reducción del ausentismo de ambulancias. Reducción en los tiempos de atención ambulatoria prehospitalaria. Posibilidad de ser adaptado a diversas ciudades del país. Beneficios intangibles Los beneficios intangibles del presente sistema son: Mejorar la satisfacción del cliente (paciente) al reducir los tiempos de respuesta ante una emergencia. Mejorar la percepción de atención ambulatoria pre hospitalaria en la población. Mejorar en la toma de decisiones, como planificación de reestructuración o incremente de las unidades ambulatorias en el DMQ. 1 2 Costo licencias ArcGis (Estado de Nueva York, 2014). Costo licencias Oracle y Oracle Spatial (Oracle, 2015). 15 e. Experiencias de otras ciudades metropolitanas referente a servicios de salud ambulatorios Las principales metrópolis del país como Guayaquil y Cuenca presentan los mismos problemas anteriormente señalados en este documento, ciudades metropolitanas de los países vecinos de la región como Bogotá también cuentan con un problema similar de movilización y transporte, no se ha encontrado sistemas similares para cálculos de rutas óptimas para mejorar los tiempos de respuesta de los servicios de atención prehospitalaria, lo cual indica que este tipo de proyectos tendrán un efecto positivo en la población de las metrópolis que decidan implementar este tipo de sistemas. CAPÍTULO 3 GIS y Dispositivos móviles. a. Sistemas de información geográfica (GIS). Los sistemas de información geográfica SIG o por sus siglas en ingles GIS, es un conjunto de herramientas informáticas que permiten agregar, manipular, almacenar, procesar y presentar datos del mundo real representado en coordenadas espaciales “x” y “y”, la NASA define a los GIS como un sistema integrado de quipos de computo, software y personal calificado enlazando recursos topográficos, demográficos, servicios públicos, instalaciones, imágenes y otros que son geográficamente referenciados (“GIS is an integrated system of computer hardware, software, and trained personnel linking topographic, demographic, utility, facility, image and other resource data that is geographically referenced.” (Gopi, 2008, pág. 7).). A través de la historia el hombre ha requerido asociar información de lugares geográficos3 y eventos del mundo real, por ejemplo las pinturas rupestres usadas por los hombres de Cromañón los cuales asociaban animales que cazaban con trazos lineales relacionados a las rutas de migración de dichas especies animales. El primer intento de asociar fenómenos del mundo real y la información cartográfica fue a mediados del siglo XIX durante un ataque de cólera en SOHO, LONDRES donde el Dr. John Snow cartografió los pozos de agua y los decesos por cólera para determinar la fuente de la infección. (Cerda Lorca & Valdivia C., 2007) 3 Historia de los sistemas de información geográfica (Youtube, 2011) 16 Ilustración 6.Mapa de pozos y decesos por cólera. (Wikipedia, 2005) La evolución de la cartografía a los SIG se dio durante los años 60 unos pocos años después del lanzamiento de los primeros satélites a la órbita terrestre, los cuales fotografiaron al planeta y encontraron las medidas exactas de la tierra, donde un mainframe integraba información cartográfica en capas sobre la cultura, demografía, el medio ambiente de una determinada localidad (PennState University, s.f.). A finales de los años 80’s se crea TIGER (Referenciación y codificación geográfica integradas topológicamente) siendo la base para los SIG de dominio público como Map Quest, Yahoo Maps y Google maps que fueron desarrollados en la década de los 90’s hasta la actualidad, integrando la cartografía con información de ubicación de lugares, sitios de interés, sitios socialmente aceptados y transportándolos de un computador personal a un dispositivo móvil a principios del siglo XXI gracias a la incorporación de los GPS en los nuevos smartphones de consumo masivo (PennState University, s.f.). 17 Los mapas en internet solían ser muy complejos, requerían de software especializado y un fuerte conocimiento sobre los procesos y tipos de datos usados para la creación de mapas y/o productos cartográficos, hoy en día se usan los servidores de mapas que son piezas de una arquitectura tecnológica proveniente de diferentes fuentes de datos, esta arquitectura está construida sobre componentes tecnológicos categorizados que hacen a un mapa funcionar. i. Arquitectura de los servidores de mapas Se entiende un mapa como la unión de un número de capas, topografías, transportación, hidrología, cobertura terrestre y construcciones humanas entre otras, donde cada capa representa una porción de información del mundo real interpretadas por algoritmos para la visualización por parte de un servidor de mapas. Ilustración 7.Representacion de un mapa geográfico conformado por diversas capas. Un servidor de mapas gestiona y provee información, a través de la internet, proveniente de datos satelitales como imágenes raster, imágenes vectoriales, puntos y trazas GPS procesadas por un motor de base de datos geográfica permitiendo la generación de mapas de una manera sencilla y fácil; gracias a la gran difusión de la internet que ha permitido facilitar la publicación y obtención de información cartográfica en tiempo real de una manera eficaz a un bajo coste. 18 Ilustración 8.Diagrama de un servidor de mapas en internet (IMS). Un servidor de mapas interviene en el proceso de mapeo web o web mapping que es el proceso de diseño, aplicación, generación y visualización u ofrecer datos geoespaciales a través de la World Wide Web (Wikipedia, 2015), esta tecnología intenta suministrar datos geográficos en un formato estándar GML para obtener una máxima interoperabilidad aprovechando la arquitectura cliente-servidor entre el servidor IMS y una gran variedad de dispositivos clientes (navegadores web con JavaScript, applets, aplicaciones para móviles, etc.) que interactúan a través de 19 consultas y/o peticiones desde el servidor de mapas a una geodatabase o archivo de datos geográficos retornando un objeto geográfico. La clave principal de esta arquitectura es separar los mapas en capas funcionales: Motor de base de datos (Geodatabase): Los datos geográficos por si solos son útiles pero se requiere un motor de base de datos para administrarlos en un almacén de datos consistente para la lectura y/o escritura para mantener la integridad de los mismos, es aquí donde intervienen las bases de datos relacionales como PostgreSQL y su extensión geográfica PostGIS, Oracle Spatial, MySQL Spatial, MS SQL Server Spatial, Spatialite entre las más populares en el mercado. Servidor de mapas (Servidor de aplicación): La información contenida en la geodatabase es accedida por el servidor de mapas a través de conexiones ODBC/JDBC, esta información es procesada e interpretada para generar servicios de mapas cartográficos que luego serán consultados por el cliente. Servicios de mapas: Los servicios de mapas son estándares de representación geográfica en formato de imagen digital que ofrecen las siguientes operaciones: o Devolver metadatos del nivel de servicio o Devolver un mapa con parámetros geográficos y dimensionales bien definidos. o Devolver información de características particulares mostradas en el mapa (Wikipedia, 2015). Cliente (interfaz web, móvil): un cliente de mapas es un componente que interpreta las características espaciales y capas de mapas. ii. Entradas y salidas de datos soportados Existe una diversidad de servidores de mapas por internet o IMS, que proveen tanto información vectorial como raster, estos servidores se basan en los estándares de referencia de la OGC (Open Geospatial Consortium) cuyo fin es la creación de estándares abiertos con capacidad de interoperabilidad dentro de los sistemas de información geográfica y la Word Wide Web. Los formatos de entrada u orígenes de datos geoespaciales se dividen en: 20 Vector (Imágenes vectoriales).- es una definición atributos matemáticos de segmentos, formas, líneas, polígonos y su ubicación geo referenciada. Archivos shape.- formato de representación de datos espaciales creado por la empresa ESRI, se ha convertido en el estándar de facto para el intercambio de información geográfica. Es un formato vectorial que guarda objetos geográficos, pero carece de capacidad de almacenamiento de información topológica. Información topológica que es usada en las redes de nodos como las redes viales. WFS externo.- Capacidad de cargar datos de un Web Feature Server remoto (WFS) y luego ser utilizados como servicios WMS, KML, GML, etc. Bases de datos espaciales.- PostGIS, ArcSDE, DB2, Oracle Spatial, MySQL, SQL Server son bases de datos con capacidades espaciales que permiten la representación vectorial de los objetos espaciales almacenados en forma de tablas, a estas bases de datos también se las conoce como geodatabase. Raster (Imágenes renderizadas), es un modelo de datos espaciales que no es más que una matriz con celdas de igual tamaño compuestos por uno o varias bandas RGB y un atributo de representación geográfica (ESRI, 2015). Geo TIFF, JPG y PNG geo referenciados, formatos GDAL, imágenes MOSAIC, imágenes pyramid, Oracle GeoRaster. A continuación se detallan las especificaciones más importantes sugeridas por la OGC (formatos de salida) GML.- Lenguaje de marcado geográfico, que es un sublenguaje XML para el modelaje, transporte y almacenamiento de la información geográfica. Se considera como una definición de entendimiento común de los datos entre los diferentes sistemas de software que hacen uso de este tipo de datos (Wikipedia, 2013). 21 <wfs:FeatureCollection xmlns="http://www.opengis.net/wfs" xmlns:wfs="http://www.opengis.net/wfs" xmlns:mseg="com.exco" xmlns:gml="http://www.opengis.net/gml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="com.exco http://186.101.170.100:8895/geoserver/mseg/wfs?service=WFS&version=1.0.0& request=DescribeFeatureType&typeName=mseg%3Ahoteleria http://www.opengis.net/wfs http://186.101.170.100:8895/geoserver/schemas/wfs/1.0.0/WFS-basic.xsd"> <gml:boundedBy> <gml:null>unknown</gml:null> </gml:boundedBy> <gml:featureMember> <mseg:hoteleria fid="hoteleria.1"> <mseg:orden>1</mseg:orden> <mseg:nombre>CASA SIMPSON</mseg:nombre> <mseg:num_camas>37</mseg:num_camas> <mseg:x>695546.388599999950000</mseg:x> <mseg:y>9621588.339999999900000</mseg:y> <mseg:zona>Z07</mseg:zona> <mseg:provincia>19</mseg:provincia> <mseg:canton>1908</mseg:canton> <mseg:parroquia>190850</mseg:parroquia> <mseg:telefono>3041777</mseg:telefono> <mseg:e_mail>[email protected]</mseg:e_mail> <mseg:repres_leg>SOLIS RAMÍREZ ENRIQUE LUIS</mseg:repres_leg> <mseg:celular>993823347</mseg:celular> <mseg:geom> <gml:Point srsName="http://www.opengis.net/gml/srs/epsg.xml#32717"> <gml:coordinates xmlns:gml="http://www.opengis.net/gml" decimal="." cs="," ts=" ">695546.3886,9621588.34</gml:coordinates> </gml:Point> 22 </mseg:geom> </mseg:hoteleria> </gml:featureMember> </wfs:FeatureCollection> Ilustración 9.representación geográfica con GML. KML.- Keyhole Markup Language basado en XML, desarrollado por Keyhole LT, adquirida por Google Earth en 2004, puede ser distribuido en un formato comprimido o KMZ. Este tipo de fichero consta de una estructura simple con un título, una descripción básica y sus respectivas coordenadas que especifican una característica para Google Earth como imágenes, lugares o polígonos (Wikipedia, 2014). <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <kml xmlns="http://www.opengis.net/kml/2.2" xmlns:ns2="http://www.google.com/kml/ext/2.2" xmlns:ns3="http://www.w3.org/2005/Atom" xmlns:ns4="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0"> <Document> <LookAt> <longitude>-83.59115418048592</longitude> <latitude>-1.6708906958243261</latitude> <altitude>2488104.64468543</altitude> <heading>0.0</heading> <tilt>0.0</tilt> <range>2010519.0581503562</range> <altitudeMode>clampToGround</altitudeMode> </LookAt> <NetworkLink> <name>ahiss:provincias</name> <visibility>1</visibility> <open>1</open> <LookAt> <longitude>-83.59115418048592</longitude> 23 <latitude>-1.6708906958243261</latitude> <altitude>2488104.64468543</altitude> <heading>0.0</heading> <tilt>0.0</tilt> <range>2010519.0581503562</range> <altitudeMode>clampToGround</altitudeMode> </LookAt> <Url> <href>http://186.101.170.100:8895/geoserver/ahiss/wms?service=wms&requ est=GetMap&version=1.1.1&format=application/vnd.googleearth.kml+xml&layers=ahiss:provincias&styles=provincias&heig ht=330&width=827&transparent=false&srs=EPSG:4326</href> <refreshInterval>0.0</refreshInterval> <viewRefreshMode>onStop</viewRefreshMode> <viewRefreshTime>1.0</viewRefreshTime> <viewBoundScale>1.0</viewBoundScale> </Url> </NetworkLink> </Document> </kml> Ilustración 10.representación geográfica con KML. WMS.- Servicio de mapas en la web o Web Map Service, es un estándar de la OGC probablemente el más utilizado, produce mapas en formato de imagen renderizada bajo demanda para ser visualizados por un cliente ya sea web o de escritorio, la apariencia puede ser modificada utilizando el descriptor de capas estilizado o SLD. Ilustración 11.representación geográfica con WMS. WFS.- Servicio de entidades vectoriales o Web Feature Service, proporciona una interfaz de comunicación que permite interactuar con los mapas servidos por el WMS, permitiendo realizar consultas y recuperación de elementos geográficos. 24 WFS-T.- Es la implementación transaccional del servicio WFS para permitir la creación, eliminación y actualización de los elementos geográficos en el mapa. iii. Tipos de servicios: WMS, WFS Web Map Service (WMS) Web Map Service (WMS) es uno de los estándares desarrollados por la OGC, este estándar proporciona un interface HTTP para la petición de imágenes de mapas registrados en una geodatabase. La respuesta a la petición es una o más imágenes de mapas (devueltas como JPEG, PNG, etc.) que se pueden visualizar en buscadores y aplicaciones de escritorio, adicionalmente la interfaz WMS también permiten especificar si una imagen enviada sea transparente y pueda ser combinada con imágenes de otros servidores (OCG, 2012). Ilustración 12.representación funcionamiento de los servicios WMS (Osegeo Live, 2014). El estándar WMS define tres operaciones, estas especificaciones determinan la implementación y uso de operaciones WMS en el protocolo HTTP. 25 GetCapabilities (requerido): Obtiene los metadatos del servicio, que constituyen una descripción interpretable automáticamente (y también legible para humano) de información del contenido de los WMS’s y los parámetros de petición aceptados por el servicio (OSGeoLive, 2014). http://190.11.24.213:8080/geoserver/wms?request=getCapabilities <WMS_Capabilities xmlns="http://www.opengis.net/wms" xmlns:xlink="http://www.w3.org/1 999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.3.0" updat eSequence="380" xsi:schemaLocation="http://www.opengis.net/wms http://190.11.24.213:8080 /geoserver/schemas/wms/1.3.0/capabilities_1_3_0.xsd"> <Service> <Name>WMS</Name> <Title>GeoServer Web Map Service</Title> <Abstract> A compliant implementation of WMS plus most of the SLD extension (dynamic stylin g). Can also generate PDF, SVG, KML, GeoRSS </Abstract> <KeywordList> <Keyword>WFS</Keyword> <Keyword>WMS</Keyword> <Keyword>GEOSERVER</Keyword> </KeywordList> <OnlineResource xlink:type="simple" xlink:href="http://geoserver.sourceforge.net/ht ml/index.php"/> <ContactInformation> </ContactInformation> <Fees>NONE</Fees> <AccessConstraints>NONE</AccessConstraints> </Service> <Capability> <Request> <GetCapabilities> <Format>text/xml</Format> <DCPType> <HTTP> <Get> <OnlineResource xlink:type="simple" xlink:href="http://190. 11.24.213:8080/geoserver/ows?SERVICE=WMS&"/> </Get> <Post> <OnlineResource xlink:type="simple" xlink:href="http://190. 11.24.213:8080/geoserver/ows?SERVICE=WMS&"/> </Post> </HTTP> </DCPType> </GetCapabilities> <GetMap> <Format>image/png</Format> <Format>application/atom+xml</Format> <Format>application/pdf</Format> <Format>application/vnd.google-earth.kml+xml</Format> <Format> application/vnd.google-earth.kml+xml;mode=networklink </Format> <Format>application/vnd.google-earth.kmz</Format> <Format>image/gif</Format> <Format>image/jpeg</Format> <Format>image/svg+xml</Format> 26 <Format>image/tiff</Format> <DCPType> <HTTP> <Get> <OnlineResource xlink:type="simple" xlink:href="ht tp://190.11.24.213:8080/geoserver/ows?SERVICE=WMS&"/> </Get> </HTTP> </DCPType> </GetMap> <GetFeatureInfo> <Format>text/plain</Format> <Format>application/vnd.ogc.gml</Format> <Format>application/vnd.ogc.gml/3.1.1</Format> <Format>text/html</Format> <DCPType> <HTTP> <Get> <OnlineResource xlink:type="simple" xlink:href="http://190. 11.24.213:8080/geoserver/ows?SERVICE=WMS&"/> </Get> </HTTP> </DCPType> </GetFeatureInfo> </Request> <Exception> <Format>XML</Format> <Format>INIMAGE</Format> <Format>BLANK</Format> </Exception> <Layer> <Title>GeoServer Web Map Service</Title> <Abstract> A compliant implementation of WMS plus most of the SLD extension (dynamic stylin g). Can also generate PDF, SVG, KML, GeoRSS </Abstract> <CRS>EPSG:4326</CRS> <CRS>EPSG:32717</CRS> <CRS>CRS:84</CRS> <EX_GeographicBoundingBox> <westBoundLongitude>-81.40093999999999</westBoundLongitude> <eastBoundLongitude>-74.77706</eastBoundLongitude> <southBoundLatitude>-90.0</southBoundLatitude> <northBoundLatitude>1.54094</northBoundLatitude> </EX_GeographicBoundingBox> <Layer queryable="1"> <Name>amb:administraciones_zonales</Name> <Title>Administraciones zonales</Title> <Abstract>Administraciones zonales</Abstract> <KeywordList/> <CRS>EPSG:32717</CRS> <CRS>CRS:84</CRS> <EX_GeographicBoundingBox> <westBoundLongitude>-78.99960940000001</westBoundLongitude> <eastBoundLongitude>-78.11839059999998</eastBoundLongitude> <southBoundLatitude>-0.608109400000007</southBoundLatitude> <northBoundLatitude>0.273109400000007</northBoundLatitude> </EX_GeographicBoundingBox> <BoundingBox CRS="EPSG:32717" minx="728348.017" miny="9934644.321 " maxx="815024.891" maxy="1.0028272023E7"/> 27 <Style> <Name>polygon</Name> <Title>Default Polygon</Title> <Abstract>A sample style that draws a polygon</Abstract> <LegendURL width="20" height="20"> <Format>image/png</Format> <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlin k" xlink:type="simple" xlink:href="http://190.11.24.213:8080/geoserver/ows?service=WMS& request=GetLegendGraphic&format=image%2Fpng&width=20&height=20&layer=administ raciones_zonales"/> </LegendURL> </Style> </Layer> <Layer queryable="1"> <Name>biomasa2</Name> <Title>biomasa2</Title> <Abstract>Layer-Group type layer: biomasa2</Abstract> <CRS>EPSG:32717</CRS> <EX_GeographicBoundingBox> <westBoundLongitude>-78.9481082627106</westBoundLongitude> <eastBoundLongitude>-78.16985061390422</eastBoundLongitude> <southBoundLatitude>-0.5913444864054345</southBoundLatitude> <northBoundLatitude>0.2561492398119479</northBoundLatitude> </EX_GeographicBoundingBox> <BoundingBox CRS="EPSG:32717" minx="728373.303" miny="9934596.423 " maxx="815037.1" maxy="1.0028330477E7"/> </Layer> </Layer> </Capability> </WMS_Capabilities> Tabla 5 – Ejemplo de petición getCapabilities GetMap (requerido): Obtiene una imagen de mapa con unos parámetros geoespaciales y de dimensión bien definidos. http://186.101.170.100:8895/geoserver/ahiss/wms?service=WMS&version=1.1.0&re quest=GetMap&layers=ahiss:provincias&styles=&bbox=-92.04525439596057,5.019145015049528,75.16591206239954,1.7135316572164065&width=827&height=330&srs=EPSG:43 26&format=application/openlayers 28 Tabla 6 – Ejemplo de petición getMap GetFeatureInfo (optional): Pregunta por información sobre una entidad (feature) en particular, de las mostradas en el mapa. http://186.101.170.100:8895/geoserver/ahiss/wms?REQUEST=GetFeatureInfo&EX CEPTIONS=application%2Fvnd.ogc.se_xml&BBOX=-97.23763%2C7.092438%2C69.973536%2C3.786825&SERVICE=WMS&INFO_FORMAT=text%2Fhtml&QU ERY_LAYERS=ahiss%3Aprovincias&FEATURE_COUNT=50&Layers=ahiss%3A provincias&WIDTH=827&HEIGHT=330&format=image%2Fpng&styles=&srs=EP SG%3A4326&version=1.1.1&x=625&y=171 Tabla 7 – Ejemplo de petición getFeatureInfo El estándar actualmente se encuentra implementado en cientos de productos, muchos de los cuales se registran en la OCG4. Web Feature Service (WFS) 4 OGC listado de aplicaciones con implementación WMS (OGC, s.f.) 29 Web Feature Service (WFS) estándar desarrollado por la OGC define operaciones Web de interface para la consulta y edición de entidades geográficas (en inglés features) vectoriales, como por ejemplo carreteras o líneas de contorno de lagos o ríos (OGC, Open Geo Spatial , s.f.). Ilustración 13.representación funcionamiento de los servicios WFS (OSGeo Live, 2014). El estándar WFS define once operaciones estándar, cinco soportadas por todas las versiones y seis operaciones solo disponibles en la versión 2.0.0: Disponible por todas las versiones del protocolo WFS: GetCapabilities (operación de descubrimiento) Obtiene los metadatos del servicio, que constituyen una descripción interpretable automáticamente (y también legible para humano) de información del contenido de los WFS’s y los parámetros de petición aceptados por el servicio. http://186.101.170.100:8895/geoserver/wfs?request=getCapabilities <wfs:WFS_Capabilities xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" x mlns="http://www.opengis.net/wfs/2.0" xmlns:wfs="http://www.opengis.net/wfs/2.0" xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:gml="http://www.opengis.net/g ml/3.2" xmlns:fes="http://www.opengis.net/fes/2.0" xmlns:xlink="http://www.w3.org/ 1999/xlink" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:it.geosolutions= "http://www.geo-solutions.it" xmlns:tiger="http://www.census.gov" xmlns:topp="http ://www.openplans.org/topp" 30 xmlns:sf="http://www.openplans.org/spearfish" xmlns:ahiss="ahiss" xmlns:bnf="bnf" xmlns:cite="http://www.opengeospatial.net/cite " xmlns:optisesa="ec.edu.uce.optisesa" xmlns:sde="http://geoserver.sf.net" xmlns:mse g="com.exco" xmlns:sni="ec.gob.senplades" xmlns:nurc="http://www.nurc.nato.int" version="2.0.0" xsi:schemaLocation="http://www.opengis.net/wfs/2.0 http://186.101.1 70.100:8895/geoserver/schemas/wfs/2.0/wfs.xsd" updateSequence="917"> <ows:ServiceIdentification> <ows:Title>GeoServer Web Feature Service</ows:Title> <ows:Abstract> This is the reference implementation of WFS 1.0.0 and WFS 1.1.0, s upports all WFS operations including Transaction. </ows:Abstract> <ows:Keywords> <ows:Keyword>WFS</ows:Keyword> <ows:Keyword>WMS</ows:Keyword> <ows:Keyword>GEOSERVER</ows:Keyword> </ows:Keywords> <ows:ServiceType>WFS</ows:ServiceType> <ows:ServiceTypeVersion>2.0.0</ows:ServiceTypeVersion> <ows:Fees>NONE</ows:Fees> <ows:AccessConstraints>NONE</ows:AccessConstraints> </ows:ServiceIdentification> <ows:ServiceProvider> <ows:ProviderName>The ancient geographes INC</ows:ProviderNam e> <ows:ServiceContact> <ows:IndividualName>Claudius Ptolomaeus</ows:Individual Name> <ows:PositionName>Chief geographer</ows:PositionName> <ows:ContactInfo> <ows:Phone> <ows:Voice/> <ows:Facsimile/> </ows:Phone> <ows:Address> <ows:City>Alexandria</ows:City> <ows:AdministrativeArea/> <ows:PostalCode/> <ows:Country>Egypt</ows:Country> </ows:Address> </ows:ContactInfo> </ows:ServiceContact> </ows:ServiceProvider> <ows:OperationsMetadata> <ows:Operation name="GetCapabilities"> <ows:DCP> <ows:HTTP> <ows:Get xlink:href="http://186.101.170.100 :8895/geoserver/wfs"/> <ows:Post xlink:href="http://186.101.170.10 0:8895/geoserver/wfs"/> </ows:HTTP> </ows:DCP> <ows:Parameter name="AcceptVersions"> <ows:AllowedValues> <ows:Value>1.0.0</ows:Value> <ows:Value>1.1.0</ows:Value> <ows:Value>2.0.0</ows:Value> </ows:AllowedValues> </ows:Parameter> 31 <ows:Parameter name="AcceptFormats"> <ows:AllowedValues> <ows:Value>text/xml</ows:Value> </ows:AllowedValues> </ows:Parameter> </ows:Operation> <ows:Operation name="DescribeFeatureType"> <ows:DCP> <ows:HTTP> <ows:Get xlink:href="http://186.101.170.100 :8895/geoserver/wfs"/> <ows:Post xlink:href="http://186.101.170.10 0:8895/geoserver/wfs"/> </ows:HTTP> </ows:DCP> <ows:Parameter name="outputFormat"> <ows:AllowedValues> <ows:Value>text/xml; subtype=gml/3.2</ow s:Value> </ows:AllowedValues> </ows:Parameter> </ows:Operation> <ows:Operation name="GetFeature"> <ows:DCP> <ows:HTTP> <ows:Get xlink:href="http://186.101.170.100:8895/ge oserver/wfs"/> <ows:Post xlink:href="http://186.101.170.100:8895/g eoserver/wfs"/> </ows:HTTP> </ows:DCP> <ows:Parameter name="resultType"> <ows:AllowedValues> <ows:Value>results</ows:Value> <ows:Value>hits</ows:Value> </ows:AllowedValues> </ows:Parameter> <ows:Parameter name="outputFormat"> <ows:AllowedValues> <ows:Value>text/xml; subtype=gml/3.2</ows:Value > <ows:Value>GML2</ows:Value> <ows:Value>KML</ows:Value> <ows:Value>SHAPE-ZIP</ows:Value> <ows:Value>application/gml+xml; version=3.2</ow s:Value> <ows:Value>application/json</ows:Value> <ows:Value>application/vnd.google-earth.kml xml< /ows:Value> <ows:Value>application/vnd.google-earth.kml+xml </ows:Value> <ows:Value>csv</ows:Value> <ows:Value>gml3</ows:Value> <ows:Value>gml32</ows:Value> <ows:Value>json</ows:Value> <ows:Value>text/xml; subtype=gml/2.1.2</ows:Value> <ows:Value>text/xml; subtype=gml/3.1.1</ows:Valu e> </ows:AllowedValues> 32 </ows:Parameter> <ows:Constraint name="PagingIsTransactionSafe"> <ows:NoValues/> <ows:DefaultValue>FALSE</ows:DefaultValue> </ows:Constraint> <ows:Constraint name="CountDefault"> <ows:NoValues/> <ows:DefaultValue>1000000</ows:DefaultValue> </ows:Constraint> </ows:Operation> <ows:Operation name="GetPropertyValue"> <ows:DCP> <ows:HTTP> <ows:Get xlink:href="http://186.101.170.100 :8895/geoserver/wfs"/> <ows:Post xlink:href="http://186.101.170.10 0:8895/geoserver/wfs"/> </ows:HTTP> </ows:DCP> <ows:Parameter name="resolve"> <ows:AllowedValues> <ows:Value>none</ows:Value> </ows:AllowedValues> </ows:Parameter> </ows:Operation> <ows:Operation name="ListStoredQueries"> <ows:DCP> <ows:HTTP> <ows:Get xlink:href="http://186.101.170.100 :8895/geoserver/wfs"/> <ows:Post xlink:href="http://186.101.170.10 0:8895/geoserver/wfs"/> </ows:HTTP> </ows:DCP> </ows:Operation> <ows:Operation name="DescribeStoredQueries"> <ows:DCP> <ows:HTTP> <ows:Get xlink:href="http://186.101.170.100 :8895/geoserver/wfs"/> <ows:Post xlink:href="http://186.101.170.10 0:8895/geoserver/wfs"/> </ows:HTTP> </ows:DCP> </ows:Operation> <ows:Operation name="CreateStoredQuery"> <ows:DCP> <ows:HTTP> <ows:Post xlink:href="http://186.101.170.10 0:8895/geoserver/wfs"/> </ows:HTTP> </ows:DCP> </ows:Operation> <ows:Operation name="DropStoredQuery"> <ows:DCP> <ows:HTTP> <ows:Get xlink:href="http://186.101.170.100:8895/geoserver/wfs"/> <ows:Post xlink:href="http://186.101.170.10 0:8895/geoserver/wfs"/> 33 </ows:HTTP> </ows:DCP> </ows:Operation> <ows:Operation name="LockFeature"> <ows:DCP> <ows:HTTP> <ows:Get xlink:href="http://186.101.170.100 :8895/geoserver/wfs"/> <ows:Post xlink:href="http://186.101.170.10 0:8895/geoserver/wfs"/> </ows:HTTP> </ows:DCP> <ows:Parameter name="releaseAction"> <ows:AllowedValues> <ows:Value>ALL</ows:Value> <ows:Value>SOME</ows:Value> </ows:AllowedValues> </ows:Parameter> </ows:Operation> <ows:Operation name="GetFeatureWithLock"> <ows:DCP> <ows:HTTP> <ows:Get xlink:href="http://186.101.170.100 :8895/geoserver/wfs"/> <ows:Post xlink:href="http://186.101.170.10 0:8895/geoserver/wfs"/> </ows:HTTP> </ows:DCP> <ows:Parameter name="resultType"> <ows:AllowedValues> <ows:Value>results</ows:Value> <ows:Value>hits</ows:Value> </ows:AllowedValues> </ows:Parameter> <ows:Parameter name="outputFormat"> <ows:AllowedValues> <ows:Value>text/xml; subtype=gml/3.2</ow s:Value> <ows:Value>GML2</ows:Value> <ows:Value>KML</ows:Value> <ows:Value>SHAPE-ZIP</ows:Value> <ows:Value>application/gml+xml; version= 3.2</ows:Value> <ows:Value>application/json</ows:Value> <ows:Value>application/vnd.google-earth.k ml xml</ows:Value> <ows:Value>application/vnd.google-earth.k ml+xml</ows:Value> <ows:Value>csv</ows:Value> <ows:Value>gml3</ows:Value> <ows:Value>gml32</ows:Value> <ows:Value>json</ows:Value> <ows:Value>text/xml; subtype=gml/2.1.2</o ws:Value> <ows:Value>text/xml; subtype=gml/3.1.1</o ws:Value> </ows:AllowedValues> </ows:Parameter> <ows:Constraint name="PagingIsTransactionSafe"> <ows:NoValues/> 34 <ows:DefaultValue>FALSE</ows:DefaultValue> </ows:Constraint> <ows:Constraint name="CountDefault"> <ows:NoValues/> <ows:DefaultValue>1000000</ows:DefaultValue> </ows:Constraint> </ows:Operation> <ows:Operation name="Transaction"> <ows:DCP> <ows:HTTP> <ows:Get xlink:href="http://186.101.170.100 :8895/geoserver/wfs"/> <ows:Post xlink:href="http://186.101.170.10 0:8895/geoserver/wfs"/> </ows:HTTP> </ows:DCP> <ows:Parameter name="inputFormat"> <ows:AllowedValues> <ows:Value>text/xml; subtype=gml/3.2</ow s:Value> </ows:AllowedValues> </ows:Parameter> <ows:Parameter name="releaseAction"> <ows:AllowedValues> <ows:Value>ALL</ows:Value> <ows:Value>SOME</ows:Value> </ows:AllowedValues> </ows:Parameter> </ows:Operation> <ows:Constraint name="ImplementsBasicWFS"> <ows:NoValues/> <ows:DefaultValue>TRUE</ows:DefaultValue> </ows:Constraint> <ows:Constraint name="ImplementsTransactionalWFS"> <ows:NoValues/> <ows:DefaultValue>TRUE</ows:DefaultValue> </ows:Constraint> <ows:Constraint name="ImplementsLockingWFS"> <ows:NoValues/> <ows:DefaultValue>TRUE</ows:DefaultValue> </ows:Constraint> <ows:Constraint name="KVPEncoding"> <ows:NoValues/> <ows:DefaultValue>TRUE</ows:DefaultValue> </ows:Constraint> <ows:Constraint name="XMLEncoding"> <ows:NoValues/> <ows:DefaultValue>TRUE</ows:DefaultValue> </ows:Constraint> <ows:Constraint name="SOAPEncoding"> <ows:NoValues/> <ows:DefaultValue>TRUE</ows:DefaultValue> </ows:Constraint> <ows:Constraint name="ImplementsInheritance"> <ows:NoValues/> <ows:DefaultValue>FALSE</ows:DefaultValue> </ows:Constraint> <ows:Constraint name="ImplementsRemoteResolve"> <ows:NoValues/> <ows:DefaultValue>FALSE</ows:DefaultValue> 35 </ows:Constraint> <ows:Constraint name="ImplementsResultPaging"> <ows:NoValues/> <ows:DefaultValue>TRUE</ows:DefaultValue> </ows:Constraint> <ows:Constraint name="ImplementsStandardJoins"> <ows:NoValues/> <ows:DefaultValue>TRUE</ows:DefaultValue> </ows:Constraint> <ows:Constraint name="ImplementsSpatialJoins"> <ows:NoValues/> <ows:DefaultValue>TRUE</ows:DefaultValue> </ows:Constraint> <ows:Constraint name="ImplementsTemporalJoins"> <ows:NoValues/> <ows:DefaultValue>TRUE</ows:DefaultValue> </ows:Constraint> <ows:Constraint name="ImplementsFeatureVersioning"> <ows:NoValues/> <ows:DefaultValue>FALSE</ows:DefaultValue> </ows:Constraint> <ows:Constraint name="ManageStoredQueries"> <ows:NoValues/> <ows:DefaultValue>TRUE</ows:DefaultValue> </ows:Constraint> <ows:Constraint name="PagingIsTransactionSafe"> <ows:NoValues/> <ows:DefaultValue>FALSE</ows:DefaultValue> </ows:Constraint> <ows:Constraint name="QueryExpressions"> <ows:AllowedValues> <ows:Value>wfs:Query</ows:Value> <ows:Value>wfs:StoredQuery</ows:Value> </ows:AllowedValues> </ows:Constraint> </ows:OperationsMetadata> <FeatureTypeList> <FeatureType xmlns:ahiss="ahiss"> <Name>ahiss:rs_analfa</Name> <Title>Analfabetismo segun RS</Title> <Abstract/> <ows:Keywords> <ows:Keyword>vw_registro_social</ows:Keyword> <ows:Keyword>features</ows:Keyword> </ows:Keywords> <DefaultCRS>urn:ogc:def:crs:EPSG::32717</DefaultCRS> <ows:WGS84BoundingBox> <ows:LowerCorner>-81.0 -90.0</ows:LowerCorner> <ows:UpperCorner>-81.0 -90.0</ows:UpperCorner> </ows:WGS84BoundingBox> </FeatureType> </FeatureTypeList> <fes:Filter_Capabilities> <fes:Conformance>... </fes:Conformance> <fes:Id_Capabilities> <fes:ResourceIdentifier name="fes:ResourceId"/> </fes:Id_Capabilities> <fes:Scalar_Capabilities>... </fes:Scalar_Capabilities> 36 <fes:Spatial_Capabilities> <fes:GeometryOperands>... </fes:GeometryOperands> <fes:SpatialOperators>... </fes:SpatialOperators> </fes:Spatial_Capabilities> <fes:Temporal_Capabilities>... </fes:Temporal_Capabilities> <fes:Functions>... </fes:Functions> </fes:Filter_Capabilities> </wfs:WFS_Capabilities> Tabla 8 – Ejemplo de petición getCapabilities (WFS) DescribeFeatureType (operación de descubrimiento) Devuelve una descripción de los atributos disponibles por entidades apoyado en el servicio WFS. http://190.11.24.213:8080/geoserver/wfs?servicio=wfs&version=2.0.0&req uest=DescribeFeatureType <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault ="qualified"> <xsd:import namespace="http://www.quitoambiente.gob.ec/" schemaLocation ="http://190.11.24.213:8080/geoserver/wfs?request=DescribeFeatureType&version= 1.0.0&service=WFS&typeName=amb%3Aadministraciones_zonales%2Camb%3Ac abecera_parroquial%2Camb%3Aetapas_inga%2Camb%3Agis_cli_est_geomorfolog ica%2Camb%3Ainfraestructura_inga%2Camb%3Alimite_dmq%2Camb%3Alimit e_provincial%2Camb%3Aparroquias_rurales%2Camb%3Aparroquias_urbanas% 2Camb%3Aplan_uso_suelo%2Camb%3Aprecipitacion_2009%2Camb%3Apredios_ inga%2Camb%3Aradiacion_2009%2Camb%3Arecurrencia_indencios%2Camb%3 Ared_hidrica%2Camb%3Ared_vial%2Camb%3Atemperatura_2009%2Camb%3A viento_direccion_2009%2Camb%3Azona_urbana_dmq%2Camb%3Azonificacion_i nga"/> <xsd:import namespace="http://www.quitoambiente.gob.ec/patrimonio" sche maLocation="http://190.11.24.213:8080/geoserver/wfs?request=DescribeFeatureType &version=1.0.0&service=WFS&typeName=amb.pat%3Abosques_protectores%2Ca mb.pat%3Acobertura_vegetal%2Camb.pat%3Aproteccion_ecologica%2Camb.pat %3Aproteccion_puos%2Camb.pat%3Asnap"/> </xsd:schema> Tabla 9 – Ejemplo de petición DescribeFeatureType (WFS) GetFeature (operación de consulta) Devuelve una selección de características de una fuente de datos que incluye valores de geometría y atributos. http://186.101.170.100:8895/geoserver/wfs?service=wfs&version=2.0.0&req uest=GetFeature&typeNames=mseg:hoteleria <wfs:FeatureCollection xmlns:it.geosolutions="http://www.geo-solutions.it" xmlns:tiger=" http://www.census.gov" xmlns:topp="http://www.openplans.org/topp" xmlns:sf="http:// www.openplans.org/spearfish" xmlns:ahiss="ahiss" xmlns:bnf="bnf" xmlns:cite="http:/ /www.opengeospatial.net/cite" xmlns:optisesa="ec.edu.uce.optisesa" xmlns:sde="http://g eoserver.sf.net" xmlns:wfs="http://www.opengis.net/wfs/2.0" xmlns:mseg="com.exco" xmlns:sni="ec.gob.senplades" xmlns:gml="http://www.opengis.net/gml/3.2" xmlns:nurc="http://www.nurc.nato.int" x mlns:xsi="http://www.w3.org/2001/XMLSchema-instance" numberMatched="100" num berReturned="100" timeStamp="2015-02-04T03:44:13.732Z" xsi:schemaLocation="http: 37 //www.opengis.net/gml/3.2 http://186.101.170.100:8895/geoserver/schemas/gml/3.2.1/gml .xsd http://www.opengis.net/wfs/2.0 http://186.101.170.100:8895/geoserver/schemas/wfs/ 2.0/wfs.xsd com.exco http://186.101.170.100:8895/geoserver/wfs?service=WFS&version =2.0.0&request=DescribeFeatureType&typeName=mseg%3Ahoteleria"> <wfs:boundedBy> <gml:Envelope> <gml:lowerCorner>513911.09432317 9511990.36792757</gml:lo werCorner> <gml:upperCorner>779813.911770728 1.013554122E7</gml:upp erCorner> </gml:Envelope> </wfs:boundedBy> <wfs:member> <mseg:hoteleria gml:id="hoteleria.1"> <gml:boundedBy> <gml:Envelope srsDimension="2" srsName="urn:ogc:d ef:crs:EPSG::32717"> <gml:lowerCorner>695546.3886 9621588.34</g ml:lowerCorner> <gml:upperCorner>695546.3886 9621588.34</g ml:upperCorner> </gml:Envelope> </gml:boundedBy> <mseg:orden>1</mseg:orden> <mseg:nombre>CASA SIMPSON</mseg:nombre> <mseg:num_camas>37</mseg:num_camas> <mseg:x>695546.388599999950000</mseg:x> <mseg:y>9621588.339999999900000</mseg:y> <mseg:zona>Z07</mseg:zona> <mseg:provincia>19</mseg:provincia> <mseg:canton>1908</mseg:canton> <mseg:parroquia>190850</mseg:parroquia> <mseg:telefono>3041777</mseg:telefono> <mseg:e_mail>[email protected]</mseg:e_mail> <mseg:repres_leg>SOLIS RAMÍREZ ENRIQUE LUIS</mseg:r epres_leg> <mseg:celular>993823347</mseg:celular> <mseg:geom> <gml:Point srsDimension="2" srsName="urn:ogc:def:c rs:EPSG::32717"> <gml:pos>695546.3886 9621588.34</gml:pos> </gml:Point> </mseg:geom> </mseg:hoteleria> </wfs:member> </wfs:FeatureCollection> Tabla 10 – Ejemplo de petición getFeature (WFS) LockFeature (operación de bloqueo) Evita la edición de características a través de un bloqueo persistente de la característica. Si un cliente modifica una característica antes de enviar la petición WFS de vuelta el bloqueo evitará que otro cliente modifique la misma característica. 38 Transaction (transaction operation) Añadir, editar o borrar los tipos de entidades existentes en el servidor WFS. Cada transacción consiste en ”0” o “n” inserts, updates o deletes realizados en orden, las transacciones de Geoserver son atómicas lo que significa si una operación falla se abandona la transacción y no se alteran los datos. Disponible solo para la versión 2.0.0 o superior: GetPropertyValue (Operación de consulta) Recupera el valor de una propiedad de la característica o parte del valor de una propiedad compleja desde una función del almacén de datos para un conjunto de características identificadas por una expresión de consulta. http://186.101.170.100:8895/geoserver/wfs?service=wfs&version=2.0.0&req uest=GetPropertyValue&typeNames=mseg:albergues&valueReference=geo m <wfs:ValueCollection xmlns:mseg="com.exco" xmlns:fes="http://www.opengis.net/fes/2. 0" xmlns:wfs="http://www.opengis.net/wfs/2.0" xmlns:ows="http://www.opengis.net/ow s/1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:gml="http://www.opengis.net /gml/3.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocati on="http://www.opengis.net/wfs/2.0 http://186.101.170.100:8895/geoserver/schemas/wfs/ 2.0/wfs.xsd"> <wfs:member> <mseg:geom> <gml:Point srsDimension="2" srsName="urn:ogc:def:crs:EPSG ::32717"> <gml:pos>196925.0 89855.0</gml:pos> </gml:Point> </mseg:geom> </wfs:member> <wfs:member> <mseg:geom> <gml:Point srsDimension="2" srsName="urn:ogc:def:crs:EPSG ::32717"> <gml:pos>197282.0 895927.0</gml:pos> </gml:Point> </mseg:geom> </wfs:member> <wfs:member> <mseg:geom> <gml:Point srsDimension="2" srsName="urn:ogc:def:crs:EPSG ::32717"> <gml:pos>196217.0 88658.0</gml:pos> </gml:Point> </mseg:geom> </wfs:member> </wfs:ValueCollection> Tabla 11 – Ejemplo de petición getPropertyValue (WFS) 39 GetFeatureWithLock (Operación de consulta y bloqueo) Devuelve una selección de características y aplica un bloqueo sobre estas características por un tiempo determinado de la variable “expiry” expresado en minutos. <wfs:GetFeatureWithLock service='WFS' version='2.0.0' handle='GetFeatureWithLock-tc1' expiry='5' resultType='results' xmlns:topp='http://www.openplans.org/topp' xmlns:fes='http://www.opengis.net/fes/2.0' xmlns:wfs='http://www.opengis.net/wfs/2.0' valueReference='the_geom'> <wfs:Query typeNames='topp:states'/> </wfs:GetFeatureWithLock> Tabla 12 – Ejemplo de petición getFeatureWithLock (WFS) CreateStoredQuery (operaciones de consultas almacenadas) Crea una consulta almacenada en el servidor WFS. DropStoredQuery (operaciones de consultas almacenadas) Elimina una consulta almacenada en el servidor WFS. ListStoredQueries (operaciones de consultas almacenadas) devuelve una lista de las consultas almacenadas en el servidor WFS. DescribeStoredQueries (operaciones de consultas almacenadas) Devuelve los metadatos que describen las consultas almacenadas en el servidor de WFS. Todos los WFS soportan entrada y salida de datos utilizando lenguaje Geography Markup Language (GML). Algunos WFS también soportan otras codificaciones, como por ejemplo Geo RSS o ficheros shape. Normalmente los usuarios interactúan con WFS a través de clientes geoespaciales Web o Desktop, que permiten acceder a capas de mapas vectoriales desde clientes externos, sobre Internet. iv. Librerías de visualización geográfica La generación de servicios WMS o WFS es el inicio de la publicación de mapas en internet, datos que son enviados a través del protocolo http a los usuarios quienes requieren una librería ligera con características básicas para la visualización de estos mapas en el lado del cliente. 40 Las principales librerías web que existen en el mercado de los GIS son OpenLayers, Leaflet, UMN MapServer, MapFaces, Ka-Map, MapBuilder, FlexLayers, WebGIS Public. Ilustración 14.Relación entre clientes web geográficos (GeoTux, 2012). OpenLayers: es la librería JavaScript BSD-license más usada por los clientes y frameworks GIS existentes desde su aparición en junio de 2006, amigable para dispositivos móviles, extensible con toolkits como GeoExt y clientes GIS, cuenta con certificación OGC que permite la interoperabilidad entre sistemas de información geográfica. (OpenLayers, 2015). Leaflet: librería JavaScript Open Source amigable con dispositivos móviles para mapas interactivos (Leaflet, 2014). 41 Leaflet es simple, pesa 33kb y toma ventaja de las nuevas características de HTML5 y CSS3, extensible con una cantidad significativa de plugins. UNM MapServer: También conocido como MapServer es uno de los primeros SIG desarrollados en lenguaje C/C++ que en el año de 1994 ya permitía la entrega de imágenes satelitales provistos por la NASA en el proyecto ForNet, desde entonces hasta la actualidad se han liberado seis versiones de MapServer (Mapserver, s.f.). MapServer consta de tres componentes: • MapServerCore: Servidor de mapas, • MapCache: Módulo de cacheo de capas para aumentar la velocidad de renderización de las capas geográficas, y • TinyOWS: Librería de visualización y edición de mapas en línea a través de la especificación WFS-T. MapFaces Librería geoespacial que incorpora componentes JSF y JavaScript para la construcción de aplicaciones de clase empresarial para generar clientes web para la presentación, manipulación y análisis de datos geográficos (MapFaces, s.f.). Ka-Map Es una API para renderizar mapas en la web, salió a la luz en mayo de 2005 apenas tres meses después de Google maps, ideal para realizar mapas estáticos con puntos dinámicos, mapas a pantalla completa y mapas dinámicamente reajustables. Actualmente el proyecto ha sido abandonado en pro de la librería OpenLayers (MapTools.org, s.f.). FlexLayers Librería para visualización de mapas que porta las capacidades de OpenLayers a ActionScript 3, este cliente soporta la visualización capas WMS, WMS-C, WFS con sus respectivos controles para manejo del zoom y selección de capas temáticas (FlexLayers, s.f.). v. Frameworks para integración geográfica y alfanumérica. Tal como se vio en el literal anterior OpenLayers es una librería robusta en la cual se basan actualmente los frameworks para poder visualizar información geográfica, considerando la gran cantidad de frameworks existentes y que algunos en su mayoría han sido abandonados en un intento de estandarizar y fomentar el uso de frameworks robustos, se consideran los siguientes que están en vigencia actualmente. 42 Geomajas. - es un framework GPS el cual integra de una manera sencilla las características de un potente servidor en un navegador web5. El objetivo de Geomajas es proveer una plataforma para la integración de datos espaciales provisto por Geotools o Hibernate, permitiendo a múltiples usuarios controlar y manejar la data en sus propios navegadores. Ilustración 15. Gráfico arquitectura Geomajas (Geomajas, 2014). GeoMOOSE. - GeoMOOSE es un framework de cliente web desarrollado en JavaScript y viene pre empaquetado con módulos PHP que realizan diversas funciones en la aplicación web6. Mapbender. - es un entorno de geoportales para publicar registrar visualizar navegar seguir y conceder acceso seguro de servicios de infraestructura de datos espaciales Mapbender permite a los usuarios crear geoportales personalizados fácilmente a partir de una amplia gama de aplicaciones con mínima o ninguna necesidad de programación. Las funcionalidades de tipo servidor proveen funcionalidades 5 6 Geomajas (Geomajas, 2014). Geomoose (Geomoose, 2014). 43 avanzadas como seguridad de tipo proxy digitalización en líneas a través del navegador autosnapping y más7. Heron map client (Heron-MC).- A pesar de no estar considerado dentro de un framework, incorpora muchas funcionalidades de los framework como la impresión de mapas, manejo de capas, exportación de datos a formatos geográficos (GeoJSON, csv) siendo considerada una herramienta robusta y ligera8 al ser desarrollada en JavaScript. b. ¿Qué es un dispositivo móvil? Un dispositivo móvil es conocido también como un computador de bolsillo o computador de mano (palmtop), y se lo define como un computador de tamaño pequeño, con capacidades de procesamiento, con conexión a internet, con memoria diseñado para una función, pero que pueden llevar a cabo otras funciones más generales (Wikipedia, 2015). Los smartphones o tablets también forman parte de esta clasificación, en américa latina y el mundo el uso y proliferación de este tipo de dispositivos va en aumento, según cifras publicadas en un estudio de la empresa GFK (GFK, 2015) américa latina ha crecido en un 59% en unidades vendidas en el año 2014 con respecto al año 2013 con una proyección para el año 2015 que se va a mantener esta tendencia al alza. En Ecuador el uso de smartphones ha crecido a pasos agigantados, según los datos del INEC en su portal web www.ecuadorencifras.gob.ec en 2011 Ecuador contaba con 500 mil usuarios con teléfonos inteligente y para 2013 esta cifra casi fue triplicada a 1 millón 200 mil, lo que nos hace pensar que los dispositivos móviles llegaron para quedarse (INEC, 2013, pág. 24). Smartphones América Latina Centro y Este de Europa América del norte 7 8 Unidades vendidas (en millón) Año Año % de completo Completo Cambio 2013 2014 68.7 109.5 59% Valor de ventas (en billones USD) Año Año % de completo Completo Cambio 2013 2014 20.6 31.4 52% 50.9 69.8 37% 15.1 17.2 14% 139.1 177.6 28% 58.2 71.8 23% MapBender3 (MapBender.org, s.f.) Heron-mc (Heron-mc, 2011) 44 Emergente (APAC) Medio Este y África Europa Occidental China Desarrollo (APAC) Total unidades globales 96.9 149.9 55% 22.3 28.4 27% 99.8 135.2 35% 32.3 39.4 22% 115.4 128.0 11% 52.2 55.8 7% 359.0 68.3 392.8 65.1 9% -5% 90.1 39.6 99.0 38.1 10% -4% 998.1 1,227.9 23% 330.4 381.1 15% Tabla 13 – Unidades de Smartphones vendidos en los años 2013 y 2014 (GFK, 2015) Ilustración 16.Indicador de personas con Smartphones en el Ecuador (INEC, 2013). En la actualidad los Smartphones y Tablets en el mercado cuentan con sensores incluidos como giroscopios, sensores de luminosidad, sensores de posicionamiento global entre otros, aprovechar estos avances tecnológicos con aplicaciones que permitan sacar el máximo provecho a estos dispositivos móviles, como el caso del sistema de posicionamiento global (GPS) que en Ecuador han empezado a usarse en vehículos de transporte público y/o privados. i. Sistemas operativos móviles. Un sistema operativo móvil controla a un dispositivo móvil similar a un pc, su diferencia radica en la simplicidad y su orientación a la conectividad inalámbrica. Algunos dispositivos móviles están basadas en el modelo de capas que constan de: 45 Kernel.- es el núcleo que proporciona comunicación entre los distintos elementos del hardware del dispositivo móvil, gestiona el sistema de archivos, acceso y gestión de memoria (Wikipedia, 2015). Middleware.- es el conjunto de módulos que hacen posible la propia existencia de aplicaciones para móviles, provee los servicios de mensajería y comunicaciones, drivers multimedia, navegadores web y gestiona la seguridad del dispositivo (Wikipedia, 2015). Entorno de ejecución de aplicaciones.- Es un gestor de aplicaciones y un conjunto de interfaces programables abiertas para facilitar la creación de software por parte de los desarrolladores de software (Wikipedia, 2015). Interfaz de usuario.- Es la capa de interacción del dispositivo móvil con el usuario, el diseño de la presentación visual de la aplicación. Los componentes geográficos (botones, pantallas, listas, etc.) (Wikipedia, 2015). Ilustración 17.Modelo de capas de un sistema operativo móvil (Android) (Maksim, 2013). Desde el año 2006 el mercado de los dispositivos móviles inteligentes ha crecido vertiginosamente, para el segundo trimestre del año 2014 el mercado de dispositivos móviles se dividía de la siguiente manera: Sistema operativo Porcentaje del mercado mundial 46 84.7% 11.7% 2.5% 0.5% 0.6% Android iOS Windows Phone BlackBerry Otros Tabla 14 – Porcentaje de distribución del mercado mundial según el sistema operativo al año 2014 (IDC, International Data Corporation, 2014) Porcentaje de ventas de Smartphones a nivel mundial Ilustración 18.Evolución ventas de Smartphones clasificados por sistema operativo (Wikipedia, 2015). Gartner: Ventas de Smartphone a nivel mundial (% de Smartphones 2012 – 2014) Windows Phone Other Smartphones 83.1% 3.0% 0.4% 100.0% / 66. 0% 2013 1.9% 15.6% 78.4% 3.2% 0.9% 100.0% / 57. 6% 2012 5.1% 19.1% 66.2% 2.5% 0.5% 100.0% / 38. 4.2% 47 Bada Android 12.7% Symbian 0.8% RIM (BlackBerry) 2014 Q3 Año Windows Mobile iOS Total Smartphone s 2.3% (% smarthphon es / % de todos los dispositivos móviles) 8% Tabla 15 – Unidades de Smartphones vendidos en los años 2012,2013 y 2014 clasificados por sistema operativo (GFK, 2015). Como se puede observar Android es el sistema operativo móvil más usado en el mundo con una cuota superior al 80%, esto debido a su código fuente libre que permite a diversas empresas ensambladoras de dispositivos móviles ajustar, calibrar y modificar dichos fuentes para sacar mayor provecho al hardware de sus dispositivos. Android está basado en el kernel de Linux, con una máquina virtual java propia (Dalvik) la cual permite interpretar a bytecode los programas escritos bajo lenguaje JAVA. iOS, el sistema operativo de Apple para su gama de dispositivos móviles (iPhone, iPad, iPod) es una variación del Mac OS X el cual es simple y optimo, considerada por muchos como la combinación casi perfecta entre hardware y software. Android y iOS juntos conforman el 96% del mercado, por lo que en lo posterior se considerará únicamente estas dos plataformas en el presente documento ii. Componentes incorporados en los móviles actuales. Los dispositivos móviles en la actualidad incorporan gran cantidad de componentes (sensores) de hardware, cámaras, giroscopios, sensores de luz, GPS, Glonass por citar algunos, capaces de ser transportados en la palma de la mano. Para el objetivo del presente documento se consideran los componentes de posicionamiento global (GPS y Glonass), tanto los equipos con iOS como los dispositivos con Android cuentan con chips A-GPS incorporados, que a diferencia del tradicional GPS obtienen la información de la ubicación de una manera más rápida gracias a la asistencia de un servidor de asistencia en línea. 48 El desarrollo del A-GPS fue acelerado por requerimiento de los servicios E911 de los estados unidos de américa el cual requiere de la posición de un dispositivo móvil en caso de una llamada de emergencia. La red GPS9 compuesta por 30 satélites situados a una órbita terrestre de 20.000km, la red GPS es propiedad del gobierno de los EEUU, el GPS tradicional presenta dificultades para obtener la posición precisa en ambientes de baja señal o lugares muy cerrados sin visión de cielo abierto (Wikipedia, 2014). Un A-GPS hace uso de los sistemas GPS y con ayuda de los servidores de asistencia, puede obtener la ubicación GPS de una manera rápida, los modos de acceso a la información provista por el servidor de asistencia es online y offline. Modo online.- Acceden a los datos en tiempo real, por lo que es necesario una conexión de datos activa proveniente de la red celular GSM, haciendo el posicionamiento más rápido y preciso. Modo offline.- Acceden a los datos previamente descargados de una red GPRS, WiFi o similar, estos datos pueden ser usados por varios días hasta que la misma se vuelve obsoleta y se necesite realizar una actualización de los mismos. 9 Sistema de posicionamiento global GPS (US Cost Guard, Navigation Center, 1996). 49 Ilustración 19 A-GPS. Diagrama de funcionamiento (Windows Central, 2009). Glonass es el sistema de posicionamiento global ruso, puede ser usado independientemente o en conjunción con el GPS o A-GPS tradicional permitiendo una precisión de localización a 2 metros a la redonda10. Ilustración 20.Orbitas de satélites en la tierra, Glonass (izquierda) y GPS (derecha) (Barbian, 2014). 10 Simulación de satélite GPS y Glonass circundantes a la órbita terrestre (Youtube, 2012) 50 Ilustración 21.Triangulación asistida por GPS y Glonass (Glonass.it, s.f.). Los dispositivos móviles en la actualidad trabajan con los dos sistemas por defecto (Stackoverflow, 2014), lo cual permite una mayor precisión y rapidez al momento de solicitar una ubicación desde un dispositivo móvil aún en condiciones difíciles como montañas o rascacielos. iii. Frameworks de desarrollo de aplicaciones móviles. Existen dos tipos de frameworks para el desarrollo de aplicaciones web, uno se basa en el soporte nativo y el otro en aplicaciones hibridas. Como se analizó previamente las dos plataformas predominantes en el mercado son Android y iOS. Frameworks nativos Android Studio, es toda una suite para desarrollar aplicaciones nativas en código java interpretables por la máquina virtual Dalvik, cuenta con api’s para el manejo y administración de los componentes internos del dispositivo móvil. Al ser de código libre y estar basado en lenguaje Java la suite provee desarrollar una aplicación móvil en casi cualquier sistema operativo de escritorio como Linux, Windows y/o Mac Os con un coste relativamente bajo. Ilustración 22.Android Studio (Android Developer, 2015). XCode es el entorno de desarrollo de los dispositivos Apple como el iPad, su lenguaje de desarrollo principal es objetive-C aunque puede compilar código escrito en C, C++, Java, Apple Script, XCode es distribuido gratuitamente con los sistemas 51 operativos Mac Os X el cual integra el framework Cocoa lo cual convierte a XCode en una suite de uso limitado a sistemas operativos Mac Os X. Ilustración 23.IDE XCode (Apple, Inc., 2015). Frameworks híbridos Uno de los objetivos de los frameworks híbridos es permitir el desarrollo de aplicaciones multiplataforma, existe una gran variedad de frameworks para aplicaciones híbridas, a continuación se listan un grupo de ellas tomando en consideración su popularidad y reseñas de uso. jQuery Mobile, es un framework basado en HTML5, optimizado para dispositivos móviles con pantallas táctiles. Es un framework de fácil usabilidad y bien documentado, una de las ventajas de jQuery es que está basado en jQuery y jQuery UI con código ligero, robusto y gratuito (jQuery mobile, 2015). Sencha Touch es un framework para móviles basado en HTML5, con este framework se puede construir aplicaciones multiplataforma, requiere de un servidor local ejecutándose. Puede ser descargado gratuitamente pero si su uso es comercial debe pagarse una licencia (Sencha, 2015). 52 PhoneGap es un programa gratuito de Adobe, similar a apache Córdova, permite crear aplicaciones multiplataforma con HTML, CSS y JavaScript. Al ser un producto de Adobe puede usarse programas de diseño de páginas web como Dreamweaver para facilitar el proceso de desarrollo de la interfaz (PhoneGap, 2015). PhoneGap Build Esta herramienta permite el empaquetado de los fuentes escritos en HTML, CSS y JavaScript en la nube. Al ser un servicio provisto por Adobe requiere un licenciamiento para su uso que inicia por $9.99 al mes (Adobe, 2013). Appcelerator (Titanium IDE) Un framework de desarrollo basado en HTML5 y JavaScript que permite interactuar con los componentes de un dispositivo móvil a través de Api’s propias para generar aplicaciones multiplataforma (Appcelerator, 2015). CAPÍTULO 4 Infraestructura tecnológica Este capítulo se hará hincapié en los detalles técnicos necesarios y las herramientas a usarse para el desarrollo de la herramienta prototipo que realice el cálculo de las rutas óptimas. a. Bases de datos alfanuméricas Una base de datos son conjuntos de datos almacenados ordenadamente para su uso futuro, la administración y manejo de estas bases de datos se realiza a través de un sistema de gestión de base de datos SGBD. Para el presente tema de tesis se consideraron algunas alternativas de SGBD disponibles en el mercado PostgreSQL, Oracle, MySQL y MS SQL Server entre las más populares con capacidad de soportar un sistema en ambiente de producción. MS SQL PostgreSQL Oracle MySQL Server 2008 Sistema Soporte para Soporte para 53 Soporte para Soporte Operativo Windows, Windows, Windows, para Linux, Mac, Linux, Unix. Linux, Unix, Windows. Unix y todas Mac y sus sus variaciones. variaciones. Open Source Licencia anual Licenciamiento Open Source propietaria con BSD sin costo costo según el de licencia. número de núcleos de procesamiento. para uso estándar, licencia de Licencia pago con propietaria coste anual anual para ambientes comerciales. Soporte datos espaciales SI SI Costos estimados por $0 licencia SI SI Dual-Core Desde Dual-Core $40000 €1740.00 $25000 Quad-Core hasta Quad-Core $160000 €8688.00 $50000 Tabla 16 – Comparativa SGBD11. Como sistema gestor de base de datos alfanuméricos se ha considerado a PostgreSQL sobre sus competidores al ser una herramienta robusta, escalable, de costo accesible, multiplataforma de fácil instalación e implementación. b. Bases de datos geográficas Una geodatabase es una base de datos o estructura de archivos usados principalmente para almacenar, consultar y manipular datos espaciales. Las geodatabases almacenan geometrías, el sistema de referencia espacial, atributos y reglas conductuales para los datos. Varios tipos de conjuntos de datos geográficos pueden ser almacenados en una geodatabase incluyendo los feature class (colección de características 11 Comparativas entre SGBD con extensiones geográficas (Boston Geographic Information Systems, s.f.) 54 geográficas con el mismo tipo de geometría como puntos, línea, polígono, etc.; los mismos atributos y la misma referencia espacial), tablas de atributos, conjuntos de datos raster (modelo datos de representación geográfica compuesto por una o múltiples bandas RGB y contiene un atributo de valor y localización en coordenadas), conjunto de datos de redes y topologías entre otras. (ESRI, 2015). En la siguiente tabla comparativa se aprecian algunos aspectos sobre las extensiones geográficas de los diversos SGBD. MS SQL PostGIS Oracle Spatial Server MySQL Spatial 2008 geometry / geography Soporte para Windows, Sistema Linux, Mac, Operativo Unix y todas sus Soporte para Windows, Linux, Unix. Soporte para Windows, Linux, Unix, Mac y sus variaciones. Soporte para Windows. variaciones. Open Source Licenciamiento GPL sin costo de licencia. Licencia anual propietaria. Incluido en el Incluido en SGBD el SGBD SQL Server Extensión para PostGIS manipulación Geometry/ de datos PostGIS geográficos Geography 2008 R2 Oracle Locator/ MySQL Spatial Oracle Spatial geometry/ SQL Server 2008 R2 geography Soporte SIG QGIS (Open ArcGis QGIS Source), (Comercial), (Open ArcGis QGIS (Open Desktop Source – se ArcGis (Comercial), requiere Desktop 55 GDAL/OGR Source), GDAL/OGR GDAL/OGR (Open Source) para (Comercial) compilar) Funciones para datos espaciales Cerca de 300 funciones que pueden ser personalizadas Alrededor de 70 funciones soportadas Pocas funciones Alrededor espaciales de 70 soportadas 20 funciones aproximadamente soportadas Costos estimados por $0 $4000 $0 $0 SI SI NO En progreso licencia Manipulación de características espaciales mayor a 100 Mb Tabla 17 – Comparativa extensiones geográficas12. Como se puede apreciar, Oracle Spatial y PostGIS son claramente las extensiones geográficas más maduras y con mejor soporte para procesamiento geográfico, para el presente documento se tomará en cuenta a la base de datos PostgreSQL con su módulo para manejo de coordenadas espaciales PostGIS que cuenta con la certificación OGC así se garantiza la interoperabilidad con otros sistemas que hagan uso de características geográficas. 12 Comparativa extensiones geográficas (Boston Geographic Information Systems, s.f.) 56 Ilustración 24.Infraestructura de base de datos y extensión geográfica seleccionada para el sistema. c. Frameworks o librerías para el desarrollo de aplicaciones SIG En el capítulo anterior se realizó una investigación sobre las librerías SIG que existen en el mercado, al analizar estos frameworks y librerías se puede dilucidar que se requiere el uso de la librería OpenLayers al ser la librería SIG más popular y ampliamente utilizada por los frameworks anteriores, escalable e interoperable con el estándar HTML y HTML5. El framework designado para desarrollar la visualización en el cliente web para escritorio es Heron-mc, al ser un cliente web JavaScript facilita la creación de aplicaciones de mapeo geográfico web que puede ser personalizable con el toolkit GeoExt y el framework Ext JS, Heron-mc aprovecha todos estos componente para ensamblar rápidamente aplicaciones visualmente enriquecidas. Ilustración 25.Infraestructura de la capa de presentación seleccionada para el sistema. d. Algoritmo para encontrar la ruta más corta entre dos puntos El problema de la ruta más corta puede resolverse con métodos de programación lineal, al ser un problema de optimización se realiza una combinatoria cuyo objetivo es encontrar las rutas más cortas o de menor coste. Algoritmo de Dijkstra13: Sea ( la distancia más corta del nodo fuente 1 hasta el nodo , y se define como ) como la longitud del arco ( ). Entonces el algoritmo define la etiqueta de un nodo inmediato posterior como: 13 Algoritmos de ruta más corta (TAHA, 2004, pág. 225) 57 [ ] La etiqueta del nodo de inicio es [ [ ] ], que indica que el nodo no tiene predecesor. Las etiquetas de nodos en el algoritmo de Dijkstra son de dos clases: temporales y permanentes. Una etiqueta temporal se modifica si se puede encontrar una ruta más corta a un nodo. Cuando se ve que no se pueden encontrar rutas mejores, cambia el estado de la etiqueta temporal a permanente. Paso 0. Etiquetar el nodo fuente (nodo 1) con la etiqueta permanente [ ]. Igualar . Paso . a) Calcular las etiquetas temporales [ ] para cada nodo al que pueda llegarse desde el nodo , siempre y cuando no tenga etiqueta permanente. Si el nodo ya está etiquetado con [ sustituir [ ] por [ ] por otro nodo , y si , ]. b) Si todos los nodos tienen etiquetas permanentes, detenerse. En caso contrario, seleccionar la etiqueta [ ] que tenga la distancia más corta ( ) entre todas las etiquetas temporales (los empates se rompen de forma arbitraria). Hacer que y repetir el paso . La representación vial es un claro ejemplo de una red (grafo dirigido y ponderado) que puede ser resuelta con el algoritmo de Dijkstra Al tener una red vial existen muchos aspectos que considerar como el costo que puede ser definido en función de la distancia de la vía, tipo de vía, hora del día, carga vehicular, direccionalidad de vías, etc., para el cálculo de la ruta óptima con el algoritmo de Dijkstra en el presente documento se considera el uso de dos variables, la longitud como coste y el sentido de vías (costo inverso). 58 Ilustración 26. Ejemplo topología de red vial. Oracle Spatial14 cuenta con un motor para consultas de ruteo que incorpora el algoritmo de Dijkstra para el cálculo de rutas óptimas en una red, PostGIS incorpora soporte nativo para el cálculo de rutas óptimas con la librería llamada pgRouting15 que incorpora múltiples funcionalidades para la manipulación de redes. pgRouting hace uso de la representación de matriz de adyacencias para determinar las rutas óptimas considerando que las mismas tiene direccionalidad (una vía, doble sentido). e. Librerías para desarrollo de aplicaciones móviles También en el capítulo anterior se recopiló las librerías SIG móvil que existen en el mercado, al analizar estos frameworks y librerías se ha decido usar, al igual que en la interfaz web de escritorio, la librería OpenLayers al ser la librería SIG más popular y ampliamente utilizada por los frameworks móviles descritos anteriormente, escalable e interoperable con el estándar HTML y HTML5. El framework designado para desarrollar la visualización en el cliente web móvil jQuery mobile, al ser un cliente web JavaScript facilita la creación de aplicaciones de mapeo geográfico móvil, puede ser personalizable con JavaScript o jQuery puro aprovechando así estos componentes para ensamblar rápidamente aplicaciones visualmente enriquecidas. 14 15 Motor de consultas Oracle Routing Engine (Oracle, s.f.) Librería pgRouting (pgRouting, s.f.) 59 CAPÍTULO 5 Diseño, desarrollo y pruebas del sistema prototipo a. Objetivos generales y específicos Objetivo general: El objetivo general del presente capítulo es describir el comportamiento del sistema prototipo para el cálculo de las rutas óptimas. Objetivos específicos: Definir el diseño del sistema, modelo de base de datos, casos de uso Definir las pantallas de formularios para el sistema. Describir el funcionamiento de la aplicación web de escritorio y web móvil prototipo. b. Diseño del sistema. El sistema está basado en la arquitectura de “n” capas, el cual está distribuido de la siguiente forma: Una capa de datos, conformada por la base de datos geográfica PostgreSQL/PostGIS/pgRouting. Una capa de lógica del negocio, conformado por el servidor de mapas Geoserver y el servidor de aplicaciones Jboss (Wildfly) Una capa de presentación, compuesta por dos visores geográficos Heron-mc para web desktop y jQuery mobile para web móvil. 60 Ilustración 27. Diseño arquitectura del sistema. Las comunicaciones entre los diferentes clientes del sistema y la aplicación es provista por los servicios RESTful y WebSockets para permitir transferencias de información en tiempo real. i. Diagrama entidad relación. La siguiente ilustración muestra las tablas usadas en el sistema, se consideraron tablas geográficas con el prefijo “geo_” y tablas alfanuméricas sin prefijo inicial para poder diferenciarlas entre sí a su vez permitiendo una mejor mantenibilidad del sistema en el caso de requerir una actualización de los datos geográficos con los más actuales. 61 Ilustración 28. Modelo de base de datos geográfica. 62 ii. Diagramas de Casos de Uso Ilustración 29. Diagrama de casos de uso. iii. Formularios Para el desarrollo de la aplicación se consideró la información básica necesaria para registrar una llamada de emergencia y georeferenciarla. El prototipo web de escritorio incorpora un formulario dispuesto en el panel lateral derecho que contiene los campos: Nombre: campo de texto en el cual se registra el nombre de la persona que requiere la atención pre hospitalaria (en caso de poseer dicha información durante la llamada), Género: selector de opción única (radio button) entre masculino y femenino, Descripción del evento: cuadro de texto para el registro del relato de la llamada de emergencia, Observaciones: cuadro de texto para registrar cualquier acotación por parte del personal de monitoreo, 63 Latitud: campo de texto de solo lectura en el que se visualiza el valor de la latitud después de seleccionar un punto en el mapa, Longitud: campo de texto de solo lectura en el que se visualiza el valor de la longitud después de seleccionar un punto en el mapa Enviar unidad ambulatoria: selector (checkbox) que muestra un panel inferior con la información de las ambulancias disponibles en el sistema. Ilustración 30.Formulario para el registro de emergencias. iv. Prototipo de interfaz. (Móvil y WEB) El sistema está comprendido por dos interfaces, web de escritorio que consta de un mapa en un panel central y dos paneles laterales, a la derecha el panel de registro de emergencias y a la izquierda el panel con el selector de capas de interés registradas en la base de datos. 64 Ilustración 31.Prototipo de interfaz web para el registro de emergencias. La segunda interfaz móvil consta de un mapa en pantalla completa y dos botones en la parte inferior del mismo, estos botones tienen la funcionalidad de ubicar la posición actual del dispositivo y la selección de la capa temática de interés ya sea la vista de solo calles o la vista mixta entre satélite y calles Ilustración 32.Prototipo de interfaz móvil (pantalla inicial). 65 Ilustración 33.Prototipo de interfaz móvil (pantalla de capas temáticas). c. Pruebas En el ámbito de la informática existen diferentes tipos de pruebas para verificar la calidad de una aplicación de software, para el presente documento se registran las pruebas realizadas al sistema prototipo. i. Rendimiento Al concebirse ambas interfaces como aplicaciones web, se consideraron cuatro criterios para las pruebas de rendimiento de la aplicación tales como hardware, software, tiempo de carga y navegabilidad. Prototipo Web: Hardware y software usado para la prueba Hardware Procesador: Intel DualCore 1.8Ghz RAM: 2GB Monitor: 17 pulgadas Periféricos: teclado y mouse Software SO: Windows 7 32bits Navegador: Google Chrome, Mozilla Firefox Red Conexión de banda ancha 2mbps/500kbps velocidad asimétrica 66 Resultados de la prueba Tiempo de carga primera visita (sin caché de 37.11s navegación previa) Tiempo de carga re - visita (con caché de navegación 2.263s previa) Tamaño primera visita (sin caché de 4.913Kb navegación previa) Tamaño re - visita (con caché de 95Kb navegación previa) Fácil e Intuitiva (consta de una sola pantalla en la cual se Navegabilidad puede realizar todas las acciones necesarias de un visor geográfico) Prueba y estadísticas http://www.webpagetest.org/result/150509_S0_QVS/ provistas en la web Tabla 18 – Pruebas de rendimiento prototipo web. Estadísticas de peticiones y bytes consumidos durante la primera carga de la aplicación web de escritorio 67 Ilustración 34.Estadística de peticiones y bytes de carga durante la primera carga (prototipo web). Estadísticas de peticiones y bytes consumidos durante la re - visita de la aplicación web de escritorio Ilustración 35.Estadística de peticiones y bytes de carga durante la re - visita (prototipo web). 68 Prototipo Móvil: Hardware y software usado para la prueba Alcatel One Touch con dispositivo GPS incorporado. iPad MD370E/A con dispositivo GPS incorporado. Hardware Samsung Galaxy tab 3 con dispositivo GPS/GLONASS incorporado. Huawei Ideos U8150 con conexión 3G y dispositivo GPS incorporado. Nokia Lumia E520 con conexión 3G y dispositivo GPS incorporado. Alcatel One Touch SO:Android 4.3, navegador: Chrome. iPad MD370E/A SO:iOS8.2 (12d508) navegador: Safari, Chrome. Software Samsung Galaxy tab 3 SO: Android 4.4.2. Huawei Ideos U8150 SO: Android 2.2, navegador: Nativo. Nokia Lumia E520 SO: Windows Phone, navegador: Internet Explorer. Alcatel One Touch con conexión 4G (CNT). iPad MD370E/A con conexión 3G HSPA+ (Movistar). Samsung Galaxy tab 3 con conexión 3G HSPA+ (CNT). Red Huawei Ideos U8150 con conexión 3G (CNT). Nokia Lumia E520 con conexión 3G HSPA+ (Movistar). Resultados de la prueba Tiempo de carga primera visita caché (sin 12.72s de navegación previa) Tiempo de carga re visita (con caché de 2.241s navegación previa) 69 Tamaño primera visita (sin caché de 1.054 Kb navegación previa) Tamaño re - visita (con caché de 9 Kb navegación previa) Navegabili Fácil e Intuitiva (consta de una sola pantalla en la cual se puede dad realizar todas las acciones necesarias de un visor geográfico móvil) Prueba y estadísticas http://www.webpagetest.org/result/150509_M9_54310cdf19191ca216 provistas 2ee80784969608/ en la web Tabla 19 – Pruebas de rendimiento prototipo móvil. Estadísticas de peticiones y bytes consumidos durante la primera carga de la aplicación móvil 70 Ilustración 36.Estadística de peticiones y bytes de carga durante la primera carga (prototipo móvil). Estadísticas de peticiones y bytes consumidos durante la re - visita de la aplicación móvil Ilustración 37.Estadística de peticiones y bytes de carga durante la re - visita (prototipo móvil). ii. Control. Pruebas de compatibilidad 71 Se realizó la prueba de compatibilidad en equipos móviles heterogéneos con diferentes sistemas operativos y navegadores, se observó que el sistema es escalable y multiplataforma lo cual no liga al usuario a comprar un determinado dispositivo. Pruebas de integración La comunicación entre los diferentes prototipos web y móvil se realiza a través de: Servicios web REST: los servicios web usados permiten la interoperabilidad del sistema y de los diferentes “front end” pudiendo escalar el sistema a aplicaciones nativas para cada sistema operativo sin alterar la lógica del sistema y, WebSockets: en el sistema los WebSockets permiten la comunicación directa y en tiempo real entre el prototipo web con cada uno de los clientes que usan el prototipo móvil asignando un punto de destino para cada cliente, en caso de pérdida de conexión por falta de cobertura móvil, el sistema intentará reconectar con el servidor. Manual de usuario. El presente documento pretende orientar a los usuarios sobre el funcionamiento del visor geográfico y la aplicación móvil de OPTISESA, entre las principales funcionalidades se tiene: Visor geográfico Administración de las unidades ambulatorias permitiendo el Registro de emergencias y la asignación de eventos a las unidades Visualización de mapas base que permiten la administración de la aplicación Visualización de capas que ayuden a la localización de los distintos servicios de salud del País. Herramientas de ayuda del visor Aplicación Móvil Ingreso a la aplicación por medio de la placa y clave de la unidad ambulatoria Administración de capas temáticas que permiten la visualización de los mapas base, localización actual y ruta asignada Luego que el administrador asigne el incidente, en la aplicación móvil se presenta la ruta a seguir. 72 a. Visor Geográfico Acceso al sistema: El visor geográfico de OPTISESA se encuentra publicado en la web ingresando a http://<host_o_IP>:<puerto>/optisesa_web/visor_optisesa/index.html Ilustración 38. Pantalla de ingreso al sistema Descripción general Ilustración 39. Descripción general del visor 73 Sección 1: En la parte superior se tiene la presentación de logos relacionados al sistema. Sección 2: Gestión de capas, permite seleccionar las capas a visualizar. Estas pueden ser capas base o los servicios de salud que se encuentran registrados actualmente en el Ministerio de Salud. Sección 3: Mapa, dependiendo de las selecciones realizadas en la sección 2 se actualiza el mapa. Sección 4: Botones de interacción con el mapa, permiten la navegación en el mapa (sección 3) Sección 5: Registro de emergencias, permite la asignación de incidentes a las unidades ambulatorias registradas disponibles (autenticadas). Gestión de capas (Sección 2) Permite seleccionar las capas a visualizar, estas pueden ser Capas Base o servicios de salud que se encuentran registrados actualmente en el Ministerio de Salud. Capas Base.- Permite cambiar la capa base el mapa entre las opciones se tiene: - Vías : Mapa de OpenStreetMap - Aéreo: Bing Aerial - Hibrido: Bing Aerial + Labels Ilustración 40. Capas base Servicios de salud.- Capas que se pueden visualizar, en este caso son los servicios de salud existentes en el Ecuador los cuales están registrados en el ministerio de salud. Al seleccionar uno de ellos en el mapa se actualiza presentando las capas seleccionadas. 74 Ilustración 41. Servicios de Salud Botones de interacción (Sección 4) Permiten la interacción con el mapa, dependiendo de la acción que se seleccione: Mover mapa Acercar zoom Alejar zoom : Permite movilizarse por el mapa con la ayuda del mouse. : Permite acercar el mapa. : Permite alejar el mapa Zoom vista general Zoom anterior : Vuelve al mapa a su extención inicial. : Regresa al zoom anteriormente elegido. Zoom siguiente : Va al zoom siguiente. Medir distancia : Permite medir la distancia entre los puntos seleccionados en el mapa, en la parte inferior se despliega la distancia en kilómetros. Para salir de esta opción en necesario dar doble clic. 75 Ilustración 42. Medir distancia. Medir área : Permite medir el área de un polígono seleccionando por lo menos tres puntos. El área se muestra en la parte inferior. Ilustración 43. Medir área Punto de coordenadas : permite obtener en una nueva ventana el punto de coordenadas en proyección WGS 84 y Google Mercador 76 Ilustración 44. Punto de coordenadas. Ingrese coordenadas para ir a un lugar del mapa : Al ingresar las coordenadas dependiendo de la proyección y presionando el botón “Ir!” se presenta en el mapa el punto ingresado. Ilustración 45. Ingrese coordenadas para ir a un lugar del mapa. Búsqueda : Permite realizar la búsqueda de los centros médicos por medio de las opciones que se presentan en “Seleccione el elemento gráfico con el que desea realizar la búsqueda” y posteriormente se despliega una tabla con la información 77 encontrada. Ilustración 46. Resultado de búsqueda. Información del elemento : Luego de seleccionar un centro médico se despliega una tabla detallando la información del elemento seleccionado. Ilustración 47. Información de elemento. Agregar mapas WMS : Permite agregar capas por medio de servicios WMS, luego de agregar las capas estas se podrán visualizar en las capas activas. Ilustración 48. Agregar mapas WMS Gestión de capas : Oculta o muestra el panel de Gestión de capas. 78 Localización ubicación : Permite buscar una ubicación a partir de un nombre conocido de una calle y/o sector. Registro de emergencias (Sección 5) Permite la asignación de incidentes a las unidades ambulatorias registradas, por medio de los siguientes pasos: 1. Seleccionar la opción Registro de emergencias 2. Ingresar los datos del formulario: Nombre: Nombre de la persona que requiere la atención en el caso que requiera la atención. Género: Genero de la persona. Descripción del evento: Detalle del evento sucedido. Observaciones: Nota adicional relacionado del evento. Longitud y Latitud: Se selecciona en el mapa el punto donde ocurrió el evento. Enviar Unidad ambulatoria: Se selecciona en el caso que sea necesaria la asistencia de una unidad ambulatoria. 3. Seleccione la opción Guardar 4. En el caso que se seleccionó enviar unidad ambulatoria se presentara el listado de unidades ambulatorias activas, seleccionar una de ellas. 5. Presionar la opción asignar. Ilustración 49. Registro de emergencias 79 b. Aplicación Móvil Acceso al sistema La aplicación móvil OPTISESA se encuentra publicado en la web http://<host_o_IP>:<puerto>/optisesa_web/visor_optisesa/mobile.html Es necesario que el dispositivo móvil soporte HTML5, un chip GPS incorporado y una conexión activa de datos a internet. Ingreso a la aplicación: se presenta el formulario de ingreso para lo cual se debe digitar la placa de vehículo y la clave asignada. Ilustración 50. Pantalla de ingreso aplicación móvil Presentación del inicio, tiene dos opciones localización y capas temáticas 80 Ilustración 51. Pantalla de inicio aplicación móvil Localización: presenta la ubicación actual, tomar en cuenta es necesario que se encuentre activado el GPS del móvil. Ilustración 52. Pantalla de localización aplicación móvil 81 Selección de capas temáticas: Permite el cambio de capas temáticas seleccionando la capa a cambiar. Ilustración 53. Selección de capas temáticas Presentación de la ruta: Luego que el administrador asigna la ruta se presenta la ruta en el aplicativo móvil, la cual se actualiza según el desplazamiento de la unidad móvil. 82 Ilustración 54. Presentación de la ruta Ilustración 55. Presentación de la ruta más corta CAPÍTULO 6 Conclusiones y recomendaciones Una vez concluido el diseño y desarrollo de la herramienta prototipo se tiene la información suficiente para llegar a las siguientes conclusiones: Conclusiones 83 El sistema es económicamente viable ya que no es necesario el uso de dispositivos de última generación o muy costosos y el consumo de internet móvil es alrededor de 50 MB al mes. El sistema ayuda en la localización de un determinado lugar de ocurrencia de un evento de emergencia, reduciendo la inasistencia de las unidades ambulatorias solicitadas. La aplicación móvil puede ser perfeccionada y/o migrada a una aplicación nativa manteniendo la misma lógica del sistema. Durante las pruebas de control se pudo evidenciar una reducción de los tiempos de viaje durante el desplazamiento con las rutas designadas por la aplicación respetando la direccionalidad de vías. Recomendaciones: Se recomienda el uso de la aplicación ya que puede ser personalizada con los nuevos estudios del nivel de transito de la ciudad y/o con el uso de las cámaras de vigilancia así se puede tener parámetros de costes de rutas dinámicos en relación a las condiciones específicas u horas del día. El uso de la aplicación permite mantener un control del uso de los activos y gestión flotas de las unidades ambulatorias, teniendo como consecuencia la planificación de los mantenimientos mecánicos de cada unidad. 84 CAPÍTULO 7 Bibliografía (2013). Adobe® PhoneGap™ Build. Obtenido de https://build.phonegap.com/ Android Developer. (2015). Android Studio. Obtenido de http://developer.android.com/sdk/index.html Appcelerator. (2015). Titanium Mobile. Obtenido de http://www.appcelerator.com/titanium/ Apple, Inc. (2015). XCode. Obtenido de https://developer.apple.com/xcode/ide/ BARBIAN, E. (12 de Junio de 2014). Você sabe o que é o GLONASS? Obtenido de Tecnología: http://www.oficinadanet.com.br/post/10569-voce-sabe-o-que-eo-glonass Boston Geographic Information Systems. (s.f.). Compare SQL Server 2008 R2, Oracle 11G R2, PostgreSQL/PostGIS 1.5 Spatial Features. Obtenido de http://www.bostongis.com/PrinterFriendly.aspx?content_name=sqlserver200 8r2_oracle11gr2_postgis15_compare Boston Geographic Information Systems. (s.f.). Cross Compare SQL Server 2008 Spatial, PostgreSQL/PostGIS 1.3-1.4, MySQL 5-6. Obtenido de http://www.bostongis.com/PrinterFriendly.aspx?content_name=sqlserver200 8_postgis_mysql_compare Can I Use. (24 de Marzo de 2015). Can I Use. Obtenido de geolocation: http://caniuse.com/#search=geolocation CARRASCO, P., GONZÁLES, F., & MORENO, A. (2000). Atención Prehospitalaria de Emergencia. Cruz Roja Ecuatoriana. Obtenido de http://es.scribd.com/doc/48715614/01capitulo-01-Sistema-deEmergencias#scribd CELI-MERO, M., SALDAÑA-SÁNCHEZ, G., & RODRÍGUEZ-PEÑAFIEL, J. (3 de Septiembre de 2013). Situación actual del Sistema de Servicios de Emergencias Médicas de la ciudad de Guayaquil. MedPre. 2013. Obtenido de http://www.medpre.med.ec/ojs/index.php/revistamedpre/article/download/78/ 76 CERDA LORCA, J., & VALDIVIA C., G. (13 de Julio de 2007). John Snow, la epidemia de cólera y el nacimiento de la epidemiología moderna. Recuperado el 25 de Marzo de 2015, de http://www.scielo.cl/pdf/rci/v24n4/art14.pdf ciudadaniainformada. (2 de Marzo de 2009). ciudadaniainformada. Recuperado el 1 de Noviembre de 2014, de Ni las ambulancias vencen al tráfico: http://www.ciudadaniainformada.com/noticias-ciudadania-ecuador0/noticiasciudadania-ecuador/browse/58/ir_a/ciudadania/article//quito-ni-lasambulancias-vencen-al-trafico.html El Universo. (4 de Febrero de 2014). 14% de ambulancias pedidas no llega a sitio de emergencia. Obtenido de http://www.eluniverso.com/noticias/2014/02/04/nota/2135786/14ambulancias-pedidas-no-llega-sitio-emergencia Adobe. 85 e-mergencia.com. (1 de Mayo de 2009). Método START de triage. Obtenido de http://www.e-mergencia.com/foro/f165/metodo-start-triage11654/index9.html ESRI. (24 de Marzo de 2015). GIS Dictionary. Obtenido de http://support.esri.com/en/knowledgebase/GISDictionary/search Estado de Nueva York. (Septiembre de 2014). Licencias ArcGis. Obtenido de http://www.ogs.state.ny.us/purchase/prices/7600020751prices.pdf Extra. (2012). ¡Hay 18 ambulancias públicas para toda la capital! Obtenido de La Central Metropolitana de Ayuda Ciudadana (CMAC) se da modos para cubrir la mayor cantidad de emergencias. FlexLayers. (s.f.). FlexLayers. Obtenido de https://code.google.com/p/flexlayers/ Geomajas. (15 de Septiembre de 2014). Obtenido de http://www.geomajas.org/geomajas/about-geomajas Geomoose. (2014). Obtenido de http://www.geomoose.org/ GeoTux. (3 de Enero de 2012). Comparación de clientes web de servicios web geográficos v.6. Obtenido de http://geotux.tuxfamily.org/index.php/component/k2/item/291-comparacionclientes-web-v6 GFK. (17 de Febrero de 2015). GLOBAL SMARTPHONE SALES EXCEED 1.2B UNITS IN 2014. Obtenido de PRESS RELEASES : http://www.gfk.com/news-and-events/press-room/pressreleases/pages/global-smartphone-sales-exceed-1-2b-units-in-2014.aspx GFK. (s.f.). GFK smartphone sales based on point-of-sale (POS). Obtenido de http://www.gfk.com/news-and-events/press-room/pressreleases/pages/global-smartphone-sales-exceed-1-2b-units-in-2014.aspx Glonass.it. (s.f.). GLObal NAvigation Satellite System. Obtenido de http://www.glonass.it/glonass-vantaggi.aspx GOPI, S. (2008). Advanced Surveying: Total Station, GIS and Remote Sensing (Segunda Edición ed.). India: Pearson Education. Heron-mc. (2011). Web Mapping Made Easy. Obtenido de http://heron-mc.org/ IDC, International Data Corporation. (14 de Agosto de 2014). Worldwide Smartphone Shipments Edge Past 300 Million Units in the Second Quarter; Android and iOS Devices Account for 96% of the Global Market, According to IDC. Obtenido de http://www.idc.com/getdoc.jsp?containerId=prUS25037214 INEC. (2013). Ecuador en cifras. Obtenido de Tecnologías de la Información y Comunicaciones (TIC´S) 2013: http://www.ecuadorencifras.gob.ec/documentos/webinec/Estadisticas_Sociales/TIC/Resultados_principales_140515.Tic.pdf jQuery mobile. (2015). A Touch-Optimized Web Framework. Obtenido de https://jquerymobile.com/ La Hora. (14 de Agosto de 2013). Reporte. Recuperado el 1 de Noviembre de 2014, de Ambulancias aún no cumplen el tiempo óptimo de respuesta: http://www.lahora.com.ec/index.php/noticias/show/1101548674/1/Ambulancias_a%C3%BAn_no_cumplen_el_tiempo_%C3%B3ptimo_de_re 86 spuesta.html#.U_J93uMwDA0http://www.lahora.com.ec/index.php/noticias/s how/1101487320/-1/Se_necesitan_m%C3%A1s_ambulancias.html#.U3_Qo La Hora. (s.f.). La Central Metropolitana de Atención Ciudadana (CMAC) no se da abasto a todas las llamadas de emergencia que realizan los ciudadanos. Obtenido de Cronología: http://www.lahora.com.ec/index.php/movil/noticia/1101242891 Lcda. ESTRELLA SILVA, F. (Junio de 2005). TESIS. LINEAMIENTOS GENERALES PARA IMPLEMENTAR UNA RED DE ATENCIÓN DE EMERGENCIAS Y DESASTRES EN EL SECTOR DE LA SALUD, EN EL CANTÓN QUITO. INSTITUTO DE ALTOS ESTUDIOS NACIONALES,Quito, Pichincha, Ecuador. Obtenido de http://repositorio.iaen.edu.ec/bitstream/24000/335/1/IAEN-027-2005.pdf Leaflet. (2014). An Open-Source JavaScript Library for Mobile-Friendly Interactive Maps. Obtenido de http://leafletjs.com/ Maksim. (10 de Junio de 2013). Where does Android fragmentation hide? Obtenido de http://maksim.golivkin.eu/blog/2012/08/26/where-does-androidfragmentation-hide/ MapBender.org. (s.f.). Obtenido de http://mapbender3.org/en/what-is-mapbender3 MapFaces. (s.f.). A Library. Obtenido de http://mapfaces.codehaus.org/ Mapserver. (s.f.). Acerca de MpaServer. Obtenido de http://mapserver.org/es/about.html MapTools.org. (s.f.). ka-Map. Obtenido de http://kamap.maptools.org/index.phtml?page=home.html Ministerio de salud pública. (25 de Julio de 2013). 55 ambulancias fortalecen el sistema de movilización de emergencia en salud. Obtenido de http://www.salud.gob.ec/55-ambulancias-fortalecen-el-sistema-demovilizacion-de-emergencia-en-salud/ OCG. (16 de Noviembre de 2012). Web Map Service. Obtenido de http://www.opengeospatial.org/standards/wms OGC. (s.f.). Open Geo Spatial. Recuperado el 7 de Marzo de 2015, de http://www.opengeospatial.org/resource/products/compliant OGC, Open Geo Spatial . (s.f.). Web Feature Service. Obtenido de http://www.opengeospatial.org/standards/wfs OpenLayers. (2015). A high-performance, feature-packed library for all your mapping needs. Obtenido de http://openlayers.org/ Oracle. (24 de Marzo de 2015). Price List. Obtenido de http://www.oracle.com/us/corporate/pricing/technology-price-list-070617.pdf Oracle. (s.f.). Routing Engine. Obtenido de http://docs.oracle.com/cd/B28359_01/appdev.111/b28400/sdo_route_server.h tm#SPATL350 Osegeo Live. (2014). Web Map Service (WMS). Obtenido de http://live.osgeo.org/es/standards/wms_overview.html OSGeo Live. (2014). Web Feature Service (WFS). Obtenido de http://live.osgeo.org/es/standards/wfs_overview.html 87 OSGeoLive. (2014). Web Map Service (WMS). Obtenido de http://live.osgeo.org/es/standards/wms_overview.html PennState University. (s.f.). Evolution of Web Mapping Technology. Recuperado el 7 de Febrero de 2015, de https://www.eeducation.psu.edu/geog863/resources/l3_p3.html pgRouting. (s.f.). pgRouting extends the PostGIS / PostgreSQL geospatial database to provide geospatial routing functionality. Obtenido de http://pgrouting.org/ PhoneGap. (2015). PhoneGap is an open source framework for quickly building cross-platform mobile apps using HTML5, Javascript and CSS. Obtenido de http://phonegap.com/about/ RODRÍGUEZ H, C. E. (28 de Febrero de 2014). ATENCION PREHOSPITALARIA DE URGENCIAS. Recuperado el 4 de Enero de 2015, de http://www.aibarra.org/Guias/1-18.htm Secretaria de Salud, Estados unidos mexicanos. (13 de Agosto de 2004). MODIFICACION DE LA NORMA OFICIAL MEXICANA NOM-020-SSA21994, PRESTACION DE SERVICIOS DE. Obtenido de http://www.salud.gob.mx/unidades/cdi/nom/m020ssa294.pdf Secretaría Nacional de Administración Pública. (10 de Abril de 2008). Software Libre. Recuperado el 24 de Marzo de 2015, de http://www.administracionpublica.gob.ec/software-libre/ Sencha. (2015). Sencha Touch Build Mobile Web Apps with HTML5. Obtenido de https://www.sencha.com/products/touch/ Stackoverflow. (14 de Enero de 2014). Does iPhone/iPad use GPS and GLONASS in the same time? Can I manage them? Obtenido de http://stackoverflow.com/questions/21066296/does-iphone-ipad-use-gps-andglonass-in-the-same-time-can-i-manage-them TAHA, H. (2004). Investigación de operaciones (Séptima ed.). México: Pearson Educación. Obtenido de https://books.google.com.ec/books?id=3oHztjMSuL8C&pg=PA224&lpg=PA 224&dq=taha+investigacion+de+operaciones+dijkstra&source=bl&ots=nMA I950WHP&sig=6IqQePw8Pt21xCuvBVlPbWPRII4&hl=es419&sa=X&ei=QwocVdHFCsSIsQSxvIC4DA&ved=0CBwQ6AEwAA#v=o nepage&q=taha%20investi US Cost Guard, Navigation Center. (Septiembre de 1996). Obtenido de http://www.navcen.uscg.gov/pubs/gps/gpsuser/gpsuser.pdf USAID. (2009). Curso de Soporte Básico de Vida (CSBV). Obtenido de https://scms.usaid.gov/sites/default/files/documents/1866/MR%20%20SBV.pdf Wikipedia. (6 de Noviembre de 2005). Sistemas de información geográfica. Recuperado el 6 de Febrero de 2015, de http://es.wikipedia.org/wiki/Sistema_de_informaci%C3%B3n_geogr%C3%A 1fica#Historia_de_su_desarrollo Wikipedia. (9 de Marzo de 2013). GML. Obtenido de Geography Markup Language: http://es.wikipedia.org/wiki/Geography_Markup_Language Wikipedia. (25 de Septiembre de 2014). GPS Asistido. Obtenido de http://es.wikipedia.org/wiki/GPS_Asistido 88 Wikipedia. (23 de Agosto de 2014). KML. Obtenido de Keyhole Markup Language: http://es.wikipedia.org/wiki/KML Wikipedia. (10 de Febrero de 2015). Dispositivo móvil. Obtenido de http://es.wikipedia.org/wiki/Dispositivo_m%C3%B3vil Wikipedia. (26 de Febrero de 2015). Mapeo Web. Obtenido de http://es.wikipedia.org/wiki/Mapeo_Web Wikipedia. (26 de Marzo de 2015). Mobile operating system. Obtenido de http://en.wikipedia.org/wiki/Mobile_operating_system Wikipedia. (14 de Marzo de 2015). Sistema operativo móvil. Obtenido de http://es.wikipedia.org/wiki/Sistema_operativo_m%C3%B3vil Wikipedia. (26 de Febrero de 2015). Web Map Service. Obtenido de http://es.wikipedia.org/wiki/Web_Map_Service Windows Central. (3 de Enero de 2009). GPS vs. aGPS: A Quick Tutorial. Obtenido de http://www.windowscentral.com/gps-vs-agps-quick-tutorial Youtube (Productor), & Penn State, P. B. (Dirección). (2011). Historia de los sistemas de información geográfica [Película]. Obtenido de https://www.youtube.com/watch?v=RxBtYCUDgKA Youtube (Productor). (2012). STMicroelectronics GPS + GLONASS Simulation [Película]. Obtenido de https://www.youtube.com/watch?v=0FlXRzwaOvM 89 ANEXOS 90 UNIVERSIDAD CENTRAL DEL ECUADOR FACULTAD DE INGENIERÍA, CIENCIAS FÍSICAS Y MATEMÁTICA CARRERA DE INGENIERÍA INFORMÁTICA DISEÑO Y DESARROLLO DE UNA HERRAMIENTA WEB GEOGRÁFICA PROTOTIPO PARA APOYAR LA OPTIMIZACIÓN DE TIEMPOS DE RESPUESTA A LOS SERVICIOS DE SALUD AMBULATORIOS DENTRO DE LAS ÁREAS POBLADAS URBANAS DEL DISTRITO METROPOLITANO DE QUITO –DMQ-. MANUAL TÉCNICO AUTOR: JHONATHAN GUILLERMO VACA CABRERA TUTOR: ING. LUIS FELIPE BORJA BORJA QUITO – ECUADOR 2015 91 Contenido Introducción ............................................................................................................... 93 Diagrama de base de datos ......................................................................................... 93 Funciones para el cálculo de la ruta más corta ........................................................... 93 Función para el cálculo de la ruta más corta basado en el algoritmo de dijkstra ....... 93 Función para el cálculo las distancias más cortas a cada una de las unidades según la ubicación del evento de emergencia. .......................................................................... 96 Función para el barrido de las unidades ambulatorias disponibles en el sistema según su última posición conocida. ...................................................................................... 97 Endpoint WebSockets ................................................................................................ 98 EndPoint WebServices ............................................................................................. 102 92 Introducción El presente documento pretende orientar a los usuarios administradores del sistema sobre el funcionamiento del visor geográfico y la aplicación móvil de OPTISESA. Diagrama de base de datos Funciones para el cálculo de la ruta más corta En el diagrama de base de datos, existe una tabla llamada geo_ways con la representación topológica de la vialidad de Quito, para poder hacer los cálculos de las rutas más cortas se realizaron las siguientes funciones SQL. Función para el cálculo de la ruta más corta basado en el algoritmo de dijkstra /** 93 * Función para el cálculo de la ruta más corta basado en el algoritmo de dijkstra * con direccionalidad de vías desde un punto (x1 y1) a un punto (x2 y2) * georeferenciado * * Explicación detallada del objeto. * @param in tbl Campo tipo varchar para el ingreso del nombre de la tabla con las vías. * @param in x1 Latitud 1 del primer punto. * @param in y1 Longitud 1 del primer punto. * @param in x2 Latitud 2 del primer punto. * @param in y2 Longitud 2 del primer punto. * @param in sridTrans Proyección de transformación para el cálculo de la distancia (la unidad depende de la proyección ej srid: 32717 distancia en metros) de la columna geográfica de la tabla tbl en la geodatabase. * @return Conjunto de registros seq,gid,name,heading,distance,cost,geom. * @param out seq Número secuencial que determina cuales el orden de las trazas de vía. * @param out gid Número secuencial del registro (localización) en la tabla de vías. * @param out name Nombre conocido (cuando exista) de la traza de vía ej: Av. Mariana de Jesús. * @param out heading Ángulo de giro entre trazas de vía. * @param out distance Valor de la distancia definida en la unidad de proyección sridTrans. * @param out cost Valor del costo de tomar una determinada traza. * @param out geom Polilínea de la traza de vía calculada. * @author Guillermo Vaca (modificación función inicialmente obtenida en http://workshop.pgrouting.org/chapters/wrapper.html#simplifiedinput-parameters-and-geometry-output) * @version 1.0 20/Marzo/2015 */ CREATE OR REPLACE FUNCTION pgr_AtoBoptimizado( IN tbl varchar, IN x1 double precision, IN y1 double precision, IN x2 double precision, IN y2 double precision, IN sridTrans integer, OUT seq integer, OUT gid integer, OUT name text, OUT heading double precision, OUT distance double precision, OUT cost double precision, OUT geom geometry ) RETURNS SETOF record AS $BODY$ DECLARE sqltext text; rec record; source integer; target integer; 94 point integer; BEGIN -- Encontrar el nodo más cercano EXECUTE 'SELECT id::integer FROM vertices_tmp ORDER BY the_geom <-> ST_GeometryFromText(''POINT(' || x1 || ' ' || y1 || ')'',4326) LIMIT 1' INTO rec; source := rec.id; EXECUTE 'SELECT id::integer FROM vertices_tmp ORDER BY the_geom <-> ST_GeometryFromText(''POINT(' || x2 || ' ' || y2 || ')'',4326) LIMIT 1' INTO rec; target := rec.id; -- Ruta más corta con el algoritmo de dijkstra(TODO: limit extent by BBOX) seq := 0; sqltext := 'SELECT gid, the_geom, name, cost, ST_Length(ST_Transform(the_geom,'|| sridTrans ||')) AS distance,source, target, ST_Reverse(the_geom) AS flip_geom FROM ' || 'pgr_dijkstra(''SELECT gid as id, source::int, target::int, ' || 'length::double precision AS cost,' || 'reverse_cost::double precision AS reverse_cost FROM ' || quote_ident(tbl) || ''', ' || source || ', ' || target || ' , true, true), ' || quote_ident(tbl) || ' WHERE id2 = gid ORDER BY seq'; -- Remember start point point := source; FOR rec IN EXECUTE sqltext LOOP -- Flip geometry (if required) IF ( point != rec.source ) THEN rec.the_geom := rec.flip_geom; point := rec.source; ELSE point := rec.target; END IF; -- Calculate heading (simplified) EXECUTE 'SELECT degrees( ST_Azimuth( ST_StartPoint(''' || rec.the_geom::text || '''), ST_EndPoint(''' || rec.the_geom::text || ''') ) )' INTO heading; -- Return record seq := seq + 1; 95 gid := rec.gid; name := rec.name; cost := rec.cost; distance:= rec.distance; geom := rec.the_geom; RETURN NEXT; END LOOP; RETURN; END; $BODY$ LANGUAGE 'plpgsql' VOLATILE STRICT; Función para el cálculo las distancias más cortas a cada una de las unidades según la ubicación del evento de emergencia. /** * Función para el cálculo de la ruta más corta basado en el algoritmo de dijkstra * con direccionalidad de vías desde un punto (x1 y1) de la emergencia a cada una de las ambulancias * * Explicación detallada del objeto. * @param in x1 Latitud 1 del primer punto. * @param in y1 Longitud 1 del primer punto. * @return Conjunto de registros seq,gid,vertice,vert_geom,geom. * @param out seq Número secuencial que determina cuales el orden de las trazas de vía. * @param out gid Número secuencial del registro (localización) en la tabla de vías. * @param out vertice. Campo con el id del vértice de vía disponible en la tabla de vías. * @param out vert_geom Vertice de calle más cercano al punto de ubicación de la ambulancia. * @param out geom Punto donde se ubica cada ambulancia. * @author Guillermo Vaca (modificación función inicialmente obtenida en http://workshop.pgrouting.org/chapters/wrapper.html#simplifiedinput-parameters-and-geometry-output) * @version 1.0 20/Marzo/2015 */ CREATE OR REPLACE FUNCTION optisesa_distancia_rutas(IN x1 double precision, IN y1 double precision, OUT seq integer, OUT gid integer, OUT vertice integer, OUT vert_geom geometry, OUT geom geometry, OUT distancia double precision) RETURNS SETOF record AS $BODY$ DECLARE sqltext text; rec record; vert record; dist double precision; BEGIN -- Consulta para obtener las unidades disponibles en el sistema(TODO: limit extent by BBOX) seq := 0; sqltext := 'SELECT * FROM optisesa_unidades_disponibles()'; FOR rec IN EXECUTE sqltext 96 LOOP --consulta para sumar la distancia de cada uno de los dispositivos al evento de emergencia EXECUTE 'select sum(distance)::double precision from pgr_AtoBlistado(''geo_ways'','|| rec.vertice || ','|| x1 ||','|| y1 ||',32717)' INTO distancia; -- Return record seq := seq + 1; gid := rec.gid; vertice := rec.vertice; vert_geom := rec.vert_geom; geom := rec.geom; RETURN NEXT; END LOOP; RETURN; END; $BODY$ LANGUAGE plpgsql VOLATILE STRICT COST 100 ROWS 1000; ALTER FUNCTION optisesa_distancia_rutas(double precision, double precision) OWNER TO "user"; Función para el barrido de las unidades ambulatorias disponibles en el sistema según su última posición conocida. CREATE OR REPLACE FUNCTION optisesa_unidades_disponibles(OUT seq integer, OUT gid integer, OUT vertice integer, OUT vert_geom geometry, OUT geom geometry) RETURNS SETOF record AS $BODY$ DECLARE sqltext text; rec record; vert record; BEGIN -- Select para obtener la última ubicación conocida de un dispositivo seq := 0; sqltext := 'SELECT * FROM (SELECT * FROM (SELECT v1.*,u.disponible,u.asignado,u.ws_session FROM (SELECT *, time = MAX(time) OVER (PARTITION BY serial_usr) AS particion FROM geo_rastreo) v1 left join usuario u on v1.serial_usr=u.serial_usr WHERE v1.particion = true) v1 WHERE particion = true) v2 where disponible = true and asignado = false ORDER BY geom <-> ST_SetSRID(ST_MakePoint(-78.51154624322987, -0.21410415408716826 ),4326)'; FOR rec IN EXECUTE sqltext LOOP -- Ruta más corta con el algoritmo de dijkstra a cada uno de los dispositivos activos(TODO: limit extent by BBOX) EXECUTE 'SELECT id::integer,the_geom::geometry FROM vertices_tmp ORDER BY the_geom::geometry <-> ST_GeometryFromText(''POINT(' 97 || rec.longitud_x || ' ' || rec.latitud_y || ')'',4326) LIMIT 1' INTO vert; -- Return record seq := seq + 1; gid := rec.serial_usr; vertice := vert.id; vert_geom:= vert.the_geom; geom := rec.geom; RETURN NEXT; END LOOP; RETURN; END; $BODY$ LANGUAGE plpgsql VOLATILE STRICT COST 100 ROWS 1000; ALTER FUNCTION optisesa_unidades_disponibles() OWNER TO postgres; Endpoint WebSockets package ec.edu.uce.optisesa.websocket; import import import import import import import java.io.IOException; java.sql.Connection; java.sql.PreparedStatement; java.sql.ResultSet; java.util.Collections; java.util.HashSet; java.util.Set; import import import import import import import import import import javax.naming.Context; javax.naming.InitialContext; javax.naming.NamingException; javax.websocket.CloseReason; javax.websocket.EncodeException; javax.websocket.OnClose; javax.websocket.OnMessage; javax.websocket.OnOpen; javax.websocket.Session; javax.websocket.server.ServerEndpoint; import org.json.JSONException; import org.json.JSONObject; import com.exco.jdbc.Conexion; //Tag @ServerEndpoint define a esta clase para el manejo de la aplicación (mensajes) @ServerEndpoint("/wss_optisesa") public class MovilWS { // Propiedades para la conexión con la base de datos String driver; String connectString; String database; String user; String password; String port; 98 String url; String schema; // función para realizar la conexión con la base de datos private Conexion obtenerDB(String dbNumber) { try { // Accesa a las variables de entorno configuradas en el archivo // web.xml Context env = (Context) new InitialContext() .lookup("java:comp/env"); // asigna las propiedades para conexión con la base de datos this.driver = (String) (env.lookup("rest.dbdriver" + dbNumber)); this.connectString = (String) (env.lookup("rest.connectstring" + dbNumber)); this.database = (String) (env.lookup("rest.database" + dbNumber)); this.user = (String) (env.lookup("rest.dbuser" + dbNumber)); this.password = (String) (env.lookup("rest.dbpass" + dbNumber)); this.port = (String) (env.lookup("rest.dbport" + dbNumber)); this.url = (String) (env.lookup("rest.dburl" + dbNumber)); this.schema = (String) (env.lookup("rest.dbschema" + dbNumber)); } catch (NamingException e) { // TODO Auto-generated catch block e.printStackTrace(); } // establece la conexión con la base de datos Conexion conexion = new Conexion(driver, connectString + url + ":" + port + "/" + database, user, password); // la función retorna la conexión con la base de datos return conexion; } private static Set<Session> peers = Collections .synchronizedSet(new HashSet<Session>()); // Función para el manejo de difusión de mensajes según el criterio de // consulta de la aplicación @OnMessage public void broadcast(String message, Session session) throws IOException { // System.out.println("broadcast: " + message); try { JSONObject jsonObject = new JSONObject(message); switch (jsonObject.getString("accion")) { case "conexion": // ejecución de la acción ejecución al conectar eventoConexion(new JSONObject(jsonObject.getString("usuario")), true, session.getId()); 99 break; case "tracking": // ejecución del evento tracking, actualiza la posición actual // del dispositivo en la BD eventoTracking( new JSONObject(jsonObject.getString("posicion")), new JSONObject(jsonObject.getString("usuario"))); break; case "asignar": // ejecuta la asignación de ruta para un dispositivo específico eventoAsignarRuta(jsonObject.getLong("usuarioId"), new JSONObject(jsonObject), message); break; default: break; } } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } } // Función para actualizar los dispositivos conectados y asignando el id de // sesión para el envío de mensajes personalizados public void eventoConexion(JSONObject jsonObject, boolean conexion, String sessionId) { try { Connection con = obtenerDB("0").conectar(); String query = "UPDATE USUARIO SET DISPONIBLE = ?, WS_SESSION = ? WHERE serial_usr = ?"; PreparedStatement p = null; p = con.prepareStatement(query); p.setBoolean(1, conexion); p.setString(2, sessionId); p.setLong(3, jsonObject.getLong("serial_usr")); p.executeUpdate(); con.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } // Función para actualizar los dispositivos al perder la conexión con el // websocket public void eventoDesconexion(String sessionId) { try { Connection con = obtenerDB("0").conectar(); String query = "UPDATE USUARIO SET DISPONIBLE = FALSE, WS_SESSION = NULL WHERE WS_SESSION = ?"; 100 PreparedStatement p = null; p = con.prepareStatement(query); p.setString(1, sessionId); p.executeUpdate(); con.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void eventoTracking(JSONObject posicion, JSONObject usuario) { try { Connection con = obtenerDB("0").conectar(); String query = "INSERT INTO GEO_RASTREO (serial_usr,longitud_x, latitud_y, time, geom, precision) values " + "(?,?,?,to_timestamp(?/1000),ST_SetSRID(ST_MakePoint(?, ?),4326),?);"; PreparedStatement p = null; p = con.prepareStatement(query); p.setLong(1, usuario.getLong("serial_usr")); p.setString(2, posicion.getString("longitud")); p.setString(3, posicion.getString("latitud")); p.setLong(4, posicion.getLong("timestamp")); p.setDouble(5, posicion.getDouble("longitud")); p.setDouble(6, posicion.getDouble("latitud")); p.setDouble(7, posicion.getDouble("precision")); p.execute(); con.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } //Función para el evento de asignación de ruta a un usuario especificado public void eventoAsignarRuta(Long usuarioId, JSONObject jsonObject, String mensaje) { try { Connection con = obtenerDB("0").conectar(); String query = "Select ws_session from Usuario where serial_usr=?"; PreparedStatement p = null; p = con.prepareStatement(query); p.setLong(1, usuarioId); ResultSet rs = p.executeQuery(); while (rs.next()) { enviarMensaje(rs.getString("ws_session"), mensaje); } con.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } 101 // Función para el envio del mensaje al dispositivo especifico por su id public void enviarMensaje(String id, String mensaje) throws IOException, EncodeException { for (Session peer : peers) { if (String.valueOf(peer.getId()).equals(id)) { peer.getBasicRemote().sendObject(mensaje); } } } // Función para almacenar el websocket conectado @OnOpen public void myOnOpen(Session peer) { System.out.println("WebSocket opened: " + peer.getId()); peers.add(peer); } // Función para almacenar el websocket conectado @OnClose public void myOnClose(CloseReason reason, Session peer) { System.out.println("Closing a WebSocket due to " + reason.getReasonPhrase()); eventoDesconexion(peer.getId()); peers.remove(peer); } } EndPoint WebServices package ec.edu.uce.optisesa.rest; import import import import import java.io.ByteArrayInputStream; java.io.InputStream; java.sql.Connection; java.sql.PreparedStatement; java.sql.ResultSet; import import import import import import import import import import import import import javax.naming.Context; javax.naming.InitialContext; javax.naming.NamingException; javax.ws.rs.FormParam; javax.ws.rs.GET; javax.ws.rs.POST; javax.ws.rs.Path; javax.ws.rs.PathParam; javax.ws.rs.Produces; javax.ws.rs.QueryParam; javax.ws.rs.core.MediaType; javax.ws.rs.core.Response; javax.ws.rs.core.Response.ResponseBuilder; import import import import org.json.JSONArray; org.json.JSONException; org.json.JSONObject; org.postgresql.util.Base64; 102 import com.exco.jdbc.Conexion; import com.exco.jsonxml.utils.ResultSetUtil; //Tag @Path define la url del servicio REST //Tag @Get define el tipo de petición HTTP //Tag @Produces define el MIME type de retorno en el servicio REST @Path("/ws_optisesa") public class ServiciosGeoJson { // Propiedades para la conexión con la base de datos String driver; String connectString; String database; String user; String password; String port; String url; String schema; // función para realizar la conexión con la base de datos private Conexion obtenerDB(String dbNumber) { try { // Accesa a las variables de entorno configuradas en el archivo // web.xml Context env = (Context) new InitialContext() .lookup("java:comp/env"); // asigna las propiedades para conexión con la base de datos this.driver = (String) (env.lookup("rest.dbdriver" + dbNumber)); this.connectString = (String) (env.lookup("rest.connectstring" + dbNumber)); this.database = (String) (env.lookup("rest.database" + dbNumber)); this.user = (String) (env.lookup("rest.dbuser" + dbNumber)); this.password = (String) (env.lookup("rest.dbpass" + dbNumber)); this.port = (String) (env.lookup("rest.dbport" + dbNumber)); this.url = (String) (env.lookup("rest.dburl" + dbNumber)); this.schema = (String) (env.lookup("rest.dbschema" + dbNumber)); } catch (NamingException e) { // TODO Auto-generated catch block e.printStackTrace(); } // establece la conexión con la base de datos Conexion conexion = new Conexion(driver, connectString + url + ":" + port + "/" + database, user, password); // la función retorna la conexión con la base de datos return conexion; } // Función para construir un vector de objetos JSON con el resultado de una 103 // consulta private JSONArray obtenerJson(PreparedStatement p) throws Exception { ResultSet rs = p.executeQuery(); return ResultSetUtil.convertToJSON(rs); } // Función para construir un vector de objetos GeoJSON con el resultado de // una consulta private JSONArray obtenerGeoJson(PreparedStatement p, int srid) throws Exception { ResultSet rs = p.executeQuery(); return ResultSetUtil.convertToGeoJSON(rs, 0, srid); } // Función para el calculo del tiempo de respuesta, es usado para medir el // tiempo que tarda una solicitud en ser respondida private void tiempoRespuesta(long startTime, long endTime) { System.out.println(endTime - startTime); } // Función para retornar los objetos JSON solicitados en la petición REST, // en caso de existir una variable callback se retorna una variable // javascript. (Facilita el uso de Cross Domain en la app) private String hasCallback(JSONArray json, String callback) { if (callback != null) return (callback + "(" + json.toString() + ");"); else return json.toString(); } // Método para probar si el servicio REST esta en funcionamiento @GET @Produces(MediaType.TEXT_PLAIN) public String sayPlainTextHello() { return "REST OPTISESA"; } // Método para verificar el acceso a la aplicación // El tag @QueryParam lee las variables que provienen de la petición HTTP @GET @Path("login") @Produces({ "text/javascript", "application/x-json" }) public String login(@QueryParam("user") String user, @QueryParam("pass") String pass, @QueryParam("callback") String callback) { JSONArray json = null; JSONObject jo = new JSONObject(); long startTime = System.currentTimeMillis(); try { // Realiza la conexión a la base de datos Connection con = obtenerDB("0").conectar(); // Construye el query 104 String query = "SELECT serial_usr,apellido_usr, nombre_usr, codigo_usr,disponible FROM usuario WHERE nombre_usr = ? AND clave_usr = md5(?)"; // Crea la sentencia preparada PreparedStatement p = null; p = con.prepareStatement(query); // asigna los parámetros a la consulta p.setString(1, user); p.setString(2, pass); // retorna el objeto JSON json = obtenerJson(p); // cierra la conexión con la BD con.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } try { if (json.length() > 0) { json.getJSONObject(0).put("acceso", true); } else { jo.put("acceso", false); json.put(jo); } } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } tiempoRespuesta(startTime, System.currentTimeMillis()); return hasCallback(json, callback); } // Método para obtener el GeoJSON de la base de datos correspondiente a la // ruta más corta desde la ubicación actual (x1,y1) de una unidad a la // ubicación asignada (x2,y2). // El parámetro srid se debe colocar 32717 para obtener las distancias de // las rutas en kilómetros. @GET @Path("ruta/{x1}/{y1}/{x2}/{y2}/{srid}") @Produces({ "text/javascript", "application/x-json" }) public String ruta(@PathParam("x1") Double x1, @PathParam("y1") Double y1, @PathParam("x2") Double x2, @PathParam("y2") Double y2, @PathParam("srid") Integer srid, @QueryParam("callback") String callback) { JSONArray json = null; long startTime = System.currentTimeMillis(); try { // Realiza la conexión a la base de datos Connection con = obtenerDB("0").conectar(); // Construye el query String query = "SELECT ST_AsGeoJSON(ST_Transform(geom,?)),name ,distance, heading, cost FROM pgr_AtoBoptimizado(?, ?, ?, ?, ?, ?)"; PreparedStatement p = null; 105 p = con.prepareStatement(query); p.setInt(1, srid); p.setString(2, "geo_ways"); p.setDouble(3, x1); p.setDouble(4, y1); p.setDouble(5, x2); p.setDouble(6, y2); p.setInt(7, srid); // retorna el objeto GeoJSON json = obtenerGeoJson(p, srid); con.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } tiempoRespuesta(startTime, System.currentTimeMillis()); return hasCallback(json, callback); } // Función que retorna el listado de unidades más cercanas al punto de // emergencia (x1,y1) ordenadas de mayor a menor distancia @GET @Path("unidades/{x1}/{y1}") @Produces({ "text/javascript", "application/x-json" }) public String unidadesDisponibles(@PathParam("x1") Double x1, @PathParam("y1") Double y1, @QueryParam("callback") String callback) { JSONArray json = null; long startTime = System.currentTimeMillis(); try { // Realiza la conexión a la base de datos Connection con = obtenerDB("0").conectar(); // Construye el query String query = "select v1.gid as serial_usr,u.nombre_usr,u.codigo_usr,v1.distancia/1000 as distancia_km from optisesa_distancia_rutas(?,?) v1 left join usuario u on v1.gid=u.serial_usr order by distancia asc"; PreparedStatement p = null; p = con.prepareStatement(query); p.setDouble(1, x1); p.setDouble(2, y1); json = obtenerJson(p); con.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } tiempoRespuesta(startTime, System.currentTimeMillis()); return hasCallback(json, callback); } // Función que retorna las capas configuradas en la base de datos @GET @Path("layers/{sistema}") @Produces({ "text/javascript", "application/x-json" }) public String obtenerCapas(@QueryParam("var") String var, @QueryParam("callback") String callback, @PathParam("sistema") String sistema) { JSONArray json = null; 106 long startTime = System.currentTimeMillis(); try { // Realiza la conexión a la base de datos Connection con = obtenerDB("0").conectar(); // Construye el query String query = "SELECT cm.fromwmslayer,cms.label_ctms AS etiquetasubroot, cms.iconcls_ctms AS iconsubroot, cmn.label_ctmn AS etiquetaroot, cmn.iconcls_ctmn AS iconroot, cm.displayinlayersw_ctm AS displayinlayer, cmn.type_ctmn AS servicio, cms.subtype_ctms AS nodo, cm.iconcls_ctm AS icon, cm.filtrocql_ctm AS cql, cm.rulesld_ctm AS rule, cm.maxresolution_ctm AS maxresol, cm.minresolution_ctm AS minresol, cm.urlficha_ctm AS urlficha, cm.capabASe_ctm AS isbASelayer, cm.label_ctm AS nombre, cm.url_ctm AS url, cm.layer_ctm AS layer, cm.format_ctm AS format, cm.transparent_ctm AS transparent, cm.alpha_ctm AS opacity, cm.visible_ctm AS visibility, cm.anio_ctm AS id, cm.idnamefields_ctm AS idnamefields, cm.idfields_ctm AS idfields FROM catalogo_mapa AS cm LEFT JOIN catalogo_mapa_nodo cmn ON cm.type_ctm = cmn.serial_ctmn LEFT JOIN catalogo_mapa_subnodo cms ON cm.subtype_ctm = cms.serial_ctms WHERE cm.mapachk_ctm=true and (cm.grupo_ctm = 0 or cm.grupo_ctm = ?) ORDER BY cmn.orden_ctmn,cms.orden_ctms,cm.orden_ctm;"; PreparedStatement p = null; p = con.prepareStatement(query); p.setInt(1, new Integer(sistema)); json = obtenerJson(p); con.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } tiempoRespuesta(startTime, System.currentTimeMillis()); if (callback != null && var == null) return (callback + "(" + json.toString() + ");"); else if (var != null) return (var + "=" + json.toString() + ";"); else return json.toString(); } // Función que permite la descarga de los data grid del visor en los // diferentes formatos geográficos @POST @Path("descarga") @Produces(MediaType.TEXT_PLAIN) public Response obtenerDescarga(@FormParam("filename") String filename, @FormParam("mime") String mime, @FormParam("data") String data, @FormParam("encoding") String encoding, @FormParam("assign_srs") String assign_srs, @FormParam("source_srs") String source_srs) { long startTime = System.currentTimeMillis(); InputStream stream = new ByteArrayInputStream(Base64.decode(data)); ResponseBuilder response = Response.ok(stream); response.type(mime); response.header("Content-Disposition", "attachment; filename=\"" + filename + "\""); 107 tiempoRespuesta(startTime, System.currentTimeMillis()); return response.build(); } } 108 UNIVERSIDAD CENTRAL DEL ECUADOR FACULTAD DE INGENIERÍA, CIENCIAS FÍSICAS Y MATEMÁTICA CARRERA DE INGENIERÍA INFORMÁTICA DISEÑO Y DESARROLLO DE UNA HERRAMIENTA WEB GEOGRÁFICA PROTOTIPO PARA APOYAR LA OPTIMIZACIÓN DE TIEMPOS DE RESPUESTA A LOS SERVICIOS DE SALUD AMBULATORIOS DENTRO DE LAS ÁREAS POBLADAS URBANAS DEL DISTRITO METROPOLITANO DE QUITO –DMQ-. MANUAL DE INSTALACIÓN SOFTWARE UTILIZADO AUTOR: JHONATHAN GUILLERMO VACA CABRERA TUTOR: ING. LUIS FELIPE BORJA BORJA QUITO – ECUADOR 2015 109 Contenido Introducción ............................................................................................................. 111 Requerimientos mínimos: ........................................................................................ 111 Instalación de la base de datos Postgres y Postgis ................................................... 111 Instalación PostGIS y pgRouting ............................................................................. 113 Instalación Eclipse Luna. ......................................................................................... 121 Configuración Eclipse-JBoss ................................................................................... 122 Instalar Jboss-Tools ........................................................................................... 122 Agregar el server a Eclipse ............................................................................... 124 Iniciar el servidor .............................................................................................. 125 Script base de datos. ................................................................................................. 126 Crear Base de datos ........................................................................................... 126 Instalar la extensión de postgis y pgrouting ...................................................... 126 Cargar el backup....................................................................................................... 127 Instalación y configuración de Geoserver. ............................................................... 128 Editar tabla catalogo_mapa ...................................................................................... 129 Instalación del sistema. ............................................................................................ 130 Montar el archivo .ear y el archivo .ear.dodeploy............................................ 130 optisesa_web.war .............................................................................................. 130 optisesa_ws.war ................................................................................................ 132 110 Introducción El presente documento pretende orientar a los usuarios técnicos sobre el software necesario para el funcionamiento del visor geográfico y la aplicación móvil de OPTISESA: Requerimientos mínimos: Hardware Espacio mínimo de disco duro 10GB Memoria mínima disponible 2GB Procesador Dual Core Software Windows 7 o superior de 32 bits o 64 bits Jboss Wildfly 8.2 Postgres 9.2 Postgis 2.x Geoserver 2.4.3 Java SDK 7 Red (Internet) Conexión de red a internet DVD con los instaladores Es necesario el DVD con los instaladores disponibles en la carpeta: “5 Software usado en la aplicación” Instalación de la base de datos Postgres y Postgis Según el sistema operativo descargar la versión de PostgreSQL necesaria, en el caso de este manual se hace uso del instalador para Windows de 32bits provisto en el CD: 1. Ejecutar el archivo postgresql-9.2.10-2-windows.exe 2. Se puede cambiar la ubicación o si está de acuerdo con la ubicación sugerida por el instalador dejarla sin modificación y presionar siguiente. 111 3. Ingresar el password del super usuario y luego confirmarlo. 4. Ingresar puerto o si está de acuerdo con el sugerido dejarla sin modificación y presionar siguiente. 5. Seleccione el idioma o dejarlo por defecto y presionar siguiente. 6. Presionar el botón instalar para iniciar la instalación. 112 Instalación PostGIS y pgRouting Una vez finalizada la instalación de PostgreSQL aparecerá una ventana para ejecutar a “Stack Builder” al finaliza, marcamos la opción y esperamos a que se abra el dialogo de Stack Builder. En caso de que se haga la instalación a posterior, se debe ejecutar “Stack Builder” desde el menú de inicio > todos los programas > PostgreSQL 9.2 > Application Stack Builder 113 1. Una vez abierto el cuadro de diálogo de Stack Builder seleccionar el instancia de PostgreSQL que se acaba de instalar en el equipo. 2. Desplegamos las sub opciones de la opción “Spatial Extensions”, seleccionar la opción que diga PostGIS bundle para la versión (32/64bits) de la base de datos, para este manual se considera la versión de 32 bits y presionar siguiente. 3. Seleccionar el directorio donde se descargará el archivo del instalador de PostGIS 4. Inmediatamente la descarga ha finalizado, presionar el botón siguiente y aceptar los términos de licencia de PostGIS y pgRouting 114 5. Si fuese necesario se puede instalar una base de datos geográfica de prueba durante la instalación, por último presionar siguiente y esperar a que culmine la instalación. 6. Verificar que las extensiones necesarias se han instalado correctamente, tras conectarse al servidor de base de datos en una consola SQL ejecutar la siguiente consulta: select * from pg_available_extensions where name like 'p%' order by name; 115 Configuraciones extras: 1. Ir al directorio de instalación de PostgreSQL, y abrir el archivo pg_hba.conf X:\<directorio_PostgreSQL>\9.1\data\pg_hba.conf 2. Agregar el rango de direcciones a las cuales se va a permitir el acceso a la base de datos (en caso de necesitar acceso desde otro host) 116 Instalación y configuración de Java JDK 7. 1. Descargar el JDK de java para la versión del sistema operativo usado, en el caso de este manual se proporciona el instalador para Windows de 32bits. 2. Ejecutar el instalador, presionar siguiente 117 3. Esperar a que la instalación termine 4. Copiar a la ubicación donde se instaló el JDK de JAVA y configurar la variable de entorno en Windows. 118 5. Abrir la ventana de diálogo de las propiedades del sistema, para ello ir al icono Equipo > clic derecho > propiedades > Configuración avanzada del sistema. 6. Seleccionar “Variable de entorno …”, en la sección variables del sistema presionar el botón “nueva …”. Llenar el nombre de la variable con 119 JAVA_HOME y pegar la ubicación de la instalación del JDK de JAVA, presione “Aceptar” para guardar la variable. 7. Buscar la variable “path” y editarla o crearla en el caso que no existiera, aumentar al final la siguiente línea: ;%JAVA_HOME%\bin Instalación y configuración de Jboss Wildfly. 1. Extraer el archivo tesis_wildfly-8.2.0.Final.zip en cualquier ubicación. 2. Una vez que se extrajo la carpeta wildfly-8.2.0.Final ingresar a la carpeta bin. 120 3. En dicha carpeta ejecutar (con la línea de comandos CMD) la siguiente línea: Standalone.bat –b 0.0.0.0 4. Se debe verificar que la siguiente línea en la consola para saber que WildFly se ha ejecutado sin problemas. WildFly 8.2.0.Final "Tweek" started in 16246ms - Started Instalación Eclipse Luna. 1. Copiar el contenido de la carpeta comprimida eclipse-java-luna-SR2win32.zip en cualquier ubicación. 2. Abrir la ubicación donde estaba la carpeta comprimida y ejecutar el programa “eclipse.exe”. 121 3. Seleccionar una ubicación para el espacio de trabajo y esperar a que se abra el programa. Configuración Eclipse-JBoss Instalar Jboss-Tools Ir a opción ayuda y seleccionar “eclipse marketplace” 122 Escribir Jboss tolos, seleccionar la opción para el IDE de eclipse e instalarlo 123 Agregar el server a Eclipse 1. En la pantalla principal de Eclipse ir a la opción Window, escoger Show View y seleccionar la opción Other. 2. Seleccione Server->JBoss Server View y hacer clic en OK 3. Sobre la vista de JBoss Server View haga clic derecho y seleccione new>Server 124 Iniciar el servidor En la pestaña Servers seleccionamos el servidor agregado, damos clic derecho en Start. 125 Script base de datos. Crear Base de datos Crear una nueva base de datos en el motor de Base de Datos postgresql. Instalar la extensión postgis y pgrouting en la base de datos. Instalar la extensión de postgis y pgrouting Se abrirá la siguiente ventana Escribir las siguientes líneas: create extension postgis; 126 create extension pgrouting; Verificar que la consulta se ejecute sin problemas Cargar el backup El backup ha sido generado de una versión postgreSQL 9.2.1 Seleccionar la base de datos creada y click botón derecho y seleccionar la opción restore del pgAdmin. 127 Seleccionar el backup “optisesa_tesis.backup” que se encuentra en la carpeta “backup base de datos”. Esperar a que termine la restauración de la BD. Instalación y configuración de Geoserver. 1. Abrir la carpeta standalone del servidor WildFly, copiar los archivos geoserver.war y geoserver.war.dodeploy X:\wildfly-8.2.0.Final\standalone\deployments 2. Una vez que el archivo geoserver.war.dodeploy ha cambiado geoserver.war.deployed abrir el navegador y verificar que se ha deployado correctamente ingresando http://<hostname_o_ip_host>:8081/geoserver 128 a la url Identificarse con las credenciales: Nombre de usuario “admin” y contraseña “exco2014”. 3. Una vez logeado del panel lateral izquierdo seleccionar “almacenes de datos” 4. Seleccionar el nombre del almacén “AHISS” y “optisesa_tesis”. Editar los parámetros de conexión con las credenciales de la base de datos de cada almacén, activar la opción habilitado y guardar. Editar tabla catalogo_mapa Conectarse a la base de datos, abrir una consola SQL y ejecutar: 129 update catalogo_mapa set url_ctm = 'http://<host_ip>:<puerto>/geoserver/ahiss/wms' where url_ctm = 'http://186.101.170.100:8081/geoserver/ahiss/wms'; update catalogo_mapa set url_ctm = 'http://<host_ip>:<puerto>/geoserver/ahiss/wms' where url_ctm = 'http://186.101.170.100:8081/geoserver/optisesa_tesis/wms'; Instalación del sistema. Montar el archivo .ear y el archivo .ear.dodeploy Copiar el archivo optisesa_tesisEAR.ear en la carpeta deployments que se encuentra en wildfly-8.2.0.Final\standalone\deployments Abrir la carpeta optisesa_tesisEAR.ear, internamente se encuentran dos carpetas optisesa_web.war y optisesa_ws.war. optisesa_web.war Modificar el archivo index.html que se encuentra en D:\servidores\wildfly8.2.0.Final\standalone\deployments\optisesa_tesisEAR.ear\optisesa_web.war\visor_o ptisesa Modificar la siguiente línea con los valores del servidor de aplicaciones <script type="text/javascript" src="http://<host_o_ip_servidor>:<puerto>/optisesa_ws/rest/ws_optise sa/layers/2?var=capasIniciales"></script> 130 Editar los archivos JavaScript app.js. D:\servidores\wildfly8.2.0.Final\standalone\deployments\optisesa_tesisEAR.ear\optisesa_web.war\visor_o ptisesa\js\optisesa app.js -> cambiar las líneas siguientes con el valor de la IP correspondientes. 4 5 6 7 8 9 10 11 12 13 14 15 16 16 18 19 20 21 22 23 //url del servidor de aplicaciones var urlServer= "http://186.101.170.100"; //url del servidor de mapas en internet var urlServidorGeoServer= "http://186.101.170.100"; //proxy para acceso crossdomain en jsp var urlProxy= "proxy.jsp?";//"proxy.php?url="; // //url del servidor de mapas en internet var urlGeoserver243= urlServidorGeoServer + ":8895/geoserver"; //url para la impresión de mapas var urlMapfishPrint=urlServer+':8081/ahiss/print/pdf'; //url para los servicios rest var urlServerRest = urlServer+":8081/optisesa_ws/rest/ws_optisesa/"; //url para los servicios rest de descarga var serviceUrl=urlServerRest+'descarga'; //url para los websockets var ipWS = "186.101.170.100"; //puerto websockets var puertoWS = "8081"; //uri para los websockets var wsUri = "ws://" + ipWS + ":" + puertoWS + "/optisesa_ws/wss_optisesa"; Editar los archivos JavaScript mobile-conf.js. D:\servidores\wildfly8.2.0.Final\standalone\deployments\optisesa_tesisEAR.ear\optisesa_web.war\visor_o ptisesa\js\optisesa\mobile mobile-conf.js -> cambiar las líneas siguientes con el valor de la IP correspondientes. 1 2 3 4 5 6 7 8 //ip servidor rest var ipRest = "186.101.170.100"; //puerto servidor rest var puertoRest = "8081"; //ip servidor websockets var ipWS = "186.101.170.100"; //puerto servidor websockets var puertoWS = "8081"; 131 optisesa_ws.war Modificar el archivo web.xml con un editor de texto. El archivo se encuentra en optisesa_tesisEAR.ear\optisesa_ws.war\WEB-INF Modificar los siguientes parámetros “env-entry-value” con los valores del servidor de la base de datos <env-entry> <env-entry-name>rest.database0</env-entry-name> <env-entry-type>java.lang.String</env-entry-type> <env-entry-value>optisesa_tesis</env-entry-value> </env-entry> <env-entry> <env-entry-name>rest.dbdriver0</env-entry-name> <env-entry-type>java.lang.String</env-entry-type> <env-entry-value>org.postgresql.Driver</env-entry-value> </env-entry> <env-entry> <env-entry-name>rest.dbpass0</env-entry-name> <env-entry-type>java.lang.String</env-entry-type> <env-entry-value>user</env-entry-value> </env-entry> <env-entry> <env-entry-name>rest.dbport0</env-entry-name> <env-entry-type>java.lang.String</env-entry-type> <env-entry-value>5432</env-entry-value> </env-entry> <env-entry> <env-entry-name>rest.dburl0</env-entry-name> <env-entry-type>java.lang.String</env-entry-type> <env-entry-value>172.30.1.108</env-entry-value> </env-entry> <env-entry> <env-entry-name>rest.dbuser0</env-entry-name> <env-entry-type>java.lang.String</env-entry-type> <env-entry-value>user</env-entry-value> </env-entry> Una vez finalizado las optisesa_tesisEAR.ear.dodeploy modificaciones a la copiar carpeta el archivo wildfly- 8.2.0.Final\standalone\deployments. Cuando el archivo optisesa_tesisEAR.ear.dodeploy ha cambiado de extensión a optisesa_tesisEAR.ear.deployed abrir el navegador e ingresar a la aplicación como se especifica en el manual de usuario. 132 UNIVERSIDAD CENTRAL DEL ECUADOR FACULTAD DE INGENIERÍA, CIENCIAS FÍSICAS Y MATEMÁTICA CARRERA DE INGENIERÍA INFORMÁTICA DISEÑO Y DESARROLLO DE UNA HERRAMIENTA WEB GEOGRÁFICA PROTOTIPO PARA APOYAR LA OPTIMIZACIÓN DE TIEMPOS DE RESPUESTA A LOS SERVICIOS DE SALUD AMBULATORIOS DENTRO DE LAS ÁREAS POBLADAS URBANAS DEL DISTRITO METROPOLITANO DE QUITO –DMQ-. MANUAL DE EJECUCIÓN PROGRAMA FUENTE AUTOR: JHONATHAN GUILLERMO VACA CABRERA TUTOR: ING. LUIS FELIPE BORJA BORJA QUITO – ECUADOR 2015 133 Contenido Introducción ............................................................................................................. 135 Requerimientos mínimos: ........................................................................................ 135 Importar el proyecto ................................................................................................. 135 134 Introducción El presente documento pretende orientar a los usuarios técnicos sobre el software necesario para el funcionamiento del visor geográfico y la aplicación móvil de OPTISESA: Requerimientos mínimos: Red (Internet) Conexión de red a internet DVD con los instaladores Seguir los pasos del manual de instalación del software utilizado. Es necesario el DVD con los instaladores disponibles en la carpeta: “3 Software usado en la aplicación” Importar el proyecto En el panel izquierdo del IDE Eclipse, click derecho -> Import -> Import Seleccionamos la opción existing projects into workspace 135 Seleccionar el programa fuente optisesa_tesisEAR, aceptar y finalizar la importación 136 Después de culminar con el paso anterior, modificar los archivos web.xml del proyecto optisesa_ws y los archivos de configuración javascript de optisesa_web de la misma manera como se expone en el manual de instalación del software utilizado en el literal “Instalación del sistema” Por último para ejecutar el código fuente en el servidor wildfly, ir a la vista de servidores, clic derecho y seleccionar la opción “add and remove”. 137 Seleccionar el EAR optisesa_tesisEAR, importarlo y finalizar. Automaticamente wildfly empezará a deployar el EAR. 138
© Copyright 2024 ExpyDoc