Archivo de la etiqueta: avanzado

Solucionando problemas con los Sistemas de Referencia de Coordenadas colombianos

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:

ejes en src proyectados

…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:

Parámetros del SRC Magna-Sirgas

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:

  1. Ejecuta el programa Microsoft WebMatrix. Te mostrará una página inicial con tres botones:  My sites, New y Open.
  2. Pulsa el botón Open. Aparecerá un menú contextual con varias opciones.
  3. Selecciona la opción Folder en el menú contextual. Aparecerá un cuadro de diálogo para seleccionar la carpeta a abrir.
  4. 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.
  5. Haz doble clic en el archivo .sdf. Comprobarás que cambia el menú y te muestra iconos relacionados con base de datos.
  6. Pulsa el botón New Query (nueva consulta). Se creará una ventana que te va a permitir teclear consultas SQL.
  7. 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.

  8. 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.

  9. 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:

 

 

 

 

 

 

Truco: Haz que Digi3D.NET consuma menos memoria y arranque más deprisa

Cuando instalas Digi3D.NET en tu equipo el instalador activa el 100% de las funcionalidades de éste activando todas las extensiones disponibles. Esto hace que el programa cargue muchas DLLs que posiblemente nunca has utilizado y que jamás vas a utilizar, y repercute en el tiempo de carga de la aplicación y en el consumo de memoria de éste.

Afortunadamente podemos deshabilitar los componentes que no utilizamos y configurar el programa a nuestra medida para hacer que éste cargue más rápido y que consuma menos memoria.

Digi3D.NET al arrancar busca en el registro de Windows las extensiones a cargar y carga todas las que estén habilitadas.

Vamos a ver las distintas familias de extensiones disponibles y cómo podemos indicar en el registro que no se cargue una extensión en particular.

Extensiones para la ventana fotogramétrica:

Cuando carga el módulo de Digi3D, éste se pone a cargar extensiones, y sus extensiones son los distintos sensores. Algunos sensores a su vez pueden tener sus propias extensiones.

Veamos en la siguiente tabla la ubicación de cada una de estas extensiones:

Extensión Clave del registro ¿Tiene extensiones propias?
Sensor ADS HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\Extensiones\Digi3D.ADS40Sensor No
Sensor cónico HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\Extensiones\Digi3D.ConicSensor Si
Sensor Ortofoto HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\Extensiones\Digi3D.Orthophoto  No
Sensor satelital HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\Extensiones\Digi3D.Rpc Si
Sensor VM Quasi Panoramic HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\Extensiones\Digi3D.VMQuasiPanoramic  No
Web Map Service HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\Extensiones\Digi3D.WMS No
Web Map Tile Service HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\Extensiones\Digi3D.WMTS No

Los sensores Cónico y Satelital tienen sus propias extensiones, que son las extensiones encargadas de importar orientaciones de distintos formatos de archivo.

Veamos la ubicación de las extensiones del sensor cónico:

Extensión Clave del registro
AeroOffice HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\Extensiones\Digi3D.ConicSensor\Extensiones\Camaras\AeroOffic
Digi3D HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\Extensiones\Digi3D.ConicSensor\Extensiones\Camaras\Digi3D
Dvp HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\Extensiones\Digi3D.ConicSensor\Extensiones\Camaras\Dvp
EspaKernel HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\Extensiones\Digi3D.ConicSensor\Extensiones\Camaras\EspaKernel
Imu HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\Extensiones\Digi3D.ConicSensor\Extensiones\Camaras\Imu
Lps HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\Extensiones\Digi3D.ConicSensor\Extensiones\Camaras\Lps
PatB HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\Extensiones\Digi3D.ConicSensor\Extensiones\Camaras\PatB
Pix4D HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\Extensiones\Digi3D.ConicSensor\Extensiones\Camaras\Pix4D
RapidCal HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\Extensiones\Digi3D.ConicSensor\Extensiones\Camaras\RapidCal
Summit Evolution HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\Extensiones\Digi3D.ConicSensor\Extensiones\Camaras\Summit

y a continuación las extensiones del sensor satelital:

Extensión Clave del registro
Ikonos HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\Extensiones\Digi3D.Rpc\Extensions\Digi3D.Rpc.Ikonos
Inpho HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\Extensiones\Digi3D.Rpc\Extensions\Digi3D.Rpc.Inpho
Isd HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\Extensiones\Digi3D.Rpc\Extensions\Digi3D.Rpc.Isd
Lps HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\Extensiones\Digi3D.Rpc\Extensions\Digi3D.Rpc.Lps
Nitf HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\Extensiones\Digi3D.Rpc\Extensions\Digi3D.Rpc.Nitf
Pleyades HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\Extensiones\Digi3D.Rpc\Extensions\Digi3D.Rpc.Pleyades
Socet Set HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\Extensiones\Digi3D.Rpc\Extensions\Digi3D.Rpc.SocetSet
Summit Evolution HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\Extensiones\Digi3D.Rpc\Extensions\Digi3D.Rpc.SummitEvolution

Extensiones para la ventana de dibujo:

DigiNG tiene dos familias de extensiones:

  • Proveedores de órdenes.
  • Importadores/exportadores de archivos de dibujo.

Veamos la ubicación para los distintos proveedores de órdenes:

Extensión Clave del registro
Motor de órdenes .NET HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\DigiNG\Extensiones\DigiNG.Interop
Bases de datos HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\DigiNG\Extensiones\DigiNG.OrdenesBaseDatos
Modelos digitales del terreno HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\DigiNG\Extensiones\DigiNG.OrdenesMDT
Raster HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\DigiNG\Extensiones\DigiNG.OrdenesRaster
Topologia HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\DigiNG\Extensiones\DigiNG.OrdenesTopologia
Pleyades HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\Extensiones\Digi3D.Rpc\Extensions\Digi3D.Rpc.Pleyades
Socet Set HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\

y a continuación la ubicación de los distintos importadores de archivos de dibujo:

Extensión Clave del registro
DEMS de ArcGis HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\DigiNG\IO\Digi21.Io.ArcGis.Dem
Archivos ASCII clásicos de Digi HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\DigiNG\IO\Digi21.Io.AsciiDigi
Archivos binarios clásicos de Digi HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\DigiNG\IO\Digi21.Io.Bin
Archivos binarios de doble precisión HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\DigiNG\IO\Digi21.Io.BinDouble
Archivos separados por comas HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\DigiNG\IO\Digi21.Io.Csv
Archivos DGN HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\DigiNG\IO\Digi21.Io.DGN
Archivos DWG HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\DigiNG\IO\Digi21.Io.DWG
Archivos Geo JSON HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\DigiNG\IO\Digi21.Io.GeoJSON
Archivos KML HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\DigiNG\IO\Digi21.Io.KML
Archivos Kork HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\DigiNG\IO\Digi21.Io.Kork
Archivos LAS HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\DigiNG\IO\Digi21.Io.Las
Archivos MDTopX HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\DigiNG\IO\Digi21.Io.Mdt
Imágenes (ortofotos, etc) HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\DigiNG\IO\Digi21.Io.Raster
Archivos Shapefile HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\DigiNG\IO\Digi21.Io.Shp
Archivos Scalable Vector Graphics HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\DigiNG\IO\Digi21.Io.Svg
Conexiones con Web Map Service HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\DigiNG\IO\Digi21.Io.Wms
Archivos XYZ HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\DigiNG\IO\Digi21.Io.Xyz

¿Cómo deshabilitar la carga de una extensión?

Todas las claves enumeradas en las tablas anteriores tienen un valor denominado Activated. Si este valor tiene asignado un 0 la extensión en particular no se carga, de manera que para hacer que Digi3D.NET no cargue el sensor VM Quasi Panoramic, lo único que tenemos que hacer es asignar el valor 0 al valor: HKEY_LOCAL_MACHINE\SOFTWARE\Digi21\Digi3D.NET\Digi3D\Extensiones\Digi3D.VMQuasiPanoramic\Activated.

Puedes ver cómo deshabilito casi todas las extensiones de Digi3D.NET en el siguiente vídeo: