Archivo de la etiqueta: base de datos

Conectando con bases de datos SQL Server Compact

Digi3D.NET permite que almacenemos información alfanumérica en bases de datos basadas en archivo (como Access, o SQL Server Compact) o basadas en servidor, como Microsoft SQL Server, Oracle, MySQL, PostgreSQL, …

En ocasiones nos interesará crear una base de datos por cada archivo de dibujo. En este escenario, es posible que nos interese utilizar una base de datos de archivo que se asociará con cada archivo de dibujo.

Tenemos varias posibilidades, una de ellas (la opción clásica) es asociar un archivo Access a cada archivo de dibujo. Esta solución tiene dos inconvenientes:

  • Access no es gratuito, por lo tanto tendremos que adquirir una licencia de esta aplicación para poder crear la base de datos, realizar consultas, …
  • No es compatible con aplicaciones de 64 bits, por lo tanto queda descartado para Digi3D.NET si tenemos instalada la versión de 64 bits

Pero existen otras soluciones. Hoy vamos ha hablar de Microsoft SQL Server Compact.

Un archivo de base de datos Microsoft SQL Server Compact tiene la extensión .sdf.

Este tipo de bases de datos tienen muchas ventajas si las comparamos con Access, entre las que podríamos destacar (aunque hay muchas más):

  • Es compatible tanto con aplicaciones de 64 bits como de 32 bits.
  • Es gratuita.
  • Es espacial (permite almacenar geometrías y consultas espaciales).
  • Permite crear tablas de hasta 4 GB de información (frente a 4 de Access).
  • Permite almacenar cadenas de caracteres de hasta 4000 caracteres (frente a 255 de Access).

Si queremos utilizar una base de datos Microsoft SQL Server Compact tan solo tenemos que instalar un pequeño motor de base de datos en nuestro ordenador. A día de hoy existen dos versiones de este motor de bases de datos:

Si tienes instalado Digi3D.NET en tu equipo, ya tienes instalado Microsoft SQL Server Compact 3.5 SP2, pues es uno de los requisitos necesarios para instalar la aplicación.

Para crear estas bases de datos y realizar consultas SQL sobre ellas disponemos de varias herramientas en función de la versión:

Microsoft SQL Server Compact 3.5 SP2 Microsoft SQL Server Compact 4.0 SP1
SQL Server 2008 R2 Management Studio (Express) (3.5 SP2) Visual Studio 2010 (3.5 SP2)
Visual Studio 2010 (3.5 SP2)
Visual Studio 2010 SP1 + 4.0 Tools (3.5 SP2 + 4.0)
Visual Studio Express 2012 for Web
WebMatrix 2

Si te fijas hay muchas más opciones para la versión 4, pero a mi personalmente me encanta Microsoft SQL Server Management Studio para trabajar con bases de datos. Ni te molestes en intentar conectar con una base de datos Microsoft SQL Server Compact 4.0 con ninguna de las versiones Microsoft SQL Server Management Studio, ni siquiera con la versión 2012. Microsoft decidió que nunca jamás se podrán administrar estas bases de datos con este programa, y en parte tienen razón. Este programa está pensado para servidores de bases de datos completos, con Transact SQL completo, con procedimientos almacenados, con replicación, informes, y un sinfín de cosas que no admiten las bases de datos compact que son algo muy sencillo pensado inicialmente para aplicaciones de telefonía móvil.

NuevoProyectoMostrandoBotonSeleccionDataLinkProperties

Una vez que hemos creado una base de datos SQL Server Compact con cualquiera de estas herramientas (en el formato adecuado, lee el capítulo de Bases de datos del libro Digi3D en profundidad para aprender el esquema de una base de datos compatible con Digi3D.NET), lo único que nos queda es hacer que Digi3D.NET se conecte con nuestra base de datos.

La forma de conectar Digi3D.NET con una base de datos consiste en indicar en la pestaña Archivo de dibujo del cuadro de diálogo Nuevo Proyecto el tipo de Modelo de Datos (a día de hoy podemos seleccionar o CATDBS o Geographics) y en el siguiente campo, especificar la cadena de conexión a la base de datos.

La cadena de conexión es una línea de texto en un formato especial que indica por un lado el proveedor de base de datos (el motor de base de datos, runtime, o como lo queramos llamar), la ruta a la base de datos y opcionalmente una serie de parámetros.

Un ejemplo de cadena de conexión podría ser el siguiente:

Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=PruebaCatDBS;Data Source=.sqlexpress

Si te fijas no es trivial crear estas cadenas de conexión, por eso, existe un cuadro de diálogo común de Windows que nos va a facilitar la tarea de crear cadenas de conexiones. En Digi3D.NET podemos hacer que aparezca este cuadro de diálogo pulsando el botón de los tres puntos que aparece en la ventana en la que se nos solicita la cadena de conexión.

CuadroDialogoDataLinkProperties

Este cuadro de diálogo nos va a permitir seleccionar entre una lista de proveedores de bases de datos instalados en nuestro equipo. Esos proveedores pueden variar en función de la versión de Digi3D.NET, ya que en el caso de ejecutar la versión de 64 bits, no aparecerá el proveedor Microsoft Jet 4.0 OLE DB Provider, que es el utilizado por las bases de datos de Access, lo que significa que con las versiones de 64 bits no podríamos conectarnos con bases de datos de Access.

El único inconveniente es que no vamos a localizar aquí ningún proveedor para Microsoft SQL Server Compact 3.5 SP2 o Microsoft SQL Server Compact 4.0 SP1, de modo que no nos va a quedar más remedio que introducir manualmente la cadena de conexión, y ese es precisamente el objetivo de esta entrada en el blog.

El formato de las cadenas de conexión para estos dos proveedores es la siguiente:

Tipo de conexión Cadena de conexión
SQL Server Compact 3.5 SP2 sin contraseña Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5;Data Source=rutaAlArchivonombreDelArchivo.sdf;
SQL Server Compact 3.5 SP2 con contraseña Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5;Data Source=rutaAlArchivonombreDelArchivo.sdf;SSCE:Database Password=’contraseña’;
SQL Server Compact 4.0 SP1 sin contraseña Provider=Microsoft.SQLSERVER.CE.OLEDB.4.0;Data Source=rutaAlArchivonombreDelArchivo.sdf;
SQL Server Compact 4.0 SP1 con contraseña Provider=Microsoft.SQLSERVER.CE.OLEDB.4.0;Data Source=rutaAlArchivonombreDelArchivo.sdf;SSCE:Database Password=’contraseña’;

De modo que si por ejemplo nuestro archivo de dibujo está almacenado en la ruta C:Trabajos20131h1.bind podríamos tener una base de datos asociada en la ruta C:Trabajos20131h1.sdf mediante la cadena de conexión (suponiendo que la versión de la base de datos es la 3.5): Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5;Data Source=C:Trabajos20131h1.sdf;

Esto tiene el inconveniente de que cada vez que cambiemos de archivo de dibujo, tendremos que cambiar la cadena de conexión para que la conexión sea con la base de datos correspondiente.

Si queremos evitar tener esto, podemos aprovecharnos de los sustituidores de Digi3D.NET para hacer que el programa seleccione automáticamente el nombre de la base de datos en función del nombre del archivo de dibujo mediante la siguiente cadena de conexión: Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5;Data Source=$(RutaArchivoDibujo)$(NombreArchivoDibujoSinExtension).sdf;

Actualizando la base de datos Epsg v7.9 para añadir transformaciones de cambio de datum ED50 -> ETRS89 y ED50 -> WGS84

Este post es avanzado, y supone que acabas de descargar una versión nueva de la base de datos EPSG y la has exportado al formato Microsoft SQL Server Compact tal y como se explica en el post Cómo se ha creado la base de datos geográfica EPSG en formato SQL Server Compact que se instala con Digi3D 2011.

La última versión de los archivos de rejilla de mínima curvatura NTv2 suministrados por el Instituto Geográfico Nacional data del 2009, sin embargo no existe ninguna transformación en la base de datos EPSG v7.9 (la mas moderna a día de hoy 17/04/2012) que utilice este archivo de mínima curvatura.

En este post te explico cómo modificar la base de datos para añadir una transformación que utilice el archivo de mínima curvatura actualizado.

La base de datos EPSG define 12 transformaciones para transformar entre los sistemas de coordenadas geográficos ED50 y ETRS89 y 40 transformaciones para transformar entre ED50 y WGS 84.

Puedes comprobarlo mediante las siguientes consultas SQL:

SELECT COUNT(*)
FROM Coordinate_Operation
WHERE SOURCE_CRS_CODE=4230 and TARGET_CRS_CODE=4258 and COORD_OP_TYPE='transformation';

SELECT COUNT(*)
FROM [Coordinate_Operation]
WHERE SOURCE_CRS_CODE=4230 and TARGET_CRS_CODE=4326 AND COORD_OP_TYPE='transformation';

Muchas de ellas consisten simplemente en desplazamientos geográficos (es decir, transformar de coordenadas geográficas a geocéntricas y realizar un desplazamiento en geocéntricas para luego volver a transformar a geográficas), por lo que tienen poca precisión.

De entre todos los algoritmos para transformar entre sistemas geográficos, el más preciso es el método interpolación mediante una rejilla de mínima curvatura. Esta rejilla le indica al programa: “Para este par de coordenadas latitud, longitud en el sistema de coordenadas de referencia ED50, le corresponde este otro par de coordenadas latitud, longitud en el sistema de coordenadas de referencia ETRS89”. Luego el programa tan solo tiene que interpolar mediante una interpolación bilineal. El resultado es muy preciso (20 cm para el caso de España).

Es responsabilidad de cada país/organismo crear su archivo de rejilla y de publicarlo. Cualquiera podría inventarse su propio formato de rejilla (lo que obligaría a que los desarrolladores de programas de cartografía y sistemas de información geográfica tuvieran que implementar un importador específico para cada formato de rejilla) pero existe uno estandarizado denominado NTv2.

En el caso de España, el organismo encargado de crear y actualizar ese archivo de rejilla es el Instituto Geográfico Nacional que publica este archivo a través de su página en internet: www.ign.es.

Descarga los archivos de rejilla entrando en www.ign.es: en el menú Herramientas de la página web, puedes seleccionar la opción: Rejilla para cambio de Datum entre ED50 y ETRS89 (en formato NTV2). Verás que puedes descargar dos rejillas: una para Península y otra para Baleares. Descarga el archivo Península, comprobarás que el nombre del archivo descargado es PENR2009.gsb.

Como la creación y mantenimiento de los archivos NTv2 depende del centro geográfico nacional de cada país, la base de datos EPSG no distribuye estos datos, sin embargo, Digi3D 2011 incorpora una copia de estos archivos en la carpeta %ProgramData%Digi3D 2011OpenGis, de modo que en ese directorio encontrarás el archivo PENR2009.gsb.

El único inconveniente es que la base de datos original EPSG (la que acabas de descargar de http://www.epsg.org/Geodetic.html no dispone de ninguna transformación que utilice este archivo, únicamente tiene transformaciones que utilizan versiones anteriores de ese archivo.

Vamos a comprobarlo:

La base de datos EPSG dispone de una tabla denominada ‘Coordinate_Operation Method’ que registra los códigos, nombres y descripciones de las distintas transformaciones.

Consultemos el código asociado al algoritmo NTv2 mediante la siguiente consulta SQL:

SELECT * FROM [Coordinate_Operation Method]
WHERE COORD_OP_METHOD_NAME='NTv2';

Puedes comprobar que el algoritmo NTv2 tiene asociado el código 9615.

Podemos consultar también los parámetros que recibe un determinado algoritmo. Comprobemos los parámetros que recibe el algoritmo 9615:

La base de datos EPSG dispone de una tabla ‘Coordinate_Operation Parameter Usage’ que nos indica los parámetros de cada algoritmo. Estos parámetros (como todo en la base de datos EPSG) tienen asignado un código. Disponemos de otra tabla ‘Coordinate_Operation Parameter’ que nos muestra una descripción de cada tipo de parámetro.

Para averiguar los parámetros que recibe la transformación con código 9615 podemos ejecutar la siguiente consulta SQL:

SELECT *
FROM [Coordinate_Operation Parameter Usage]
WHERE COORD_OP_METHOD_CODE=9615;

Eso nos devolverá un único registro indicando que el único parámetro que recibe el algoritmo 9615 es el parámetro cuyo código es el 8656.

Podemos consultar el significado de ese parámetro con la siguiente consulta SQL:

SELECT *
FROM [Coordinate_Operation Parameter]
WHERE PARAMETER_CODE=8656;

Por último, si quieres hacerlo bien, puedes hacerlo con una consulta JOIN de la siguiente manera:

SELECT *
FROM [Coordinate_Operation Parameter Usage] AS A
JOIN [Coordinate_Operation Parameter] AS B
ON A.PARAMETER_CODE = B.PARAMETER_CODE
WHERE A.COORD_OP_METHOD_CODE=9615;

De entre todas las posibles transformaciones (te recuerdo que había 12) entre ED50 y ETRS89 que define la base de datos EPSG, únicamente hay dos que utilicen el algoritmo 9615: La transformación 15895: ED50 to ETRS89 (11) y la operación 15932: ED50 to ETRS89 (12).

Puedes comprobarlo mediante la siguiente consulta SQL:

SELECT *
FROM Coordinate_Operation
WHERE SOURCE_CRS_CODE=4230 and TARGET_CRS_CODE=4258 and COORD_OP_TYPE='transformation' AND COORD_OP_METHOD_CODE=9615;

Si nos leemos los comentarios de estas dos transformaciones, rápidamente averiguamos que la transformación 15895 ha sido sustituida por la 15932, de modo que la que nos interesará utilizar es la 15932, pero tal y como vamos a comprobar muy pronto, esta transformación no nos sirve, pues el archivo de rejilla a que utiliza esta transformación no es “PENR2009.gsb”.

Los parámetros de las transformaciones se almacenan en la tabla ‘Coordinate_Operation Parameter Value’.

Esta tabla almacena los parámetros de todos los algoritmos utilizados en todas las posibles transformaciones especificadas en la base de datos EPSG. Actualmente tiene 15743 registros.

Cada registro tiene varios campos:

COORD_OP_CODE COORD_OP_METHOD_CODE PARAMETER_CODE PARAMETER_VALUE PARAM_VALUE_FILE_REF UOM_CODE

Si comprobamos los registros de esta tabla para el código de operación 15932, comprobaremos que el nombre del archivo de rejilla asignado para esa operación es “SPED2ETV2.gsb”.

SELECT * FROM [Coordinate_Operation Parameter Value] WHERE COORD_OP_CODE=15932;

Por lo tanto esta operación no nos sirve. El archivo “SPED2ETV2.gsb” es el nombre que tenía la versión antigua de los archivos de rejilla, de hecho, la operación 15932 se añadió a la base de datos EPSG con fecha 27-03-2007, y el nombre de archivo “PENR2009” nos hace pensar que este archivo se creó en el año 2009.

Podrías pensar que una solución sería modificar este registro de la base de datos y cambiar la palabra “SPED2ETV2.gsb” por “PENR2009.gsb”, pero esto no se puede hacer porque la base de datos EPSG es inmutable. No se permiten cambios. Podemos añadir información, transformaciones, sistemas de coordenadas, pero nunca cambiar nada.

Así que no nos queda más remedio que crear una transformación nueva.

En la documentación de EPSG te indican que si quieres añadir información, utilices siempre códigos con valores superiores a 32767, por lo tanto vamos a crear una transformación con código 32768 que nos servirá para transformar entre los sistemas de coordenadas geográficos ED50 (4230) y ETRS89 (4326), para la zona de España con el algoritmo 9615 y utilizando como archivo de rejilla NTv2 el archivo “PENR2009.gsb”.

Para ello ejecutaremos la consulta:

INSERT INTO Coordinate_Operation (COORD_OP_CODE, COORD_OP_NAME, COORD_OP_TYPE, SOURCE_CRS_CODE, TARGET_CRS_CODE, COORD_TFM_VERSION, COORD_OP_VARIANT, AREA_OF_USE_CODE, COORD_OP_SCOPE, COORD_OP_ACCURACY, COORD_OP_METHOD_CODE, REMARKS, INFORMATION_SOURCE, DATA_SOURCE, REVISION_DATE, SHOW_OPERATION, DEPRECATED)
VALUES (32768, 'ED50 a ETRS89 (14)', 'transformation', 4230, 4258, 'IGN-Esp v3', 14, 3429, 'For applications to an accuracy of 10-15cm (95% confidence) for Spain mainland and about 4cm (95%) for Balearic Islands.',0.2,9615,'Reemplaza a ED50 to ETRS89(12)','Instituto Geográfico Nacional, www.ign.es', 'OGP', 2009-01-01, 1, 0);

Y ya puestos, y considerando que el sistema de coordenadas geográfico ETRS89 es idéntico al WGS84, vamos a crear una transformación para transformar entre los sistemas de coordenadas geográficos ED50 (4230) y WGS84 (4326), esta vez con código 32769 con la siguiente consulta:

INSERT INTO Coordinate_Operation (COORD_OP_CODE, COORD_OP_NAME, COORD_OP_TYPE, SOURCE_CRS_CODE, TARGET_CRS_CODE, COORD_TFM_VERSION, COORD_OP_VARIANT, AREA_OF_USE_CODE, COORD_OP_SCOPE, COORD_OP_ACCURACY, COORD_OP_METHOD_CODE, REMARKS, INFORMATION_SOURCE, DATA_SOURCE, REVISION_DATE, SHOW_OPERATION, DEPRECATED)
VALUES (32769, 'ED50 a WGS84 (43)', 'transformation', 4230, 4326, 'IGN-Esp v3', 43, 3429, 'For applications to an accuracy of 10-15cm (95% confidence) for Spain mainland and about 4cm (95%) for Balearic Islands.',0.2,9615,'Valor de los parámetros de la transformación ED50 a ETRS89 (14). Asume que ETRS89 y WGS 84 se consideran iguales dentro de la precisión de la transformación. Reemplaza ED50 to WGS 84 (41)','Instituto Geográfico Nacional, www.ign.es', 'OGP', 2009-01-01, 1, 0);

Tan solo nos queda añadir en la tabla ‘Coordinate_Operation Parameter Value’ los parámetros para estas dos transformaciones.

Para ello tan solo tenemos que ejecutar las consultas:

INSERT INTO [Coordinate_Operation Parameter Value]
VALUES (32768, 9615, 8656, NULL, 'PENR2009.gsb', NULL);

INSERT INTO [Coordinate_Operation Parameter Value]
VALUES (32769, 9615, 8656, NULL, 'PENR2009.gsb', NULL);

y ya lo tenemos. Ahora cuando Digi3D detecte que tiene que transformar entre los sistemas de coordenadas de referencia ED50 y ETRS89 o ED50 y WGS 84 nos mostrará esta transformacion en el cuadro de diálogo de posibles transformaciones.

Cómo se ha creado la base de datos geográfica EPSG en formato SQL Server Compact que se instala con Digi3D 2011

Estoy terminando de implementar los sistemas de cordenadas de referencia en Digi3D 2011, y me he encontrado con un problema inesperado: Las consultas SQL que debe ejecutar Digi3D 2011 para realizar determinadas consultas sobre la base de datos geográfica varían en función de si la base de datos está almacenada en un archivo .mdb (de Microsoft Access) o está alojada en una instancia de Microsoft SQL Server.

La base de datos geográfica en formato .mdb se puede utilizar en las versiones de 32 bits de Digi3D 2011 sin ningún problema. Las versiones de 64 bits no tienen esa suerte, ya que no es posible que un programa de 64 bits se conecte con un archivo en formato .mdb.

La única manera que tenían las versiones de 64 bits de conectarse con esa base de datos era creando una base de datos SQL Server y configurar el programa para que se conecte con esta base de datos en vez de con el archivo local .mdb. Tienes instrucciones de cómo realizar esa tarea en el post Base de datos EPSG en Digi3D 2011 edición de 64 Bits.

El problema ha surgido porque con la versión que liberaré esta semana (me imagino que el día 25 a 27 de enero de 2012) en ciertas consultas es necesario saber si el usuario ha marcado alguna operación como visible o no.

Si en un determinado momento Digi3D 2011 necesita transformar una coordenada de un sistema de coordenadas de referencia a otro, tiene que realizar una consulta SQL sobre la base de datos geográfica y ésta le indica de todas las operaciones (cada una con mejor o peor precisión) que existen para transformar coordenadas entre los dos sistemas.

Si se localiza más de una operación, Digi3D 2011 muestra un cuadro de diálogo al usuario indicando que se han localizado múltiples métodos, invitándole a que seleccione el más apropiado.

En ocasiones no queremos que Digi3D 2011 muestre todas las posibles opciones, como por ejemplo en el caso de transformar entre los sistemas de coordenadas de referencia ED50 y ETRS89: siempre nos interesará utilizar la operación que utiliza el algoritmo NTv2 y nunca las que utilizan desplazamientos geocéntricos.

La base de datos dispone de un campo denominado SHOW_OPERATION que en Access es de tipo booleano, pero que en SQL Server se convierte a campo de tipo bit.

Y el problema surgue aquí: Si queremos localizar todas las transformaciones entre los sistemas de coordenadas 4230 y 4258 que sean visibles, con SQL Server tenemos que ejecutar la siguiente consulta:

SELECT *
FROM Coordinate_Operation
WHERE SOURCE_CRS_CODE=4230
AND TARGET_CRS_CODE=4258
AND COORD_OP_TYPE='transformation'
AND SHOW_OPERATION=1

Sin embargo, si la base de datos no está ubicada en un SQL Server, sino que estamos conectados con el .mdb la consulta se realiza de esta otra forma:

SELECT *
FROM Coordinate_Operation
WHERE SOURCE_CRS_CODE=4230
AND TARGET_CRS_CODE=4258
AND COORD_OP_TYPE='transformation'
AND SHOW_OPERATION=True

Si te fijas hay una pequeña diferencia: en SQL Server utilizamos un 1 para filtrar los registros que tienen el campo SHOW_OPERATION a activo, sin embargo con Access tenemos que utilizar un True.

La solución más obvia es olvidarme del archivo .mdb que está desfasado (fíjate cómo de desfasado está que los señores de Microsoft directamente no te dejan conectarte con él en las versiones de 64 bits), pero eso obligaría a instalar un SQL Server Express junto con cada Digi3D 2011. Hasta ahora, así ha sido para las versiones de 64 bits de Digi3D 2011: había que instalar un SQL Server Express (o mejor) en el equipo o en la red de la empresa para que Digi3D 2011 se pudiera conectar con la base de datos geográfica.

Como no quiero forzar a instalar un SQL Server en cada equipo donde se instale Digi3D 2011 (porque habrá entornos en los que sencillamente no se puede, como centros geográficos nacionales con mucha seguridad), no queda más remedio que probar una tercera opción: Convertir la base de datos EPSG a formato Microsoft SQL Server Compact Edition, que es digámoslo así el sustituto de los obsoletos .mdb.

Este formato es un SQL Server en un archivo (con extensión .sdf) y está pensado para mono usuario y tiene la ventaja de que no hay que instalar un servidor, con copiar un par de DLLs junto con la instalación de Digi3D 2011 sobra.

El problema es que no existe ningún asistente, importador o exportador en Microsoft SQL Server Management Studio que convierta o un .mdb o una base de datos .mdf (las de Microsoft SQL Server) en un archivo .sdf.

Se me ocurren tres soluciones:

  1. Crear un guión (pulsando con el botón derecho del ratón en la base de datos EPSG en el panel Object Explorer de Microsoft SQL Server Management Studio, y seleccionando la opción Tasks/Generate scripts… del menú contextual. Crear una nueva base de datos en formato Microsoft SQL Server Compact y ejecutar sobre esta nueva base de datos el guión.
  2. Localizar alguna herramienta por Internet que convierta una base de datos .mdf (la extensión que tienen las bases de datos Microsoft SQL Server) en una con extensión .sdf.
  3. Programar una utilidad que realice la tarea.

La primera solución es compleja, pues el SQL que se genera en el guión no es compatible con SQL Server Compact y habría que corregirlo: añadir por puntos y comas al final de cada entrada, eliminar las cláusulas GO, el comando print que aparece en el guión cada X líneas, …).

La segunda opción es mucho más sencilla siempre y cuando exista alguna utilidad por internet.

La tercera es la última opción, pues debe de existir alguna utilidad por internet, ¡y la hay!, si buscas en Google localizarás un programa denominado SDF Viewer que nos va a solucionar la papeleta. Esta herramienta es de pago, pero permite que la utilicemos 15 días (tiempo más que de sobra para realizar esta práctica).

Vamos a ver cómo he construido la base de datos con extensión .sdf que se copia junto con la instalación de Digi3D 2011 (en la carpeta %ProgramData%Digi3D 2011epsg.sdf).

  1. Descárga e instala la aplicación SDF Viewer.
  2. Ejecuta la aplicación SDF Viewer.
  3. Aparecerá un cuadro de diálogo indicando que quedan X días de prueba. Pulsa la opción Ask Later.
  4. En Tools pulsa la opción From SQL Server.
  5. En el cuadro de diálogo Import From SQL Server, en el campo Server name: teclea la dirección de tu servidor Microsoft SQL Server en el cual tienes la base de datos EPSG (aquella que importaste si seguiste los pasos del post Base de datos EPSG en Digi3D 2011 edición de 64 Bits). Usualmente aquí tienes que poner .sqlexpress
  6. En Authentication: selecciona el método de autenticación de tu instancia de SQL Server. Por defecto es Windows Authentication.
  7. Pulsa el botón Connect.
  8. En Database selecciona la base de datos EPSG.
  9. En Tables pulsa el botón Select All.
  10. Ásegúrate de que está seleccionado el checkbox titulado Include Data.
  11. Pulsa el botón Script.
  12. En el cuadro de diálogo común Guardar Como indica la ubicación al archivo .sqlce que va a generar el programa SDF Viewer con el SQL necesario para crear las tablas y los datos.
  13. Cierra el programa SDF Viewer.

Bien, ahora vamos a crear una base de datos nueva en formato Microsoft SQL Server Compact y la rellenaremos con la información generara con el programa SDF Viewer.

  1. Ejecuta Microsoft SQL Server Management Studio.
  2. En el cuadro de diálogo Connect to Server, en el campo Server type, selecciona SQL Server Compact.
  3. En el campo Database file despliega la lista y selecciona <New database>.
  4. En el cuadro de diálogo Create New SQL Server Compact Database, selecciona la ruta donde crear la base de datos SQL Server Compact y pulsa OK.
  5. Aparecerá un cuadro de diálogo indicando que si estás seguro de crear la base de datos sin protección por contraseña. Confirma pulsando Yes.
  6. Ya está creada la base de datos, pero volverá a aparecer el cuadro de diálogo Create New SQL Server Compact Database. Pulsa Cancel.
  7. Ahora aparecerá el cuadro de diálogo Connect to Server con la ruta a la base de datos que acabas de crear. Pulsa el botón Connect para conectarte a ella.
  8. Arrastra y suelta el archivo .sqlce que creaste en la sección anterior.
  9. Pulsa el botón Execute.

Ya tienes creada la base de datos EPSG en formato Microsoft SQL Server Compact.

El instalador no solo copia esta base de datos en %ProgramData%Digi3D 2011EPSG, sino que además almacena en el registro la ubicación de esta base de datos.

En función de si la versión de Digi3D 2011 es de 32 o de 64 bits la ubicación de la ruta a la base de datos se almacenará en una u otra entradas del registo.
A continuación tienes una tabla que indica dónde se almacena en el registro la cadena de conexión a la base de datos geográfica.

Digi3D 2011 edición de 32 bits Digi3D 2011 edición de 64 bits
HKEY_LOCAL_MACHINESOFTWAREDigi21Digi3D2011AppConfigurationEPSGConnectionString HKEY_LOCAL_MACHINESOFTWAREWow6432NodeDigi21Digi3D2011AppConfigurationEPSGConnectionString

Base de datos EPSG en Digi3D 2011 edición de 64 Bits

Esta entrada ha quedado obsoleta pues con posterioridad a su creación, se convirtió la base de datos a SQL Server Compact que si es compatible con ediciones de 64 bits y no requieren instalar un SQL Server Express. Se mantiene la entrada en el blog como curiosidad histórica.

Digi3D 2011 extrae los parámetros de los distintos sistemas de coordenadas que implementa de la base de datos estándar publicada por “OGP Geomatics Committee”.

Este comité publica periódicamente una base de datos (denominada Geodetic Dataset) en distintos formatos (Microsoft Access 2000, mySQL, Oracle y PostgreSQL).

El instalador de Digi3D 2011 instala una copia de la base de datos Access en el disco duro local y almacena una entrada en el registro para indicarle a Digi3D la cadena de conexión que debe establecer para conectarse con la base de datos Access.

Esta cadena se almacena en:

Sistema operativo Versión de Digi3D Entrada en el registro
32 bits 32 bits HKEY_LOCAL_MACHINESoftwareDigi21Digi3D2011AppConfigurationEPSGConnectionString
64 bits 32 bits HKEY_LOCAL_MACHINESoftwareWow6432NodeDigi21Digi3D2011AppConfigurationEPSGConnectionString
64 bits 64 bits HKEY_LOCAL_MACHINESoftwareDigi21Digi3D2011AppConfigurationEPSGConnectionString

con el siguiente valor:

Sistema operativo Valor almacenado
Windows XP Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=C:Documents and SettingsAll UsersDatos de programaDigi3D 2011 BetaEPSGEPSG_v7_5.mdb
Windows 7 Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=c:ProgramDataDigi3D 2011EPSGEPSG_v7_5.mdb

Si te fijas en la cadena de conexión, se utiliza como proveedor Microsoft.Jet.

Bueno, pues el proveedor Microsoft Jet esconde una “sorpresa”, y es que no es compatible con aplicaciones de 64 bits, así que si queremos ejecutar Digi3D 2011 tendremos que importar la base de datos Access en un servidor de bases de datos que sí que sea compatible con aplicaciones de 64 bits.

A continuación tienes una captura de pantalla del mensaje que muestra Digi3D 2011 edición 64 Bits al ejecutarse en el equipo por privera vez:

La solución más sencilla es instalar (si no lo tienes ya instalado) el fantástico servidor de bases de datos Microsoft SQL Server 2008 Express que puedes descargar de http://www.microsoft.com/express/Database/.

  • Una vez instalado, ejecuta el programa Microsoft SQL Server Management Studio.
  • Aparecerá un cuadro de diálogo titulado Connect to Server.
  • En Server type, selecciona: Database Engine
  • En Server name teclea: .sqlexpress
  • Pulsa el botón Connect
  • En la ventana Object Explorer (que aparece acoplada en la parte izquierda) pulsa con el botón derecho del ratón en Databases.
  • En el menú contextual que aparece, selecciona New database…
  • En el cuadro de diálogo New Database teclea EPSG_v7_6 (o el nombre que quieras) y pulsa el botón OK
  • Abre el arbol Databases en la ventana Object Explorer y comprobarás que ahora aparece tu base de datos. Únicamente nos queda rellenarla con información, pues está recién creada y sin información.
  • Pulsa con el botón derecho del ratón en la base de datos y en el menú contextual selecciona la opción Tasks/Import data….
  • En el asistente SQL Server Import and Export Wizard pulsa Next en la página de bienvenida.
  • En la página Choose a Data Source, en el cuadro de lista Data Source selecciona Microsoft Access
  • En File name, pulsa el botón Browse… y localiza la base de datos.

    En la siguiente tabla puedes ver la ubicación de la base de datos Acces en función del sistema operativo:

    Sistema operativo Ruta
    Windows XP C:Documents and SettingsAll UsersDatos de programaDigi3D 2011 BetaEPSGEPSG_v7_6.mdb
    Windows 7 c:ProgramDataDigi3D2011EPSGEPSG_v7_6.mdb
  • Selecciona la base de datos, acepta el cuadro de diálogo Open y pulsa el botón Next.
  • En la página Choose a Destination selecciona SQL Server Native Client 10.0 en el cuadro de opciones Destination, en Server name teclea .sqlexpress y abajo en Database selecciona la base de datos que habías creado.
  • Pulsa Next
  • En la pagina Specity Table Copy or Query selecciona Copy data from one of more tables or views y pulsa Next.
  • En Select Source Tables and Views selecciona todas las tablas excepto aquellas que comienzan con `qry y pulsa Next.
  • Por último en la página Run Package pulsa el botón Finish y en la página Complete the Wizard pulsa el botón Finish.
  • Verás cómo se importa la base de datos. Una vez finalizado el proceso, pulsa Close.
  • Por último cierra el programa Microsoft SQL Server Management Studio.

Ahora ya puedes configurar Digi3D 2011 para que localice la base de datos.

  • Si tu versión de Digi3D 2011 es de 64 bits, al intentar ejecutar el programa éste te muestra un cuadro de diálogo indicando que no se puede conectar con la base de datos geodésica. Pulsa el botón Especificar una nueva cadena de conexión mediante un cuadro de diálogo.
  • Si tu versión es Digi3D de 32 bits, puedes hacer este cambio en Herramientas/Configuración/Base de datos EPSG, pulsando el botón de los tres puntos.
  • En el cuadro de diálogo Data Link Properties selecciona Microsoft OLE DB Provider for SQL Server y pulsa el botón Next.
  • En la pestaña Connection en el primer punto teclea: .sqlexpress
  • En el segundo punto selecciona Use Windows NT Integrated secirity.
  • En el tercer punto, despliega la lista y selecciona tu base de datos.
  • Pulsa el botón Test Connection para comprobar que todo ha ido bien. Deberá aparecer un cuadro de mensaje indicando que la conexión ha sido satisfactoria.
  • Por último acepta el cuadro de diálogo Data Link Properties y ya has terminado.