SIG para dispositivos móviles de la Junta de Extremadura Alumno: ALBERTO ROMEU Director empresa: MIGUEL MONTESINOS Tutor UPV: VICENTE PELECHANO
Índice Introducción Contexto Análisis requisitos Arquitectura J2ME (Java para dispositivos móviles) LWUIT (Light Weight User Interface Toolkit)
Índice (II) Desarrollo de la aplicación Casos de uso de cartografía Casos de uso de rutas Casos de uso de puntos de interés Casos de uso de GPS Despliegue Conclusiones Demo
Introducción GISDispositivos móviles
Introducción - Objetivo Visor cartografía Extremadura + Rutas + POI + GPS
Introducción - Objetivo Que funcione en muchos dispositivos (teléfonos, smartphone, blackberry, etc.)
Introducción - Retos Conocer tecnología: J2ME, CLDC, LWUIT, índices espaciales, GIS, GPS, WMS, GeoJSON... Desarrollar para dispositivos móviles Poca memoria Poca capacidad de procesamiento Desarrollar a tiempo: Fecha límite
Contexto Adaptación del SIG de la Junta de Extremadura: Consejería de Cultura y Turismo Difundir conocimiento sobre recursos turísticos y culturales a través del Software Libre Prodevelop + Igo software + GeoDatum + Software Colaborativo Financiado con fondos FEDER
Contexto
Análisis de requisitos Un único actor: TURISTA 4 bloques: Casos de uso de Cartografía Casos de uso de Rutas Casos de uso de puntos de interés (POI) Casos de uso de GPS
Análisis de requisitos - Casos de uso de Cartografía Navegar mapa Desplazar (4 direcciones) Zoom más Zoom menos Centrar mapa GPS Cualquier punto (Geometría)
Análisis de requisitos - Casos de uso de Rutas Establecer inicio Establecer fin Establecer paso Eliminar punto paso Calcular Anular Selección tipo ruta: a pie o en coche Obtener indicaciones Selección puntos ruta
Análisis de requisitos - Casos de uso de Puntos de interés Mostrar POI Buscar POI Consultar información
Análisis de requisitos - Casos de uso de GPS Obtener localización Detener GPS
Arquitectura
J2ME – Java para móviles Configuración CLDC 1.1 Coma flotante Perfil MIDP 2.0 Paquetes opcionales JSR-75 (Ficheros) JSR-172 (Web services) JSR-179 (Location API)
J2ME – Java para móviles Fragmentación de dispositivo ¿Cómo evitar la fragmentación? J2ME Polish (Framework Open source) Sun LWUIT Open source (Objetivo: 1 solo jar) Compatibilidad vs Complejidad: Buenas prácticas No se puede soportar TODOS los dispositivos
LWUIT – Light Weight User Interface Toolkit
LWUIT Swing para dispositivos móviles Light Weight Superar la fragmentación IU 1 JAR para todos los dispositivos MVC, Container + Layouts, List...
Desarrollo de la aplicación Casos de uso de cartografía Casos de uso de rutas Casos de uso de puntos de interés Casos de uso de GPS
Casos de uso de cartografía
Desarrollo de un cliente WMS-c: Web Map Service – caché Cartografía cacheada: tiles Niveles de zoom predeterminados Sólo implementamos operación GetMap
CU Cartografía - Arquitectura cliente WMS-c Map: tamaño + Eventos Layer: Capa base + vectorial Grid: Gestión de tiles Tile: Imagen + posición en píxels ViewPort: píxel coordenadas Extent == BoundingBox
CU Cartografía - ¿Qué es un Tile/Tesela? Lado: 256px BoundingBox Resolución
CU Cartografía - Grid – Gestión de tiles Cálculo de tamaño máximo en tiempo de ejecución Liberar recursos Gestión de peticiones
CU Cartografía - Caché de teselas Acelerar carga de teselas Disminuir acceso a Internet 3 niveles Memoria: Pequeña – 2 niveles de zoom Disco: Todo lo que se pueda Internet: Lo que no está en memoria ni en disco
CU Cartografía - Caché en disco Acceso a disco es lento ¿Cómo acelerar el acceso a caché? Extrapolar Quadkeys al sistema de ficheros
CU Cartografía - El proceso de pintado Se inicia en Form El mapa recorre sus capas: 1. Para la capa base: el grid recorre los tiles y pinta la imagen 2. Para la vectorial: Se recorren las geometrías y se pintan Se pinta un acetato
CU Cartografía - Navegar por el mapa
CU Cartografía - Navegar por el mapa (II)
CU Cartografía - Centrar el mapa
CU Cartografía - Centrar el mapa (II)
Multi-threading
Multi-Threading J2ME no gestiona bien hilos Patrón ThreadPool Evitar bloquear IU Cancelación de tareas Mejor gestión de hilos 1 tarea por cada operación bloqueante
Casos de uso de Rutas
Definir un modelo de geometrías Establecer una máquina de estados Comunicación con el servidor vía servicios web SOAP Seleccionar un formato de intercambio de geometrías
Casos de uso de rutas -Modelo de geometrías Colecciones de Features Feature = Geometría + metadatos Geometría = Coordenadas + pintado
Casos de uso de rutas - DTE de una ruta Ruta con 2 puntos: inicio + [paso | fin] Ruta con N puntos: inicio + n ptos paso
Casos de uso de rutas - Servicio web SOAP Interoperabilidad: Comunicación con visor web y visor móvil Buena práctica: Dispositivos móviles como clientes de servicios pesados Cliente SOAP: Se configura en tiempo de compilación
Casos de uso de rutas - GeoJSON JSON: JavaScript Object Notation. GeoJSON: Especificación JSON para codificar geometrías. Más sencillo que XML. Formato ligero: requiere poca codificación y procesamiento Fácil de parsear y hay muchas implementaciones.
Casos de uso de rutas - Cálculo de rutas Entrada: Geometría MultiPoint se convierte a GeoJSON MultiPoint Salida: GeoJSON MultiLineString se convierte a Geometría MultiLineString
Casos de uso de rutas - Cálculo de rutas
Casos de uso de rutas - Obtener indicaciones de ruta Las propiedades de la ruta se guardan en memoria Cálculo de indicaciones y giros en local Más rápido que acceder al servicio web Peor en dispositivos con poca memoria
Casos de uso de Puntos de interés
puntos de interés turístico: Categoría + Descripción + Localización Cambio en los requisitos: los POI se gestionarán en local Fuente: Fichero de texto Diseño de una estructura de datos eficiente: Quadtree Pre-procesar el fichero fuente para optimizar recursos
Casos de uso POI - Bucket PR-Quadtree Quadtree: Cada cuadrante se subdivide en 4 Criterio de división: Número de elementos > 100
Casos de uso POI - Pre-procesado 1. Recorrer el fichero fuente y llenar el Quadtree (J2SE). 2. Persistir cada hoja en un fichero 3. Persistir descripciones en ficheros diferentes: Acceso aleatorio. 4. Persistir la información del Quadtree en un árbol
Casos de uso POI - Pre-procesado (II) Recorrer el fichero fuente y llenar el Quadtree (J2SE).
Casos de uso POI - Pre-procesado (III) Persistir cada hoja en un fichero Cada fichero pocos KB Mejor leer ficheros pequeños que uno grande
Casos de uso POI - Pre-procesado (IV) Persistir descripciones en ficheros diferentes: (Pseudo)Acceso aleatorio offset / tamFichero /1024 = Fichero número 78 offset % tamFichero % 1024 = byte 128
Casos de uso POI - Pre- procesado (V) Persistir la información del Quadtree en un árbol Para una búsqueda devuelve una colección de ficheros Deserializar ficheros en background
Casos de uso POI - POI
Casos de uso POI - Tareas BackGround POI Cada tarea resuelve un caso de uso Quicksort para ordenar resultados 50 primeros resultados
Casos de uso POI - Visualizar POI
Casos de uso de GPS
Centrar el mapa en la posición del GPS JSR-179: Location API
Casos de uso de GPS – Clases Un hilo dedicado para GPS Conversión de EPSG:4326 a EPSG:23030 Com.henson.midp.Float1 1
Casos de uso de GPS – DTE
Despliegue Compilación + Preverificación Emulación + Profiler: Detectar cuellos de botella Es importante probar sobre dispositivos Ofuscación + Firma (¿Opcional?) Empaquetado (JAD + JAR)
Conclusiones ‘write once, run everywhere’ == FALSE Fragmentación de dispositivo == TRUE (aunque cada vez menos) Inconvenientes de J2ME: Modelo de seguridad: certificados + permisos Paquetes opcionales Operadoras: Tráfico Internet caro Impotencia del desarrollador
Conclusiones (II) Éxito en el desarrollo La aplicación cumple los requisitos (de manera eficiente) Funciona en muchos (no en todos) los dispositivos ○ BlackBerry, Windows Mobile (JVM - J9), Nokia S60, Sony Ericsson, etc. III Jornadas SIG Libre - Girona
Siguientes pasos gvSIG Mini Visor WMS, WMS-c, OSM Cliente YOURS Cliente NameFinder GPL Más eficiente y más compatible
Siguientes pasos (II) gvSIG Mini Android SO Libre de Google Teléfonos (HTC, Motorola, Samsung...), PDA, Tablet PC,... Basado en Java 1.4 Más recursos Mas capacidad de procesamiento GPL
GRACIAS