Archivos Mensuales: septiembre 2016

Selección automática de código en función de atributos de base de datos al cargar Shapefiles o Geomedia

Si cargas una cartografía contenida en una base de datos, como por ejemplo Geomedia o Shapefile, las coordenadas de la geometría son un campo más de entre todos los campos que tiene cada una de las tablas de la base de datos.

Por ejemplo, supongamos un shapefile denominado Via que almacena las geometrías de vías de comunicación:

En la tabla tenemos un identificador de la geometría, la geometría en sí, además de un campo en el que se almacena el número de carriles de la vía y su nombre, tal y como puedes ver a continuación…

ID Geometría* Carriles Nombre
1233 100,100,
110, 100,
2 C230
1234 200,200,
210, 200,
6 M-30
* En realidad en un shapefile las geometrías están almacenadas en el archivo .SHP y no en la propia base de datos, pero existe una relación 1 <-> 1 entre el número de registros en la base de datos y el número de geometrías almacenadas en el archivo .SHP, así que podemos asumir que lo que hay en el .SHP es un campo más de la base de datos.

Podríamos crear una tabla de códigos con el código Vias que simplemente enlace con esta tabla de base de datos. De esta manera Digi3D.NET al cargar el shapefile de vías crearía dos entidades con el código Vias, pero quizás nos interese diferenciar el tipo de vía en función del número de carriles.

Esto podemos hacerlo mediante la opción Condiciones que aparece en la sección Base de datos para cada uno de los códigos que aparecen en la pestaña Codigos del programa Editor de tablas de códigos.

Las condiciones consisten en triplas [campo][operador][valor]. Puedes utilizar los siguientes operadores:

Operador Significado
< Menor
<= Menor o igual
= Igual
>= Mayor o igual
> Mayor

Puedes poner tantas condiciones como quieras (separadas por comas), incluso puedes utilizar el mismo nombre de campo varias veces,  y se deben cumplir todas ellas para que se decida seleccionar un código.

De modo que en nuestro ejemplo tendríamos que indicar las siguientes condiciones:

Código Condición
Carretera Carriles=2
Autopista Carriles>2

Descarga los archivos con los que hemos creado el vídeo del siguiente enlace.

Puedes ver esta funcionalidad en acción en el siguiente vídeo:

Localización inteligente de errores en atributos en Digi3D.NET

Digi3D.NET permite añadir inteligencia a la hora de analizar los atributos de base de datos de manera que se pueden detectar condiciones incompatibles.

Esta inteligencia se puede añadir en la tabla de códigos mediante un disparador que se dispara en el momento de almacenar una entidad. El disparador se encargará de analizar todas las restricciones y de informar a Digi3D.NET que la entidad no se puede almacenar pues si algún atributo o combinación de atributos no cumple con los criterios. En caso de que el disparador informe de alguna incompatibilidad, Digi3D.NET mostrará al usuario un cuadro de diálogo que por un lado mostrará un mensaje de error (proporcionado por el disparador)  y que por otro lado permitirá al usuario corregir el problema modificando los valores de los atributos a almacenar en la base de datos.

Esta inteligencia puede estar basada únicamente en atributos o tener en cuenta las particularidades de la geometría que se está intentando almacenar o incluso de todas las geometrías existentes en el archivo de dibujo.

Por ejemplo se podría detectar como error de atributo sin tener en cuenta la geometría que se está intentando almacenar el caso de que un edificio sea de tipo religioso pero que en tipo de religión se indique desconocido.

Un error de atributo teniendo en cuenta la geometría que se está intentando almacenar podría ser el caso del atributo País en una entidad de tipo Vía de comunicación. Si la geometría está en un rango de coordenadas se puede considerar que la geometría está en España y si está en otro rango de coordenadas se puede considerar que está en Francia. Si digitalizamos una entidad cuyas coordenadas están supuestamente en España y el atributo indica que está en Francia, se puede informar al usuario como un error de atribución.

Un error de atribución que tiene en cuenta la geometría que se está intentando almacenar y las geometrías ya existentes en el archivo de dibujo podría ser el caso del atributo Tipo de un polígono de Instalación. Si el tipo es militar y dentro encontramos una pista deportiva cuya área supera un 80% del polígono de instalación se debe indicar que el atributo Tipo debe ser Deportes.

Las posibilidades son ilimitadas.

En el siguiente vídeo puedes ver estos ejemplos en acción. Si quieres hacerlo tú mismo, puedes descargarte la tabla de códigos con la inteligencia añadida, la base de datos y el archivo de dibujo del siguiente enlace: ControlAvanzadoAtributosBBDD.zip. Debes utilizar la versión de 32 bits para conectarte con la base de datos, pues es Access y por limitaciones impuestas por Microsoft, un programa de 64 bits no puede conectarse con una base de datos Access. Para conectarte con la base de datos, en la pestaña Archivo de dibujo del cuadro de diálogo Nuevo proyecto, debes indicar en Modelo de datos (en la sección Motor de importación/exportación para archivos binarios de doble precisión) la opción CATDBS y en Cadena de conexión debes pulsar el botón de los tres puntos. Eso hará aparecer el cuadro de diálogo común Propiedades de vínculo de datos. Selecciona Microsoft Jet 4.0 OLE DB Provider (que es el proveedor que proporciona conexiones con bases de datos Access) y a continuación pulsa el botón Siguente. En la pestaña  Conexión pulsa el botón de los tres puntos en “Selecciona o escriba el nombre de una base de datos”. Aparecerá el cuadro de diálogo común “Seleccione la base de datos de Access”. Localiza la base de datos y pulsa Abrir. Acepta el cuadro de diálogo y ya has configurado Digi3D.NET para conectarse con la base de datos cuando abras el archivo de dibujo.