Normalmente, las entidades se simbolizan en un mapa basándose en sus valores de atributos. Por ejemplo, ciudades simbolizadas mediante la población o carreteras simbolizadas mediante clasificaciones de carreteras. A veces es necesario simbolizar las entidades mediante valores agregados calculados. Algunos ejemplos de valores calculados son los valores mínimos, los valores máximos, los valores medios o los totales. Estos son valores que se calculan a partir de los atributos de un conjunto agregado de valores.
Escenarios de datos temporales
Hay dos escenarios principales en los que resulta útil simbolizar datos con valores agregados.
Datos de estaciones con una serie temporal
Se trata de los datos de una cantidad que cambia y que se registra en una ubicación con el paso del tiempo. Las entidades se observan, se recopilan o se prevén en esas ubicaciones a lo largo del tiempo a intervalos regulares o irregulares. Algunos ejemplos son la temperatura, las lluvias, el nivel de agua, la salinidad y las descargas medidas en estaciones meteorológicas o en estaciones de supervisión situadas a lo largo de arroyos.
Puede que desee simbolizar las entidades de la estación meteorológica por el total de lluvias de julio o por la temperatura anual más alta o más baja. Para visualizar los datos de esta forma, modele los datos para que las ubicaciones fijas se almacenen en una clase de entidad y los datos observados se almacenen en una tabla relacionada, junto con la atribución de fecha y hora.
Datos dispersos con registros de tiempo
Se trata de entidades que representan eventos ocurridos en un punto temporal concreto. Por ejemplo, ubicaciones de tornados, direcciones de clientes, pacientes ingresados en hospitales y ubicaciones de delitos.
Puede que desee ver el total de pérdidas causadas por los tornados, el total de compras o el total de pacientes agregados a entidades poligonales como, por ejemplo, provincias, distritos u otros límites administrativos. Para visualizar los datos de esta forma, modele los datos para que las ubicaciones se almacenen en una clase de entidad con atribución de fecha y hora.
Preparar los datos para la visualización agregada
Para visualizar entidades con resultados agregados, tenga en cuenta lo siguiente:
- Tipo de agregación: determine si se deben mostrar los totales, los valores mínimos, máximos o medios, o cualquier otra métrica.
- Visualizar entidades: determine las entidades que se deben mostrar en los resultados agregados. Estas pueden ser iguales o distintas a las entidades con observaciones medidas. Por ejemplo, puede visualizar el total de lluvias anuales en cada estación meteorológica o el total de lluvias anuales (medidas en entidades de puntos de una determinada estación meteorológica) basándose en un condado o en los límites de una cuenca hidrográfica.
- Parámetros de consulta:
- Tiempo: determine la extensión temporal y el intervalo de tiempo con los que se van a mostrar los resultados agregados. Utilice el control deslizante de tiempo para definirlos dinámicamente. Por ejemplo, para los resultados agregados diarios, defina la extensión temporal y el intervalo de tiempo en el control deslizante de tiempo en un día.
- Rango: puede que desee agregar resultados solo para un subconjunto de entidades. Por ejemplo, para agregar mediciones de salinidad entre 0 y 50 metros y entre 50 y 75 metros, utilice un parámetro de rango y el control deslizante de rango.
- Filtros de consulta: para ver los patrones de los datos delictivos agregando el tipo de delito a cada distrito policial, utilice un parámetro discreto para establecer un filtro de consulta.
Ejemplo de resultados agregados
Supongamos que existe una clase entidad llamada weather_stations que almacena las ubicaciones de las estaciones meteorológicas. La entidad de cada estación se identifica de forma exclusiva mediante el valor almacenado en el campo station_id. Este campo se utiliza para enlazar las estaciones con los registros de observación relacionados en una tabla llamada observed_rainfall. Esta tabla almacena los registros de las lluvias observadas, recopilados durante un tiempo en la misma ubicación. Se incluye el campo station_id para vincular con la clase de entidad de las estaciones; el campo rainfall_cm, que almacena las precipitaciones diarias en centímetros; y el campo collection_date, que almacena la fecha de los eventos de precipitaciones. El objetivo es calcular el total de lluvias durante un determinado período (por ejemplo, un mes, un año o cualquier extensión temporal personalizada) en cada estación y simbolizar las estaciones mediante el total de lluvias calculado para esa extensión temporal. Para realizarlo existen dos enfoques.
Calcular los resultados agregados dinámicamente con parámetros de capa de consulta
Este es el enfoque más flexible de los dos y garantiza que siempre se van a mostrar los resultados más actuales. Puede utilizar las funciones de agregación de SQL de la base de datos y las funciones de unión. Para ello, en ArcGIS Pro, debe crear una capa de consulta.
No obstante, este enfoque tiene las siguientes desventajas. Entre ellas se incluyen:
- Carga adicional en la base de datos porque los resultados agregados se calculan cada vez que navega por el mapa, utiliza el control deslizante de tiempo o abre la tabla de atributos.
- Requiere que los datos estén almacenados en una base de datos corporativa. Este enfoque no se puede utilizar con geodatabases de archivos ni con shapefiles.
Si sus datos se actualizan con frecuencia, plantéese la posibilidad de transferir los datos a una base de datos corporativa y de aceptar la carga adicional en la base de datos.
- En la pestaña Mapa del grupo Capa, abra el menú Agregar datos y haga clic en Capa de consulta.
- En el cuadro Consulta, cree una consulta SQL que devuelva el resultado agregado.
Seleccione el total de lluvias para cada estación en la tabla observed_rainfall.
SELECT station_id, SUM(rainfall_cm) AS total_rainfall FROM observed_rainfall GROUP BY station_id
Una los resultados a la clase de entidad weather_stations. De esta forma se obtiene el total de lluvias utilizando todos los registros de la tabla observed_rainfall.
SELECT w.*, r.total_rainfall FROM weather_stations AS w INNER JOIN (SELECT station_id, SUM(rainfall_cm) AS total_rainfall FROM observed_rainfall GROUP BY station_id) AS r ON w.station_id = r. station_id
Defina la extensión temporal en la cláusula WHERE para calcular los resultados agregados entre el 1 de junio de 2016 y el 30 de junio de 2016.
SELECT w.*, r.total_rainfall FROM weather_stations AS w INNER JOIN (SELECT station_id, SUM(rainfall_cm) AS total_rainfall FROM observed_rainfall WHERE collection_date >= '6/1/2016' AND collection_date <= '6/30/2016' GROUP BY station_id) AS r ON w.station_id = r.station_id
- Haga clic en Siguiente para completar el resto de instrucciones en el cuadro de diálogo Nueva capa de consulta y agregue la capa de consulta al mapa actual.
- Simbolice la capa para mostrar las estaciones meteorológicas con el total de lluvias en cada ubicación para junio de 2016. Por ejemplo, puede definir el tamaño de las entidades según el total de lluvias utilizando símbolos graduados o proporcionales o puede utilizar variaciones de color para cada estación mediante símbolos graduados o de color sin clasificar.
Si desea cambiar la extensión temporal, por ejemplo, para ver la misma visualización pero desde el 1 de agosto hasta el 15 de agosto, deberá abrir el origen de la capa de consulta y cambiar la cláusula WHERE. Esto puede resultar algo engorroso, así que le recomendamos que utilice el control deslizante de tiempo para realizar este cambio. Para utilizar el control deslizante de tiempo para modificar la cláusula WHERE, deberá utilizar los parámetros de la sentencia SQL.
- Haga clic con el botón derecho en la capa en el panel Contenido y haga clic en Propiedades .
- En la pestaña Origen, en la fila Consulta de la tabla, haga clic en Editar consulta . La consulta se visualiza en el cuadro de texto Consulta.
Sugerencia:
Para que el texto de la consulta sea más fácil de leer, puede ampliarlo pulsando la tecla Ctrl mientras gira la rueda del ratón hacia delante.
- Reemplace WHERE collection_date >= '6/1/2016' AND collection_date <= '6/30/2016' por un parámetro de rango. Los parámetros de rango se declaran con el prefijo ::r:.
La cláusula WHERE se reemplaza por un parámetro de rango llamado TimeVar.
SELECT w.*, r.total_rainfall FROM weather_stations AS w INNER JOIN (SELECT station_id, SUM(rainfall_cm) AS total_rainfall FROM observed_rainfall WHERE ::r:TimeVar GROUP BY station_id) AS r ON w.station_id = r.station_id
- Los parámetros aparecen en la consulta SQL en negrita e incluyen un icono junto a ellos. Haga clic en el icono para definir las propiedades del parámetro como sigue:
- Campo o expresión: collection_date
- Tipo de datos: Fecha
- Valores predeterminados: Activados
- Rango de valores predeterminados: 6/1/2016 a 6/30/2016
- Haga clic en Hecho.
- En el cuadro de diálogo Editar consulta, haga clic en Validar para asegurarse de que no hay errores.
La capa ahora está habilitada para el tiempo porque el parámetro de rango hace referencia a un campo de fecha y hora. Las capas habilitadas para el tiempo se pueden controlar con el control deslizante de tiempo. Por ejemplo, utilice el control deslizante para elegir una extensión temporal y las estaciones meteorológicas se mostrarán con el total de lluvias calculado dinámicamente para esa extensión temporal.
- Para el total mensual, defina el valor de Intervalo de tiempo actual y Intervalo de paso en un mes.
- Para una media acumulada, defina el valor de Intervalo de tiempo actual en un mes y el Intervalo de paso en un día. En este caso, cada vez que haya clic en un intervalo en el control deslizante de tiempo, este se mueve al siguiente día y muestra los resultados para un mes desde ese día.
Sugerencia:
En la tabla de atributos, en la pestaña Vista, active los filtros de Tiempo y Extensión para mostrar solo las entidades que están visibles en el mapa. De lo contrario, los resultados se calcularán para todas las entidades de toda la tabla, tarea que puede tardar si la tabla contiene muchos registros.
Calcular previamente los resultados
Este enfoque es idóneo cuando trabaja con datos que apenas se actualizan y con una extensión temporal predefinida aceptable. En este caso, calcule previamente los resultados agregados para disminuir la carga en la base de datos cada vez que se actualiza el mapa, se abre una tabla de atributos o se consulta la capa.
Estas son algunas de las desventajas de este enfoque:
- Debe realizar estos pasos cada vez que se actualizan los datos.
- No es flexible. Para visualizar entidades con resultados semanales y anuales, por ejemplo, necesita dos tablas separadas: una para almacenar los resultados agregados para una semana y otra para almacenar los resultados anuales.
- No puede utilizar el control deslizante de tiempo con este enfoque.
Hay dos formas de calcular previamente resultados agregados.
Utilizar el geoprocesamiento
En el ejemplo siguiente se detallan los pasos para calcular previamente la media mensual de lluvias para cada estación meteorológica utilizando herramientas de geoprocesamiento.
- Agregue un nuevo campo de tipo entero a la clase de entidad denominada month para representar el mes.
- Utilice la herramienta Calcular campo para actualizar los registros.
Defina el parámetro Expresión en month = getMonth(!DateTime!).
Introduzca lo siguiente en el parámetro Codeblock. En este ejemplo, v es el valor del atributo datetime.
from datetime import datetime def getMonth(v): d = datetime.strptime(v, "%m/%d/%Y") return d.month
- Utilice la herramienta Estadísticas de resumen para crear una tabla con los resultados resumidos. En este ejemplo, el resumen es el total mensual de lluvias para cada estación. Introduzca los parámetros como sigue:
- Campo de estadísticas: elija el campo que desee resumir. En este ejemplo, es el campo de lluvias.
- Tipo de estadística: elija SUM para calcular el total de lluvias.
- Campo de caso: elija los campos station_id y month.
- Utilice la herramienta Campo de unión o la herramienta Agregar unión para unir los registros de la tabla de resumen a la capa de entidades.
- Visualice la capa en el mapa con una consulta de definición para ver los resultados para un determinado mes. Por ejemplo, para ver los resultados solo de mayo, utilice una consulta de definición donde Month = 5.
Utilizar funciones de base de datos
Si sus datos están almacenados en una base de datos corporativa, puede utilizar una consulta SQL para calcular previamente resultados agregados o resumidos y agregarlos en una tabla aparte.
- Ejecute la siguiente consulta SQL en un cliente de base de datos. Calcula la media mensual para cada estación meteorológica. La consulta presupone que existe un campo que almacena valores enteros para representar un mes.
SELECT station_id, month, SUM(rainfall_cm) AS total_rainfall INTO avg_monthly_rainfall FROM observed_rainfall GROUP BY station_id, month
- Si la base de datos es una geodatabase, registre la tabla en la geodatabase para obtener un rendimiento óptimo y una la tabla a la clase de entidad.
Seleccione la capa de entidades en el panel Contenido. En la pestaña Capa de entidades, en la pestaña Datos del grupo Relación, haga clic en Uniones y haga clic en Agregar unión.
- Si no es una geodatabase, debe elegir una de las siguientes estrategias:
- Cree una vista en la base de datos que una la tabla que contiene las geometrías con la tabla de resumen recientemente creada.
- Cree una capa de consulta y defina la unión en el origen de la capa de consulta.
- Visualice la capa en el mapa con una consulta de definición para ver los resultados para un determinado mes. Por ejemplo, para ver los resultados solo de mayo, utilice una consulta de definición donde Month = 5.
Sugerencia:
Puede utilizar el programador de Windows para programar la ejecución de una tarea a intervalos regulares para calcular previamente los resultados.