1 SIG para dispositivos móviles de la Junta de Extremadura Alumno: ALBERTO ROMEU ([email protected]) Director empresa: MIGUEL MONTESINOS ([email protected])[email protected] Tutor UPV: VICENTE PELECHANO ([email protected])
2 Índice Introducción Contexto Análisis requisitos Arquitectura J2ME (Java para dispositivos móviles) LWUIT (Light Weight User Interface Toolkit)
3 Í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
4 Introducción GISDispositivos móviles
5 Introducción - Objetivo Visor cartografía Extremadura + Rutas + POI + GPS
6 Introducción - Objetivo Que funcione en muchos dispositivos (teléfonos, smartphone, blackberry, etc.)
7 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
8 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
9 Contexto
10 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
11 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)
12 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
13 Análisis de requisitos - Casos de uso de Puntos de interés Mostrar POI Buscar POI Consultar información
14 Análisis de requisitos - Casos de uso de GPS Obtener localización Detener GPS
15 Arquitectura
16 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)
17 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
18 LWUIT – Light Weight User Interface Toolkit
19 LWUIT Swing para dispositivos móviles Light Weight Superar la fragmentación IU 1 JAR para todos los dispositivos MVC, Container + Layouts, List...
20 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
21 Casos de uso de cartografía
22 Desarrollo de un cliente WMS-c: Web Map Service – caché Cartografía cacheada: tiles Niveles de zoom predeterminados Sólo implementamos operación GetMap
23 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
24 CU Cartografía - ¿Qué es un Tile/Tesela? Lado: 256px BoundingBox Resolución
25 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
26 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
27 CU Cartografía - Caché en disco Acceso a disco es lento ¿Cómo acelerar el acceso a caché? Extrapolar Quadkeys al sistema de ficheros
28 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
29 CU Cartografía - Navegar por el mapa
30 CU Cartografía - Navegar por el mapa (II)
31 CU Cartografía - Centrar el mapa
32 CU Cartografía - Centrar el mapa (II)
33 Multi-threading
34 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
35 Casos de uso de Rutas
36 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
37 Casos de uso de rutas -Modelo de geometrías Colecciones de Features Feature = Geometría + metadatos Geometría = Coordenadas + pintado
38 Casos de uso de rutas - DTE de una ruta Ruta con 2 puntos: inicio + [paso | fin] Ruta con N puntos: inicio + n ptos paso
39 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
40 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.
41 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
42 Casos de uso de rutas - Cálculo de rutas
43 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
44 Casos de uso de Puntos de interés
45 20.000 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
46 Casos de uso POI - Bucket PR-Quadtree Quadtree: Cada cuadrante se subdivide en 4 Criterio de división: Número de elementos > 100
47 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
48 Casos de uso POI - Pre-procesado (II) Recorrer el fichero fuente y llenar el Quadtree (J2SE).
49 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
50 Casos de uso POI - Pre-procesado (IV) Persistir descripciones en ficheros diferentes: (Pseudo)Acceso aleatorio offset / tamFichero 80.000/1024 = Fichero número 78 offset % tamFichero 80.000 % 1024 = byte 128
51 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
52 Casos de uso POI - POI
53 Casos de uso POI - Tareas BackGround POI Cada tarea resuelve un caso de uso Quicksort para ordenar resultados 50 primeros resultados
54 Casos de uso POI - Visualizar POI
55 Casos de uso de GPS
56 Centrar el mapa en la posición del GPS JSR-179: Location API
57 Casos de uso de GPS – Clases Un hilo dedicado para GPS Conversión de EPSG:4326 a EPSG:23030 Com.henson.midp.Float1 1
58 Casos de uso de GPS – DTE
59 Despliegue Compilación + Preverificación Emulación + Profiler: Detectar cuellos de botella Es importante probar sobre dispositivos Ofuscación + Firma (¿Opcional?) Empaquetado (JAD + JAR)
60 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
61 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
62 Siguientes pasos gvSIG Mini Visor WMS, WMS-c, OSM Cliente YOURS Cliente NameFinder GPL Más eficiente y más compatible
63 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
64 GRACIAS