Blog

Jornada de ILAF en las JIIDE 2014

El pasado 5, 6 y 7 de Noviembre se celebraron en Lisboa las V Jornadas Ibéricas de infraestructuras de datos espaciales JIIDE, evento para todo el que participa en el suministro de información geográfica y que actualmente tiene una dinámica muy enmarcada por la directiva INSPIRE. En ellas se tiene la oportunidad de poner en contacto las organizaciones y técnicos de la península Ibérica y se ponen de relieve los acontecimientos y experiencias en este área.

Dentro de ellas tuvo lugar una sesión del Foro Ibérico y Latino Americano del OGC (ILAF) presidida por Joan Masó y Celia Sevilla. Uno de los aspectos que para mi tuvo más interés de la sesión fue el repaso que se hizo sobre las últimas modificaciones en estudio o en debate sobre los protocolos OGC. Para la mayoría de los usuarios de estos protocolos nos resulta complicado estar al día del futuro de esta tecnología. Era difícil repasar todos los frentes de discusión, ya que existen decenas de borradores abiertos pero se comentaron cosas como el trabajo que se está realizando en una extensión temporal sobre WFS o el uso de JSON o GeoJSON por los protocolos.

Entre las charlas ofrecidas destacaron un proyecto para construir una infraestructura para soporte de ciudades inteligentes (Smart Cities), incluyendo soporte de datos abiertos, y CleanSeaNet, un servicio basado en imágenes de satélite para cubrir las áreas de marinas de toda Europa para detección de vertidos de petroleo.

Por nuestra parte, en Prodevelop contamos la experiencia que hemos tenido en el uso de protocolos OGC en proyectos en los últimos años, centrado sobre todo en el uso de Sensor Web Enablement (SWE). Lo cierto es que toda la sesión destacó por la interactividad de los asistentes, cosa rara en este tipo de eventos, en el cual se escucha mucho y se interviene poco. Las sesión dio para muchas preguntas y para algún que otro debate a partir de una experiencia de implementación de WMTS llevada a cabo en el Centro Nacional de Información Geográfica (CNIG).

Location-based queries on #DBpedia using #SPARQL

DBpedia es un proyecto de colaboración abierta para extraer información estructurada de la Wikipedia y hacerla pública de nuevo en internet. Los datos están accesibles vía SPARQL. Para realizar consultas basadas en ubicación, tenemos dos opciones: DBpedia is a crowd-sourced community effort to extract structured information from Wikipedia and make this information available on the Web. Data can be accessed via an online SPARQL endpoint. When it comes to location-based queries, we can use two approaches:
1. Consultas geométricas. SPARQL permite el uso de funciones geométricas siempre y cuando el artículo de la Wikipedia tenga atributos de ubicación (coordenadas): 1. Geometric queries. SPARQL allows using geometric functions as long as the Wikipedia item has location attributes:
Esto es un fragmento del predicado SPARQL usado: This is a piece of the SPARQL predicate:
...
FILTER( bif:st_intersects(?geometry, bif:st_geomfromtext(
'POLYGON ((-16.36235 28.434162, -16.220214 28.434162,
-16.220214 28.5, -16.36235 28.5, -16.36235 28.434162))')) )
...
2. Usando propiedades de ubicación. Entre las propiedades almacenadas para cada elemento de la DBpedia, podemos usar las propiedades de ubicación para obtener los elementos asociados a un cierto topónimo: 2. Using location properties. Among the properties stored for each DBpedia item, we can use the location properties to retrieve data associated with a certain place:
...
?node <http://dbpedia.org/ontology/location> <http://dbpedia.org/resource/Berlin>
...

#gvSIG Lab: Using PDF files as templates in Map Sheets in gvSIG 2.1.0

El plugin Map Sheets permite usar plantillas para generar series de mapas en varios rectángulos definidos por el usuario. Una posible mejora consiste en permitir que el usuario use archivos PDF ya existentes como base sobre la cual generar los nuevos mapas en formato PDF. De esta manera, es posible usar plantillas con un aspecto más profesional, con logotipos oficiales de alta calidad, etc, sin tener que pasar por el maquetado convencional de gvSIG. En este vídeo puede verse un pequeño ejemplo en el que se usa un PDF que ya contiene un mapa. Idealmente, usaríamos un PDF en el que el área para el mapa está vacío: The Map Sheets plugin lets you use map templates to generate series of maps based on a grid of customizable rectangles. A possible improvement consists in using pre-existing PDF files as templates. In this case the user would have to indicate the area to be used by the map. More professional-looking maps can be achieved like this (high-quality logos, etc) without dealing with gvSIG's conventional layout composer. This video shows an example, where the template PDF already has a map. Ideally we would use a PDF file where the map area is blank:
...

#gvSIG Lab: The Molodensky-Badekas transformation in gvSIG 2.1.0

Es posible, mediante un plugin, añadir un nuevo tipo de operación que aplica la transformación de Molodensky-Badekas (10 parámetros) a una capa vectorial presente en la vista de gvSIG. El resultado sería un nuevo shapefile. Este vídeo muestra el prototipo del plugin: We can add a new type of vector operation with a plugin. The operation would be the Molodensky-Badekas transformation (10 parameters) and the result would be a new shapefile. This short video shows the prototype:
...

Transacción comercial en varias etapas con teléfono #Android y #NFC (simulación de un parquímetro)

Esto es una demo en la que se simula una transacción comercial (cliente en un aparcamiento) en varias etapas (negociación que concluye con un pago) mediante aplicaciones Android y mensajes en el estándar NFC. En general, este esquema se puede aplicar a situaciones en las que el usuario se encuentra físicamente en un lugar en el que hay un recurso asignable, una tarea a realizar, etc. Por ejemplo, lugares donde se obtiene un servicio o producto o lugares de trabajo, y existe algún dispositivo automático de venta o gestión de recursos o asignación de tareas, de modo que se puede establecer una negociación hasta llegar a un acuerdo.

En esta demo, tanto la aplicación del cliente como la del parquímetro se ejecutan sobre teléfonos Android aprovechando las funcionalidades de recepción de mensajes NFC y el sistema Android Beam que permite a su vez enviar mensajes NFC:

Aplicación que simula el parquímetro. NFC = Near Field Communication (Comunicación de Campo Cercano). Aplicación en el teléfono del conductor.

Este vídeo con subtítulos muestra una ejecución de las aplicaciones:

#gvSIG 2.1.0: Tables with and without PK in the GeoDB wizard

Si una tabla tiene declarado una clave primaria en la BD, el combo del asistente GeoDB solo muestra esa opción y por tanto no se puede cambiar. Si la tabla no tiene una clave primaria declarada, se muestran todos los campos de la tabla y el usuario es responsable de que el que elija cumpla la condición de no tener valores repetidos, de lo contrario la aplicación hará cosas raras (esto se avisa mediante un diálogo): If a table does have a declared primary key in the DB, the GeoDB wizard will show only that one, so the user will not be able to change it. If the table does not have a declared PK, all fields will be available in the combo box, so the user is responsible for choosing a field which has no repeated values, otherwise the application will behave in a strange way when dealing with that table (a warning dialog tells this):

Testing Leaflet + Markercluster and Arabic characters

Leaflet.markercluster es un plugin para Leaflet (librería Javascript para aplicaciones web de mapas) creado por Dave Leaver. En este pequeño vídeo estamos probándolo con topónimos en caracteres árabes: Leaflet.markercluster is a plugin for Leaflet (Javascript webmapping library) created by Dave Leaver. This short video shows a test with Arabic place-names:
En comparación con el uso de teselas vectoriales pre-calculadas que ha desarrollado Prodevelop, veo las siguientes ventajas:
  • Mayor facilidad de uso.
  • Mejores efectos gráficos.
Y estos inconvenientes:
  • El algoritmo de agrupación no está muy conseguido, ya que se intenta agrupar de manera incremental.
  • Es necesario cargar todos los puntos de interés al inicio (es decir se está descargando mucha información que probablemente no se va a usar)
Compared to Prodevelop's pre-cached vector tiles approach, I can see these advantages:
  • Easier to use.
  • Better graphic effects.
And these problems:
  • The clustering method is not working very well, probably because it tries to group the POIs as they come, which is a too simplified approach.
  • It is necessary to load all the POIs at the start, which means that a lot of unneeded data is being downloaded.

Fast estimation of distance/area from geodetic coordinates

Dado un par de coordenadas (lon, lat) en grados, obtenemos las coordenadas en Mercator Esférico con: Given the pair of coordinates (lon, lat) in degrees, we can get the Spherical Mercator coordinates with:
DEGREES_PER_RADIAN = 180.0 / Math.PI;
MERCATOR_EARTH_RADIUS = 6378137.0;
METERS_PER_EQUATOR_DEGREE = Math.PI * MERCATOR_EARTH_RADIUS / 180.0;

rlat = lat / DEGREES_PER_RADIAN;
y = 0.5 * Math.log((1 + Math.sin(rlat)) / (1 - Math.sin(rlat)));
merx = METERS_PER_EQUATOR_DEGREE * lon;
mery = METERS_PER_EQUATOR_DEGREE * DEGREES_PER_RADIAN * y;
Como es sabido, la proyección esférica de Mercator usada por Google (llamada EPSG:900913 o EPSG:3857) conserva ángulos y proporciones localmente, y todos los paralelos miden lo mismo: As we know, the Spherical Mercator projection known as EPSG:900913 and also EPSG:3857 is conformal (keeps angles and shapes locally) and all parallels have the same length E:
R = 6378137 m
E = 2 * pi * R = 40075016.686 m
Pero sabemos que realmente cada paralelo mide aproximadamente P = E * cos(lat) así que al medir distancias o perímetros directamente en esta proyección, es necesario normalizar el resultado, multiplicándolo por un factor f = cos(lat). En el caso de Estocolmo (Suecia) por ejemplo: But we know that the true length of each parallel is approximately P = E * cos(lat), so if one wishes to measure distances, perimeters or paths directly on a map in EPSG:3857, it’s necessary to multiply the result by a factor f = cos(lat). In the case of Stockholm (Sweden), for example, we have:
lat = 60
f = 0.5
Esto es una piscina olímpica en Barcelona en Google Maps. Su latitud es 41.36573: This is an olympic swimming pool in Barcelona on Google Maps. Latitude is 41.36573:
Si medimos su longitud directamente en esa proyección: If we measure its length directly in that projection:
Longitud verdadera: True length:
L = 66.57 * cos(41.36573) = 49.96 m
En el caso de áreas, podemos imaginar un polígono arbitrario (por ejemplo el perfil de la cara de un hombre) dividido en infinidad de pequeños cuadritos. Si reducimos la imagen con un factor de 0.6, el área de cada cuadrito resultante será 0.36 veces el del cuadrito original: For areas, we can think of an arbitrary polygon (for example, the outline of a man's face) divided into little squares. If we scale down the image by a factor of 0.6, each resulting little square is 0.36 times the size of the original square:
Por tanto, si la magnitud unidimensional (longitud) se escala en un factor f, la magnitud bidimensional (área) queda escalada en un factor f^2. Esto quiere decir que un área calculada usando coordenadas de Mercator esférico debe ser normalizada con el factor [cos(lat)]^2. So if the 1-dimensional magnitude (length) is scaled by f, then the 2-dimensional magnitude (area) gets scaled by f^2. This means that the area computed using Spherical Mercator coordinates must be normalized by a factor of [cos(lat)]^2.

Using regular patterns to check clustering method performance

Este pequeño vídeo muestra el comportamiento de la aplicación de clusterización (agrupamiento de elementos cercanos) realizada por Prodevelop para generar archivos KML enlazados, de manera que el rendimiento de los clientes web sea óptimo sin perder validez en la ubicación de los elementos. Los pasos mostrados en el vídeo son:
  1. Explorar y editar la tabla original con gvSIG 2.1.0.
  2. Ejecutar la aplicación de clusterización sobre la misma tabla.
  3. Copiar la carpeta de archivos KML generada en una carpeta pública accesible desde internet.
  4. Obtener la URL del archivo KML raíz y visualizar el resultado en Google Earth.
This short video shows the behavior of the clustering application created by Prodevelop to create nested KML files. This approach ensures optimum performance by web clients without losing geographic information, regardless of the map scale. The steps shown in the video are:
  1. Exploring/editing the source table with gvSIG 2.1.0.
  2. Running clustering application on the same table.
  3. Copying resulting files to target web folder.
  4. Getting URL of root KML file and browsing final result in Google Earth.
Este es el código con el que se calcula la ubicación de cada agrupación de elementos, como una media ponderada en función del peso de los subelementos: This is the Java code which computes coordinates of cluster as an weighted average of the coordinates of its sub-elements:

Advanced labeling in gvSIG 2.1.0 with some improvements

El etiquetado avanzado se ha llevado a gvSIG 2.1.0 con alguna mejora. Se ha modificado ligeramente la colocación de etiquetas dentro de los polígonos para que aparezcan en la porción del polígono que es visible en la vista, es decir no quedan pedazos vacíos, tal como se ve en los sucesivos cambios de escala de este vídeo: Advanced labeling has been ported to gvSIG 2.1.0 with some improvements, such as the new behavior of the "place inside polygon" policy, which will place the label inside the section of the polygon which is visible in the current view, as can be seen in this short video. Labels conveniently approach the polygon border as we zoom in:
También se ofrece ahora la posibilidad de trazar un halo de cualquier grosor y color alrededor de cada etiqueta. Por supuesto, están dispobibles las opciones de filtrado, selección, expresiones, etc. It is also possible now to have an hallo added around each label, with user-defined width and color. Of course, all other potions (filters, on-selection, expressions, etc) are also available.
Distribuir contenido