Como mencioné en un post anterior (por favor léelo antes de continuar), busco extender el Servicio de Procesamiento Web (WPS) del Open Geospatial Consortium (OGC) habilitándolo para procesar flujos continuos de datos espaciales, así como para enviar resultados intermedios de vuelta al cliente. Estas dos funcionalidades se consiguen con streaming de entrada y de salida, un método que añade geoprocesamiento casi en tiempo real al WPS. En este post se dan los fundamentos de la idea, así como detalles de implementación y enlaces a varios recursos, incluyendo una demo.
For English click here (points to the 52°North’s website).
Métodos usados actualmente
Actualmente los métodos empleados para procesar flujos continuos de datos de manera interoperable los brinda la iniciativa Sensor Web Enablement (SWE) del OGC. El procesamiento en SWE es llamado Event Processing, el cual posibilita el filtrado y agregación de flujos de datos mediante el Event Pattern Markup Language (EML) (Everding et al., 2009).
Un procesamiento más sofisticado de flujos de datos puede ser realizado llamando procesos WPS cuando se cumple una condición (Everding and Foerster, 2011). Sin embargo, dependiendo del contexto, llamar procesos WPS en forma secuencial puede no ser óptimo. Por ejemplo, la ejecución de procesos WPS cuyos datos de entrada son un flujo de datos y un conjunto grande de datos estáticos, podría tener problemas de rendimiento porque los datos estáticos tendrían que ser enviados repetidamente.
Por esto es deseable habilitar el WPS para manejar entradas de flujos de datos y cargar grandes datos estáticos solamente una vez. WPS con streaming de entrada y salida ayuda a resolver este problema.
WPS con streaming de salida
El WPS está basado en un mecanismo secuencial de petición-respuesta. Un cliente envía una petición adjuntando datos al servidor, el servidor ejecuta un proceso con los datos y, finalmente, envía el resultado de vuelta al cliente (Foerster et al., 2012). Un WPS es un WPS con streaming de salida cuando los dos últimos pasos son paralelos y es un WPS con streaming de entrada y salida cuando todos los tres pasos son paralelos.
El WPS con streaming de entrada y salida es capaz de recibir flujos de datos, procesarlos y, al mismo tiempo, enviar resultados intermedios al cliente como un flujo de salida.
Introduciendo un nuevo formato de datos espaciales: La Playlist (Lista de reproducción)
Transportar y acceder a flujos de datos implica mantener un registro de todos los pedazos de datos que componen el flujo para evitar la pérdida de datos. Un reconocido formato de datos que ayuda a transportar pedazos de datos multimedia es la Playlist. Se trata de un archivo de texto plano que contiene Uniform Resource Identifiers (URIs) apuntando a pedazos de datos y que puede ser actualizado cada vez que nuevos pedazos de datos estén disponibles.
El formato original es usado en el ámbito multimedia y fue definido por Apple en una especificación abierta llamada HTTP Live Streaming. Las razones por las cuales se seleccionó la Playlist sobre otros formatos similares, como el Media Presentation Description (MDP) de DASH (Dynamic and Adaptive Streaming over HTTP), son su disponibilidad pública y su simplicidad.
La versión espacial de la Playlist es un archivo con extensión txt, en el cual cada línea es una etiqueta informativa o una dirección (URI) apuntando a un pedazo de datos. Las etiquetas informativas tienen el prefijo “#” y actualmente son tres:
- #SPATIAL-DATA-PLAYLIST Abre la Playlist.
- #EXCEPTION:URI Se usa para comunicar excepciones occuridasdurante la generación de la Playlist. La dirección (URI) referencia un reporte de excepción, como los empleados por los servicios web OGC. Si la etiqueta Exception aparece en una Playlist, debe ser seguida por la etiqueta End, de tal forma que el cliente pueda ensamblar los datos ya descargados (si hay) e informar al usuario.
- #PLAYLIST-END Cierra la Playlist.
Finalmente, el WPS basado en streaming soporta encadenamiento de servicios web, ya que la Playlist de salida de un proceso puede servir a su vez como Playlist de entrada de otro proceso.
Un nuevo mime type
La Playlist también introduce un nuevo mime type (application/x-ogc-playlist) para identificarla en flujos de trabajo con servicios web, de acuerdo con el documento Web Processing Service Best Practices Discussion Paper.
El formato del contenido de la Playlist debe ser específicado agregando el mime type de los pedazos de datos al mime type de la Playlist. Un signo de adición (“+”) debe ubicarse en el medio. Por ejemplo, el mime type para una Playlist que contiene archivos Geography Markup Language (GML) v.2.1.2.1 podría ser:
application/x-ogc-playlist+text/xml; subtype=gml/2.1.2.1
Casos de estudio
Monitoreo de tráfico
Para monitorear tráfico es importante tener acceso a las posiciones de vehículos a lo largo de vías en una red vial. Usualmente se emplean dispositivos GPS para obtener posiciones cada cierto tiempo, pero es probable que dichas posiciones estén desplazadas debido a la inexactitud del GPS. Por lo tanto, es indispensable procesar las posiciones crudas del GPS para determinar sobre qué vías transitan los vehículos. Este proceso es conocido como emparejamiento de mapas (map matching).
Piensa en vehículos enviando posiciones GPS crudas cada cinco segundos. En lugar de desplegar posiciones inexactas, se podría aplicar un algoritmo de emparejamiento de mapas y solo entonces desplegar las posiciones ajustadas. En el siguiente video se usa un algoritmo básico para ajustar puntos a líneas. El algoritmo es publicado como un WPS con streaming de entrada y salida, soportando flujos de datos de entrada a través de una Playlist de entrada, así como haciendo disponibles resultados intermedios al cliente a través de una Playlist de salida.
Como puedes ver, la red vial (que puede ser enorme) se envía una sola vez y se usa repetidamente para ejecutar el algoritmo cada vez que hay un nuevo pedazo de datos disponible en la Playlist de entrada. De esta manera, las posiciones que el cliente despliega están ubicadas sobre vías y están disponibles casi de inmediato para realizar análisis adicionales.
Procesamiento de datos Web Feature Service (WFS) grandes
WFS es un servicio estándar de almacenamiento y, opcionalmente, de edición. Cuando los datos expuestos por un WFS son relativamente grandes, se pueden presentar problemas de rendimiento haciendo el servicio poco usable en términos prácticos. Por este motivo la especificación WFS 2.0 introduce un mecanismo que permite paginar los resultados y, de este modo, permite a los clientes acceder a pedazos de datos en lugar del conjunto completo de datos de una sola vez.
Una Playlist de entrada podría usarse para mantener un registro de cada página guardando su dirección, habilitando a un WPS con streaming de entrada y salida para procesar las páginas tan pronto estén disponibles. De esta manera, el procesamiento de datos WFS grandes ya no será tan pesado.
Sensor Observation Service (SOS) y Sensor Event Service (SES)
Los datos de sensores son la entrada más apropiada para WPS con streaming de entrada y salida. Un SES podría notificar la disponibilidad de nuevos datos y, al mismo tiempo, producir una actualización de una Playlist agregando la dirección para acceder a los datos por medio del SOS. El ejemplo del monitoreo de tráfico podría ser implementado de esta manera.
Cómo implementar un proceso WPS basado en streaming
Si quieres implementar un proceso WPS basado en streaming, puedes seguir un par de tutoriales: Implementing an Output Streaming WPS e Implementing a Full Streaming WPS. Todos los recursos disponibles están listados en la sección Recursos de este post.
Demo
Complementando el video, una demo ha sido configurada para que puedas ver en acción el streaming de salida y el streaming de entrada y salida. El lado del servidor extiende el framework WPS de 52°North, mientras que el del cliente extiende el cliente WPS de QGIS.
Prerrequisitos
Instala una versión superior o igual a la 0.9.0 del cliente WPS de QGIS, en la cual fueron incorporadas las funcionalidades de streaming.
Una vez instalado el cliente WPS de QGIS, agrega el servidor demo (ver Recursos) a las conexiones a servidores (Server Connections).
Probando el WPS con streaming de salida
Ejecuta el proceso OutputStreamingSimplifyDouglasPeucker. Como entrada para el parámetro FEATURES puedes elegir cualquier capa de líneas. Adicionalmente, debes definir la tolerancia (que depende del sistema de referencia de tus datos) y el número de pedazos (NumberOfChunks) que te gustaría obtener del proceso, por ejemplo, 50 (aunque esto depende del número de elementos geográficos de la capa de líneas). Observa este video si necesitas más orientación.
Probando el WPS con streaming de entrada y salida
Descarga la red vial de muestra publicada en este post y cárgala en QGIS (asegúrate de definir el sistema de referencia del proyecto de QGIS como EPSG:31467). Ejecuta el proceso FullStreamingSnapPointsToLines eligiendo la red vial para el parámetro Lines. Ingresa 100 (metros) como MaxDistance y 20000 (milisegundos) como MaxTimeIdle. El parámetro MaxTimeIdle define el tiempo máximo que el servidor esperará por actualizaciones de la Playlist de entrada. Si se excede dicho tiempo, el servidor detendrá el proceso y notificará al cliente a través de una excepción. Finalmente, el proceso espera los puntos en formato Playlist. Puedes elegir entre dos tipos de Playlist:
- Playlist estática: Es una Playlist ya cerrada, por lo que no se agregarán más datos a la misma. Copia esta dirección (http://downloads.tuxfamily.org/tuxgis/geoblogs/streaming_based_wps/sample_playlist.txt) de la Playlist al campo de texto que corresponde al parámetro Points. No esperes un orden particular en los resultados ya que el servidor descargará los datos de la Playlist de manera asíncrona, los procesará en paralelo, y los hará disponibles por medio de la Playlist de salida. Además, el cliente desplegará los resultados tan pronto como pueda descargarlos.
- Playlist dinámica: Es una Playlist que se encuentra abierta y que será actualizada cada 5 segundos durante alrededor de 2 minutos. Puedes obtener la dirección de una Playlist dinámica desde http://geotux.pythonanywhere.com/generate_playlist, solo copia la dirección retornada al campo de texto que corresponde al parámetro Points.
Conclusiones
He presentado en un par de blog posts una implementación de WPS basado en streaming, el cual tiene dos modalidades: Streaming de salida y streaming de entrada y salida. La primera busca reducir la latencia de procesos WPS básicos, mientras que la segunda habilita al WPS para procesar flujos continuos de datos mientras envía resultados intermedios de vuelta al cliente.
La implementación está basada en el framework WPS de 52°North del lado del servidor a en el cliente WPS de Quantum GIS del lado del cliente. Se han publicado varios recursos, incluyendo tutoriales, videos, código fuente y una demo.
Si tienes comentarios, sugerencias o reportes de errores, puedes dejar un comentario en el post o enviar un correo a la lista de correos de la comunidad de Geoprocesamiento de 52°North.
Referencias
- T. Everding, J. Echterhoff, and S. Jirka. (2009). Event Processing in Sensor Webs. Presented at the Proceedings of Geoinformatik 2009, Osnabrueck, Germany, March 2009. ifgiPrints, Institute for Geoinformatics (pp. 11-19). Muenster, Germany.
- T. Everding and T. Foerster. (2011). An Event Driven Architecture for Decision Support. In A. Schwering, E. Pebesma, and K. Behncke (Eds.), Geochange (pp. 7-13). Presented at the Geoinformatik 2011, Muenster, Germany: AKA Verlag. Retrieved from http://ifgi.uni-muenster.de/~tfoer_01/articles/Geoinformatik2011_EverdingFoerster.pdf
- T. Foerster, B. Baranski, and H. Borsutzky. (2012). Live Geoinformation with Standardized Geoprocessing Services. In J. Gensel, D. Josselin, and D. Vandenbroucke (Eds.), Bridging the Geographic Information Sciences (pp. 99–118). Berlin, Heidelberg: Springer Berlin Heidelberg. Retrieved from http://www.springerlink.com/index/10.1007/978-3-642-29063-3_6
Recursos
- Código fuente:
- Del lado del servidor (extendiendo el framework WPS de 52°North) https://svn.52north.org/svn/geoprocessing/main/WPS/branches/StreamingBasedWPS/
- Del lado del cliente (extendiendo el cliente WPS de QGIS) http://plugins.qgis.org/plugins/wps/ (versión >= 0.9.0) (Probado en QGIS 1.7.3 y 1.8 sobre GNU/Linux)
- Tutoriales: Implementando un WPS con streaming de entrada y salida e Implementando un WPS con streaming de salida
- Demo:
- Servidor demo http://geoprocessing.demo.52north.org:8081/streamingBasedWPS/WebProcessingService
- Proveedor de Playlists http://geotux.pythonanywhere.com/generate_playlist
- Red vial (fuente: OpenStreetMap) http://downloads.tuxfamily.org/tuxgis/geoblogs/streaming_based_wps/road_network.zip
Comentarios recientes