Contents
El hecho de utilizar bases de datos espaciales a través de datos geométricos permite almacenar objetos como puntos, líneas y polígonos; lo cual es una ventaja significativa respecto al mapeo clásico, que está enfocado a analizar datos estadísticos o transaccionales. Las nuevas herramientas geográficas pueden revelar tendencias y patrones ocultos en los datos alfanuméricos.
Axional Geospatial permite implementar extensiones espaciales y simplificar el proceso de construcción de aplicaciones geo-espaciales.
Puntos clave
- Un diseñador de formularios web permite escribir queries a la base de datos y representarlos en un mapa
- Una gramática geo-espacial en SQL permite escrbir sentencias geo-espaciales independientes de la base de datos en SQL.
- Capacidades incorporadas en el software del cliente para trazar ubicaciones
Análisis de datos
Multi Layers
Axional Geospatial puede mostrar múltiples capas de diferentes fuentes de datos en un mapa. Por ejemplo, una compañía quizás está interesada en cruzar diferente información en el mapa, como la ubicación de sus clientes y los datos sociodemogràficos (ingresos medio, edad,…) de la área ( estado, distrito, código postal…).
Diferentes atributos pueden ser definidos para cada capa de datos:
- Label: una etiqueta que identifique el layer que aparecerá en la leyenda.
- Rango de zoom de visibilidad: un rango mínimo y máximo en el que el layer es visible. Fuera de este, el layer es invisible.
- Visibilidad inicial: aunque esté en el rango invisible, un layer puede definirse como invisible inicialmente. Puede hacerse visible dinámicamente por el usuario.
- Categoría: los layers pueden ser agrupados en categorías.
- Procesar (render) tipos por geometrías: frecuentemente, las bases de datos tienen 3 tipos de tipos geométricos: punto, línea y polígono. Sin embargo, a veces, debido a la naturaleza de los datos, puede ser mejor dibujar las geometrías en un formato especial. Axional Geospatial provee renderers especiales, tales como:
- Mapa de calor: perfecto para dibujar densidades.
- Cluster: Útil cuando se tiene un gran número de marcadores (markers).
- Trazadas GPS: elección para dibujar un camino a partir de puntos GPS.
- Simbología: permite definiciones de símbolos en un mapa. Es decir, los colores aplicados a las geometrías, la opacidad, los bordes, marcadores de imagen (cuando las geometrías son puntos), etc.
- Ventana de información: el texto que aparecerá en una caja cuando se pulse una geometría. El texto puede ser una Static String, o una plantilla con referencias a columnas en la fila pulsada o puede ser llamado a través de XSQL-Script en el servidor devolviendo código HTML.
- Cursor de rastreo: un cursor de rastreo es otro query en SQL utilizado para iterar los layers. Cuando se define el cursor de rastreo, la sentencia del layer SELECT debe de tener variables en las condiciones SQL. Por cada fila devuelta por el cursor de rastreo, el layer SQL es ejecutado con las variables pasadas por el cursor. Eso significa que por cada fila en el cursor, se genera un layer nuevo.
Mapeo temático
Un mapa de Choropleth es un mapa temático en el que se sombrean las áreas en proporción al número de medidas de la variable estadística visualizada, ya sea la densidad de población o los ingresos per cápita, por ejemplo. El mapeo choropleth muestra datos estadísticos agregados sobre regiones predefinidas, como son condados o estados, coloreando o sombreando estas regiones.
No siempre los mapas coloreados son la mejor forma de representar los valores, ya que se enfatizan más las regiones más grandes que aquellas pequeñas. Para corregir esto, en vez de dibujar las formas de los condados, se utilizan círculos, cuyas áreas son proporcionales al valor absoluto de los datos.
El éxito de muchos mapas temáticos, especialmente los mapas de choropleth, depende del hecho de ser capaces de entender como manipular los colores para codificar los datos geográficos utilizando tres dimensiones de los colores: tono, luminosidad y saturación.
Axional Geospatial viene con 3 categorías predefinidas de grupos de paletas de colores, para adaptarse a la naturaleza diferente de los datos representados:
- Esquema de colores cualitativo: contiene diferentes tonos que mantienen luminosidad y saturación constante. Debe ser utilizado para datos cualitativos (categorías no ordenables ni datos numéricos).
- Esquema de colores secuencial: cualquier secuencia que está dominada por cambios en luminosidad puede utilizarse para categorías ordenables y datos numéricos.
- Esquema de colores divergente: debe solamente utilizarse cuando los datos tienen un punto medio natural como el cero (ej.: crecimiento positivo/negativo) o si se quiere comparar lugares con medias nacionales (ej.: datos regionales mostrando los lugares que están por encima y por debajo de la media nacional, en cuanto a los ingresos per cápita).
Además de las paletas que incluye Axional Geospatial, los desarrolladores pueden definir sus propias paletas para ajustarse mejor a los requerimientos de los mapas que se quieran realizar. Asimismo, los usuarios finales pueden cambiar los colores a través de la paleta que hay en la leyenda.
Renderers especiales
Mapas de calor
El mapa de calor es una de las herramientas más útiles y potentes que hay disponible en Business Intelligence, para el análisis de datos. Es una herramienta de visualización que representa múltiples filas de datos asignando diferente tamaño y color a las celdas que representan cada fila.
Si cada punto está asociado con un valor, la representación básica consiste en regiones llamadas áreas, que pueden rellenarse con colores o delimitarse simplemente por líneas de contorno, o ambos.
Los mapas de calor ilustran la densidad y la distribución de los puntos de los datos, generados en tiempo real sobre mapas con zoom y enfoque. La influencia de los puntos (radios) y la gama de colores puede configurarse para dar el revestimiento más apropiado.
Clústeres
Para poder visualizar un gran número de ubicaciones y marcadores, se requieren algunas aplicaciones. Los mash-ups de Google Maps pueden sufrir problemas de rendimiento cuando se intentan visualizar un gran número de marcadores a la vez. Para superar este pobre rendimiento, la información en el mapa debe ser simplificada, por ejemplo, utilizando clústeres.
Los clústeres proporcionan la capacidad de representar ubicaciones cercanas entre ellas en una sola chincheta. Cuando se realice zoom sobre estas ubicaciones, quedaran más alejadas y se separaran en sus propias chinchetas. En vez de volver al servidor a solicitar más datos, se hacen clústeres improvisados en JavaScript para realizar los clústeres client-side. Cuando se tienen unos cuantos millares o menos de datos para visualizar, los clústeres client-side pueden ser significativamente más rápido que los clústeres server-side y pueden reducir las solicitudes al servidor, haciendo la aplicación mucho más escalable. Las siguientes imágenes son un ejemplo de las mismas 6.000 chinchetas antes y después de realizar un clúster.
Tipos de datos geométricos
Axional Geoespatial ofrece una gramática SQL basada en XML con extensiones espaciales para diferentes motores de base se datos. La gramática DML ofrece una amplia gama de funciones para escribir sentencias independientes del SQL nativo, simplificando el uso de los spatial data blade.
<select> <columns> d.the_geom, d.id, d.p1, d.p2, d.p3, d.p4, d.p5, d.p6 </columns> <from alias='d' > <select> <columns> bican_zonas_censales_data.p1, bican_zonas_censales_data.p2, bican_zonas_censales_data.p3, bican_zonas_censales_data.p4, bican_zonas_censales_data.p5, bican_zonas_censales_data.p6, bican_zonas_censales_data.id, <geo.asWkt>bican_zonas_censales.the_geom</geo.asWkt> the_geom </columns> <from alias='c' > <select> <columns> <geo.buffer> <geom1><geo.aggrUnion pg_collect='y'>bican_areas_influencia.the_geom</geo.aggrUnion></geom1> <dist>0</dist> </geo.buffer> the_geom </columns> <from table='bican_areas_influencia' /> <where> bican_areas_influencia.id_oficina = '#oficina' </where> </select> <join table='bican_zonas_censales'> <on> <geo.intersects> <geom1>c.the_geom</geom1> <geom2>bican_zonas_censales.the_geom</geom2> </geo.intersects> </on> </join> <join table='bican_zonas_censales_data'> <on>bican_zonas_censales.gid = bican_zonas_censales_data.id</on> </join> </from> </select> </from> </select>
-- ************************************************************************************ -- DEISTER WebStudio XSQL-SELECT Tue Oct 11 11:21:50 CEST 2011 Engine: ids -- ************************************************************************************ SELECT d.the_geom, d.id, d.p1, d.p2, d.p3, d.p4, d.p5, d.p6 FROM (SELECT bican_zonas_censales_data.p1, bican_zonas_censales_data.p2, bican_zonas_censales_data.p3, bican_zonas_censales_data.p4, bican_zonas_censales_data.p5, bican_zonas_censales_data.p6, bican_zonas_censales_data.id, ST_AsText(bican_zonas_censales.the_geom) the_geom FROM (SELECT ST_Buffer(SE_Dissolve(bican_areas_influencia.the_geom),0) the_geom FROM bican_areas_influencia WHERE bican_areas_influencia.id_oficina = '#oficina' ) c ,bican_zonas_censales ,bican_zonas_censales_data WHERE ST_Intersects(c.the_geom,bican_zonas_censales.the_geom) AND bican_zonas_censales.gid = bican_zonas_censales_data.id ) d WHERE ST_Intersects(c.the_geom,bican_zonas_censales.the_geom) AND bican_zonas_censales.gid = bican_zonas_censales_data.id
-- ************************************************************************************ -- DEISTER WebStudio XSQL-SELECT Tue Oct 11 11:21:50 CEST 2011 Engine: oracle -- ************************************************************************************ SELECT d.the_geom, d.id, d.p1, d.p2, d.p3, d.p4, d.p5, d.p6 FROM (SELECT bican_zonas_censales_data.p1, bican_zonas_censales_data.p2, bican_zonas_censales_data.p3, bican_zonas_censales_data.p4, bican_zonas_censales_data.p5, bican_zonas_censales_data.p6, bican_zonas_censales_data.id, SDO_UTIL.TO_WKTGEOMETRY(bican_zonas_censales.the_geom) the_geom FROM (SELECT SDO_GEOM.SDO_BUFFER(SDO_AGGR_UNION(SDOAGGRTYPE(bican_areas_influencia.the_geom,0.05)),0,0.05) the_geom FROM bican_areas_influencia WHERE bican_areas_influencia.id_oficina = '#oficina' ) c ,bican_zonas_censales ,bican_zonas_censales_data WHERE SDO_ANYINTERACT(c.the_geom,bican_zonas_censales.the_geom) AND bican_zonas_censales.gid = bican_zonas_censales_data.id ) d WHERE SDO_ANYINTERACT(c.the_geom,bican_zonas_censales.the_geom) AND bican_zonas_censales.gid = bican_zonas_censales_data.id
-- ************************************************************************************ -- DEISTER WebStudio XSQL-SELECT Tue Oct 11 11:21:50 CEST 2011 Engine: postgres -- ************************************************************************************ SELECT d.the_geom, d.id, d.p1, d.p2, d.p3, d.p4, d.p5, d.p6 FROM (SELECT bican_zonas_censales_data.p1, bican_zonas_censales_data.p2, bican_zonas_censales_data.p3, bican_zonas_censales_data.p4, bican_zonas_censales_data.p5, bican_zonas_censales_data.p6, bican_zonas_censales_data.id, ST_AsText(bican_zonas_censales.the_geom) the_geom FROM (SELECT ST_Buffer(ST_Collect(bican_areas_influencia.the_geom),0) the_geom FROM bican_areas_influencia WHERE bican_areas_influencia.id_oficina = '#oficina' ) c INNER JOIN bican_zonas_censales ON ST_Intersects(c.the_geom,bican_zonas_censales.the_geom) INNER JOIN bican_zonas_censales_data ON bican_zonas_censales.gid = bican_zonas_censales_data.id ) d
-- ************************************************************************************ -- DEISTER WebStudio XSQL-SELECT Tue Oct 11 11:21:50 CEST 2011 Engine: sqlserver -- ************************************************************************************ SELECT d.the_geom, d.id, d.p1, d.p2, d.p3, d.p4, d.p5, d.p6 FROM (SELECT bican_zonas_censales_data.p1, bican_zonas_censales_data.p2, bican_zonas_censales_data.p3, bican_zonas_censales_data.p4, bican_zonas_censales_data.p5, bican_zonas_censales_data.p6, bican_zonas_censales_data.id, bican_zonas_censales.the_geom.STAsText() the_geom FROM (SELECT -- Tag [geo.aggrUnion] not defined for engine sqlserver.BufferWithTolerance(0,,) the_geom FROM bican_areas_influencia WHERE bican_areas_influencia.id_oficina = '#oficina' ) c INNER JOIN bican_zonas_censales ON c.the_geom.STIntersects(bican_zonas_censales.the_geom) INNER JOIN bican_zonas_censales_data ON bican_zonas_censales.gid = bican_zonas_censales_data.id ) d
Debajo, hay una lista de las funciones geométricas que están disponibles con la gramática XML:
Informix Datablade | Postgres PostGis | Oracle Spatial | SQLServer Spatial | DB2 Spatial Extender | |
---|---|---|---|---|---|
ST_Point | ![]() |
![]() |
![]() |
![]() |
![]() |
ST_Line | ![]() |
![]() |
![]() |
![]() |
![]() |
St_Polygon | ![]() |
![]() |
![]() |
![]() |
![]() |
getType | ![]() |
![]() |
![]() |
![]() |
![]() |
getX | ![]() |
![]() |
![]() |
![]() |
![]() |
getY | ![]() |
![]() |
![]() |
![]() |
![]() |
getZ | ![]() |
![]() |
![]() |
![]() |
![]() |
getEnvelope | ![]() |
![]() |
![]() |
![]() |
![]() |
isValid | ![]() |
![]() |
![]() |
![]() |
|
getCoordDim | ![]() |
![]() |
|||
getDim | ![]() |
![]() |
![]() |
![]() |
|
getSRID | ![]() |
![]() |
![]() |
![]() |
|
getNumVertices | ![]() |
![]() |
![]() |
||
asKml | ![]() |
![]() |
|||
asGml | ![]() |
![]() |
![]() |
||
asWkt | ![]() |
![]() |
![]() |
![]() |
|
asWkb | ![]() |
![]() |
![]() |
![]() |
|
asSvg | ![]() |
![]() |
|||
transform | ![]() |
![]() |
![]() |
![]() |
|
reverseLine | ![]() |
![]() |
![]() |
||
distanceCartesian | ![]() |
![]() |
![]() |
![]() |
![]() |
distanceSphere | ![]() |
![]() |
![]() |
![]() |
|
distanceSpheroid | ![]() |
![]() |
![]() |
![]() |
|
length | ![]() |
![]() |
![]() |
![]() |
![]() |
lengthSpheroid | ![]() |
![]() |
![]() |
![]() |
|
perimeter | ![]() |
![]() |
![]() |
![]() |
|
area | ![]() |
![]() |
![]() |
![]() |
|
centroid | ![]() |
![]() |
![]() |
![]() |
|
withinDist | ![]() |
![]() |
|||
equals | ![]() |
![]() |
![]() |
![]() |
![]() |
touches | ![]() |
![]() |
![]() |
![]() |
![]() |
overlaps | ![]() |
![]() |
![]() |
![]() |
![]() |
covers | ![]() |
![]() |
![]() |
![]() |
|
coveredBy | ![]() |
![]() |
![]() |
||
contains | ![]() |
![]() |
![]() |
![]() |
![]() |
within | ![]() |
![]() |
![]() |
![]() |
![]() |
intersects | ![]() |
![]() |
![]() |
![]() |
![]() |
disjoint | ![]() |
![]() |
![]() |
![]() |
![]() |
intersection | ![]() |
![]() |
![]() |
![]() |
![]() |
buffer | ![]() |
![]() |
![]() |
![]() |
![]() |
simplify | ![]() |
![]() |
![]() |
![]() |
|
convexHull | ![]() |
![]() |
![]() |
![]() |
![]() |
difference | ![]() |
![]() |
![]() |
![]() |
|
symDifference | ![]() |
![]() |
![]() |
![]() |
|
aggrUnion | ![]() |
![]() |
![]() |
||
aggrMbr | ![]() |
![]() |
![]() |
||
aggrConvexHull | ![]() |
![]() |
![]() |
GPS tracking
GPS tracking es un renderer layer dirigido a trazar tracks GPS. El input debe estar formado por coordenadas del GPS. El renderer se encarga de conectar las coordenadas con líneas y también dibuja un círculo, representando la precisión de las medidas GPS.
Location tracking
Como muchos de los datos almacenados en una base de datos pueden georeferenciarse, se hace posible analizar cualquier información relacionada en un mapa. Por ejemplo, en caso que los clientes pudieran ver las ventas por área en un mapa junto las ubicaciones geométricas asociadas al cliente y las ventas almacenadas en una tabla de ventas, se pueden ver estas ventas en un map; en vez de utilizar un informe de ventas convencional. Además, se puede realizar zoom del mapa para ver información más detallada e incluso, ver un cliente en concreto y consultar sus facturas.
Asimismo, se pueden implementar Location Based Services (LBS) para móviles Android&153;. El servicio LBS utiliza información geográfica para servir usuarios móviles y proporcionando a las empresas de servicios una manera de mejorar sus operaciones a través de la toma de decisiones basada en información de ubicaciones en tiempo real:
- Servicio al cliente mejorado
- Utilización del trabajo de campo incrementado
- Trabajo de planificación y expedición reducido
Axional mobile LBS proporciona servicios, tales como:
- Mapas y navegación para usuarios/trabajadores móviles
- Rastreo de recursos con distribución dinámica: vehículos, gente de servicio, equipos de alquiler y planificación de la flota.
- Servicios de información: localizar el negocio o servicio más cercano (por ejemplo, buscar el cajero más cercano) y el contenido de usuario generado
- Notificación basada en la proximidad: lista de favoritos y la publicidad objetivo.
Utilizando los servicios de rastreo de ubicaciones de Axional Mobile, la base de datos recibirá rastreos de la posición de tus usuarios o vehículos que pueden utilizarse para informar sobre cosas, tales como, distancias, tiempo dedicado a un reparto, consulta de clientes sobre la ubicación de una compra, optimización de rutas, etc.
Dispositivos móviles
Los dispositivos móviles Android&153; pueden utilizarse para solicitar y ver información almacenada en nuestras bases de datos o capturar información sobre una ubicación. Además, se pueden colocar en nuestros sistemas.
Bases de datos
Axional Geospatial funciona con:
- Informix Spatial datablade
- DB2 Spatial Extender
- Oracle Spatial
- Postgres PostGIS
Características clave
- Diseñador de formularios para solicitar y representar datos alfanuméricos y geo-espaciales
- Captura de datos desde dispositivos Android&153;
- Queries espaciales en SQL nativo
- Gramática independiente XML/SQL PostGIS
- Herramienta de migración de bases de datos geo-espaciales desde cualquier base de datos soportada