El viernes pasado comenzaron a trabajar en una entidad de Colombia con modelos del sensor ADS40 en Digi3D.NET.
El sensor ADS40, trabaja en el sistema de referencia de coordenadas EPSG:4979 tal y como se explica en esta página de la ayuda de Digi3D.NET, sin embargo la cartografía la quieren registrar en el sistema de referencia de coordenadas MAGNA-SIRGAS / Colombia West zone.
En un principio, tan solo tenemos que indicar al crear el archivo de dibujo que el sistema de referencia de coordenadas horizontal es MAGNA-SIRGAS / Colombia West zone, pero al cargar cartografía existente nos indicaron que las coordenadas X e Y estaban intercambiadas.
Con versiones modernas de Digi3D.NET la solución es muy sencilla, tan solo tenemos que indicarle a Digi3D.NET que los ejes los queremos como Este/Norte, y que haga caso omiso a lo que se indica en la base de datos EPSG, tal y como se muestra en la siguiente captura de pantalla:
…pero desafortunadamente el cliente tiene instalada una versión que no permite forzar la orientación de los ejes, así que los sistemas de referencia de coordenadas se crean siempre de forma estándar, y el estándar tal y como te voy a mostrar un poco más adelante indica que primero va la coordenada Y, y a continuación la coordenada .X.
Lo primero que se nos ocurrió fue comprobar los ejes del sistema MAGNA-SIRGAS / Colombia West zone en Digi3D.NET. Para ello, abrimos el panel Archivos de dibujo y pulsamos con el botón derecho del ratón en el archivo de dibujo y seleccionamos la opción Mostrar sistema de referencia de coordenadas horizontal…, lo que hizo aparecer el cuadro de diálogo Parámetros del sistema de referencia de coordenadas horizontal que te muestro a continuación:
Estos parámetros salen de la base de datos EPSG que lleva incluida Digi3D.NET en su instalación, y se puede ver claramente que en Tipo de sistema de coordenadas se indica que los ejes son Norte, Este (viene en inglés), y no Este, Norte. En realidad, tal y como se puede ver en el vídeo al final de esta entrada en el blog, ese texto «Cartesian 2D CS. Axes: ….» no lo crea dinámicamente Digi3D.NET, sino que se extrae como un texto que aparece en la base de datos. Para ver bien el orden de los ejes, podemos consultar la cadena WKT que crea Digi3D.NET para ese sistema de coordenadas:
PROJCS["MAGNA-SIRGAS / Colombia West zone",
GEOGCS["MAGNA-SIRGAS",
DATUM["Marco Geocentrico Nacional de Referencia",
SPHEROID["GRS 1980",6378137,298.257222101,
AUTHORITY["EPSG","7019"]],
AUTHORITY["EPSG","6686"]],
PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],
UNIT["grados",0.01745329251994328,AUTHORITY["EPSG","9122"]],
AXIS["Lat",North],AXIS["Long",East],AUTHORITY["EPSG","4686"]],
PROJECTION["Transverse_Mercator"],
PARAMETER["latitude_of_origin",4.596200416666666],
PARAMETER["central_meridian",-77.07750791666663],
PARAMETER["scale_factor",1],
PARAMETER["false_easting",1000000],
PARAMETER["false_northing",1000000],
PARAMETER["semi_major",6378137],
PARAMETER["semi_minor",6356752.314140356],
UNIT["metros",1,AUTHORITY["EPSG","9001"]],
AXIS["N",North],
AXIS["E",East],
AUTHORITY["EPSG","3115"]]
El usuario allí nos asegura que en el sistema MAGNA-SIRGAS / Colombia West zone la primera coordenada es la X, y la segunda es la Y, de modo que algo debe estar haciendo mal Digi3D.NET, o no. Vamos a analizarlo…
Si creas una cuenta en http://epsg.org/ y te descargas el dataset, verás que distribuyen la base de datos como una base de datos Microsoft Access. Digi3D.NET no puede utilizar un base de datos en formato Microsoft Access porque los programas de 64 bits tienen prohibido acceder a este tipo de bases de datos, así que hace años convertimos esa base de datos en una base de datos Microsoft SQL Server Compact, que tiene la característica de que sí que se puede acceder desde programas de 64 bits (y de 32 bits obviamente). Estas bases de datos tienen extensión .sdf y existen varias versiones. La que se instala con Digi3D.NET es la última versión, la 4.0.
El instalador de Digi3D.NET almacena esta base de datos en la carpeta %ProgramData%\[versión del programa]\OpenGis y tiene como nombre: epsg_es_ES.sdf si nuestra instalación es en español o epsg_en_US.sdf si nuestra instalación es es inglés.
Podemos abrir archivos .sdf versión 4.0 con una herramienta gratuita de Microsoft denominada Microsoft WebMatrix 3.0.
Instala el programa y sigue los siguientes pasos:
- Ejecuta el programa Microsoft WebMatrix. Te mostrará una página inicial con tres botones: My sites, New y Open.
- Pulsa el botón Open. Aparecerá un menú contextual con varias opciones.
- Selecciona la opción Folder en el menú contextual. Aparecerá un cuadro de diálogo para seleccionar la carpeta a abrir.
- Selecciona la carpeta en la que está la base de datos EPSG y pulsa aceptar. Comprobarás que aparecen en el panel lateral izquierdo los archivos disponibles en dicha carpeta, entre ellos el archivo .sdf.
- Haz doble clic en el archivo .sdf. Comprobarás que cambia el menú y te muestra iconos relacionados con base de datos.
- Pulsa el botón New Query (nueva consulta). Se creará una ventana que te va a permitir teclear consultas SQL.
- Copia la siguiente consulta SQL y pulsa el botón Execute:
SELECT * FROM [Coordinate Reference System] WHERE [COORD_REF_SYS_CODE]=3115
Comprobarás que aparecen abajo los parámetros del sistema de referencia de coordenadas MAGNA-SIRGAS / Colombia West Zone. Entre ellas el código del sistema de coordenadas asociado, que es 4500.
- Ahora vamos a ver los ejes del sistema de coordenadas 4500, Para ello teclea la siguiente consulta:
SELECT * FROM [Coordinate Axis] WHERE COORD_SYS_CODE=4500
Comprobarás que aparecen dos ejes: El eje E y el eje N. En un principio aparece en el orden en el que le interesa al usuario, es decir, primero la coordenada X (este) y luego la coordenada Y (norte), pero en bases de datos el orden en el que aparecen los registros no vincula nada, quizás esta misma consulta con otro sistema de gestos de bases de datos muestre a información en otro orden. Los señores del EPSG lo saben, por eso añadieron un campo denominado ORDER en la tabla COORD_SYS_CODE, y si te fijas, el orden está mal: En el eje Este aparece un 2 y en el eje Norte aparece un 1.
De hecho, Digi3D.NET no utiliza la consulta SQL que te he indicado en este paso para averiguar el nombre de los ejes, sino que utiliza la siguiente:
SELECT * FROM [Coordinate Axis] WHERE COORD_SYS_CODE=4500 ORDER BY [Order]
Si la ejecutas, comprobarás que el primer eje es el Norte y el segundo el Este. Esta es la causa por la cual Digi3D.NET está creando los ejes de forma incorrecta. En la base de datos EPSG viene mal. Vamos a solucionarlo.
- Tenemos que cambiar el valor de ORDER de los registros 44 (el registro para el eje Norte del sistema de referencias 4500 que representa el eje Norte) y cambiar el valor a 2, y poner un valor 1 en el registro 43 que representa el eje Este para el sistema de coordenadas 4500.
Para ello ejecutaremos las siguientes consultas SQL:UPDATE [Coordinate Axis] SET [ORDER]=1 WHERE COORD_AXIS_CODE=43 UPDATE [Coordinate Axis] SET [ORDER]=2 WHERE COORD_AXIS_CODE=44
y asunto solucionado.
Puedes ver cómo lo hago en el siguiente vídeo: