1. SIG para dispositivos móviles
de la Junta de Extremadura
Alumno: ALBERTO ROMEU (aromeu@prodevelop.es)
Director empresa: MIGUEL MONTESINOS (mmontesinos@prodevelop.es)
Tutor UPV: VICENTE PELECHANO (pele@dsic.upv.es)
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
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
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. - Casos de uso de
Análisis de requisitos
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. - Casos de uso de
Análisis de requisitos
Puntos de interés
Mostrar POI
Buscar POI
Consultar
información
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
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
22. Casos de uso de cartografía
Cliente WMS-c
Arquitectura tiles
Caché tiles
El proceso de pintado
Diseño de casos de uso
Multi-Threading
23. 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
24. 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
25. - ¿Qué es un
CU Cartografía
Tile/Tesela?
Lado: 256px
BoundingBox
Resolución
26. 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
27. 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
28. CU Cartografía - Caché en disco
Acceso a disco es lento
¿Cómo acelerar el acceso a caché?
Extrapolar Quadkeys al sistema de
ficheros
29. CU Cartografía - El proceso de pintado
Se inicia en Form
El mapa recorre sus
capas:
3. Para la capa base: el
grid recorre los tiles y
pinta la imagen
4. Para la vectorial: Se
recorren las
geometrías y se
pintan
l Se pinta un acetato
35. 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
37. 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
38. Casos de uso de rutas -Modelo de
geometrías
Colecciones de
Features
Feature =
Geometría +
metadatos
Geometría =
Coordenadas +
pintado
39. Casos de uso de rutas - DTE de una ruta
Ruta con
2 puntos:
inicio +
[paso |
fin]
Ruta con
N
puntos:
inicio + n
ptos
paso
40. 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
41. 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.
42. 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
44. - Obtener
Casos de uso de rutas
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
46. Casos de uso de Puntos de
interés
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
47. Casos de uso POI - Bucket PR-Quadtree
Quadtree: Cada
cuadrante se
subdivide en 4
Criterio de división:
Número de
elementos > 100
48. 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
49. Casos de uso POI - Pre-procesado (II)
Recorrer el fichero fuente y llenar el Quadtree
(J2SE).
50. 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
51. Casos de uso POI - Pre-procesado (IV)
Persistir descripciones en ficheros
diferentes: (Pseudo)Acceso aleatorio
CoordenadaX CoordenadaY Categoría OffSetDescripción
double (8 bytes) double (8 bytes) short (2 bytes) short (2 bytes)
offset / tamFichero 80.000/1024 = Fichero número 78
offset % tamFichero 80.000 % 1024 = byte
128
52. - Pre-
Casos de uso POI
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
60. Despliegue
Compilación + Preverificación
Emulación + Profiler: Detectar cuellos
de botella
Es importante probar sobre dispositivos
Ofuscación + Firma (¿Opcional?)
Empaquetado (JAD + JAR)
61. 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
62. 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
63. Siguientes pasos
gvSIG Mini
Visor WMS, WMS-c,
OSM
Cliente YOURS
Cliente NameFinder
GPL
Más eficiente y más
compatible
64. 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