Notas de desarrollo de Qt+GDAL (1): compile la biblioteca GDAL, cree el entorno de desarrollo y la demostración básica en mingw32 del sistema de Windows

Si el artículo es un artículo original, indique la fuente del artículo original al reproducirlo.
La dirección del blog de este artículo: https://hpzwl.blog.csdn.net/article/details/131931309

Red Fatty Network Technology Blog Encyclopedia: La colección de tecnología de desarrollo (incluida la tecnología práctica Qt, Raspberry Pi, 3D, OpenCV, OpenGL, ffmpeg, OSG, microcomputadora de un solo chip, combinación de software y hardware, etc.) se actualiza continuamente...

Columna de desarrollo de Qt: tecnología de desarrollo de bibliotecas de tres partes

Anterior: No más
Siguiente: Estén atentos...


prefacio

  El desarrollo del terminal de posicionamiento global de Beidou se realiza en el sistema Kirin, y la herramienta de depuración debe ser una versión de Windows para facilitar la corrección de pruebas. El Beidou GPS envía las coordenadas geodésicas, y la aplicación necesita las coordenadas de latitud y longitud, por lo que debe ser convertido. Puede usar la fórmula para convertir, pero antes involucró montañas. Utilizó inteligentemente WG para un proyecto, y finalmente eligió la biblioteca GDAL para la conversión.

Aviso

  Si el lector no requiere mingw32, se recomienda no utilizar la versión mingw32 de dgal. El proceso de compilación es muy tortuoso.


blog relacionado

  " Notas de desarrollo del sistema Kylin (12): Compile la biblioteca GDAL en el sistema Kylin doméstico, cree un entorno de desarrollo básico y una demostración básica" "Notas de desarrollo Qt +
  GDAL (1): Compile la biblioteca GDAL en el sistema Windows mingw32, cree un entorno de desarrollo y una demostración de base


Introducción a las coordenadas geodésicas

descripción general

  Las coordenadas geodésicas son las coordenadas del elipsoide de referencia en el levantamiento geodésico. La posición del punto P del terreno se expresa mediante la longitud L de la tierra, la latitud B de la tierra y la altura H de la tierra.

principio

  Cuando el punto está en el elipsoide de referencia, solo se representa mediante la longitud geodésica y la latitud geodésica. La longitud geodésica es el ángulo entre el plano geodésico que pasa por el punto y el plano geodésico de origen (el plano meridiano que pasa por el Observatorio de Greenwich). Se estipula que contando desde el plano meridiano inicial, la longitud este de 0° a 180° se denomina longitud este; la longitud oeste de 0° a 180° se denomina longitud oeste. La latitud geodésica es el ángulo entre la línea normal que pasa por el punto y el plano ecuatorial, se estipula que a partir del plano ecuatorial, la latitud norte de 0° a 90° del plano ecuatorial se denomina latitud norte, la latitud sur desde 0° a 90° se llama latitud sur. La altura geodésica es la distancia desde el punto del suelo a lo largo de la normal hasta el elipsoide de referencia.

Sistema de coordenadas Beijing 54: BJZ54

  El sistema de coordenadas Beijing 54 (BJZ54) significa que el sistema de coordenadas Beijing 54 es el sistema de coordenadas geodésicas del ginseng. Un punto en la tierra se puede ubicar por la longitud L54, la latitud M54 y la altura geodésica H54. Se basa en el elipsoide de Krasovsky. El sistema de coordenadas resultante después del ajuste local.

  • Eje semi-mayor a = 6378245m
  • Eje semi-menor b = 6356863.0188m
  • Primera excentricidad al cuadrado e2 = 0.006693421622
  • Planitud α =1/298.3

Sistema de coordenadas geodésicas mundial: WGS-84

  El sistema de coordenadas WGS-84 es el sistema de coordenadas geodésicas mundial, su origen de coordenadas está en el centro de la tierra y se adopta el elipsoide WGS-84 (sistema de coordenadas geodésicas mundial de 1984).
  El sistema de coordenadas WGS-84 es un sistema de coordenadas geodésicas desarrollado y determinado por el Departamento de Defensa de EE. UU., y es un sistema de coordenadas terrestres de protocolo.
  La definición del sistema de coordenadas WGS-84 es: el origen es el centro de masa de la tierra, y el eje Z del sistema de coordenadas espacial rectangular apunta a la dirección del polo terrestre (CTP) definida por BIH (1984.0) , que es el origen del acuerdo internacional CIO, recomendado conjuntamente por la IAU y la IUGG. El eje X apunta a la intersección del meridiano de cero grados definido por el ecuador BIH y CTP, y el eje Y y el eje Z forman un sistema de coordenadas de mano derecha.
  El elipsoide WGS-84 adopta los valores recomendados de las constantes de medida del 17º Congreso de la Unión Internacional de Geodesia y Geofísica, y utiliza dos parámetros geométricos básicos de uso común:

  • Eje semi-mayor a = 6378137m
  • Eje semi-menor b = 6356752.3142m
  • Primera excentricidad al cuadrado e2 = 0.00669437999013
  • Planitud α= 1/298.257223563

Sistema Nacional de Coordenadas Geodésicas: CGCS2000

  El Sistema Nacional de Coordenadas Geodésicas 2000 es el último sistema nacional de coordenadas geodésicas en mi país. El nombre en inglés es China Geodetic Coordinate System 2000, y la abreviatura en inglés es CGCS2000.
  El origen del sistema de coordenadas geodésicas nacional 2000 es el centro de masa de toda la tierra, incluidos el océano y la atmósfera; el eje Z del sistema de coordenadas geodésicas nacional 2000 apunta desde el origen hasta la dirección del polo de referencia terrestre de la época 2000.0 , y la dirección de esta época la da el International Time Bureau La época fija es el cálculo de orientación inicial de 1984.0, y la evolución temporal de la orientación asegura que no habrá una rotación global residual en relación con la corteza. forman un sistema de coordenadas ortogonales de mano derecha. Utilice la escala en el sentido de la relatividad general.

  • Eje semi-mayor a = 6378137m
  • Eje semi-menor b = 6356752.314m
  • Primera excentricidad al cuadrado e2 = 0.00669438002290
  • Planitud α = 1/298.257222101

biblioteca GDAL

descripción general

  GDAL (Biblioteca de abstracción de datos geoespaciales) es una biblioteca de conversión de datos espaciales ráster de código abierto bajo el acuerdo de licencia X/MIT. Utiliza un modelo de datos abstracto para expresar los diversos formatos de archivo admitidos. También tiene una colección de herramientas de línea de comandos para la transformación y manipulación de datos. OGR es una bifurcación del proyecto GDAL que brinda soporte para datos vectoriales. Hay muchos productos GIS conocidos que utilizan la biblioteca GDAL/OGR, incluidos ARCGIS 9.3 de ESRI, Google Earth y el sistema GRASS GIS multiplataforma. Utilizando la biblioteca GDAL/OGR, el sistema de gestión de datos geoespaciales basado en Linux puede proporcionar soporte para datos de archivos vectoriales y ráster.

Características

  • GDAL brinda soporte para una variedad de datos ráster, incluidos Arc/Info ASCII Grid (asc), GeoTiff (tiff), Erdas Imagine Images (img), ASCII DEM (dem) y otros formatos.
  • GDAL utiliza un modelo de datos abstractos (modelo de datos abstractos) para analizar los formatos de datos que admite. El modelo de datos abstractos incluye conjuntos de datos, sistemas de coordenadas, transformaciones de coordenadas geográficas afines (Transformación geográfica afín) y puntos de control geodésico (GCP). Metadatos, ráster Banda, Tabla de colores, Dominio de subconjuntos de datos, Dominio de estructura de imagen, Dominios XML.
  • Clase GDALMajorObject: un objeto con metadatos.
  • Clase GDALDdataset: generalmente una colección de bandas ráster asociadas extraídas de un archivo ráster y los metadatos de estas bandas;
  • GDALDdataset también es responsable de la transformación de georreferenciación y la definición del sistema de coordenadas de todas las bandas ráster.
  • Clase GDALDriver: clase de controlador de formato de archivo, GDAL creará una entidad de esta clase para cada formato de archivo admitido para administrar el formato de archivo.
  • Clase GDALDriverManager: clase de gestión de controladores de formato de archivo, utilizada para gestionar la clase GDALDriver.

Arquitectura OGR

  • Clase de geometría: la geometría (incluida OGRGeometry y otras clases) encapsula el modelo de datos vectoriales de OpenGIS y proporciona algunas operaciones geométricas, conversión mutua entre formatos WKB (Well Knows Binary) y WKT (Well Known Text) y sistema de referencia espacial (proyección) .
  • Clase de referencia espacial: OGRSpatialReference encapsula la definición de proyección y datum.
  • Clase de entidad: OGRFeature encapsula la definición de una entidad completa, y una entidad completa incluye una geometría y una serie de atributos de la geometría.
  • Clase de definición de entidad: OGRFeatureDefn encapsula atributos de entidad, tipo, nombre y su sistema de referencia espacial predeterminado. Un objeto OGRFeatureDefn generalmente corresponde a una capa.
  • Clase de capa: OGRLayer es una clase base abstracta que representa una capa de características en la clase de fuente de datos OGRDataSource.
  • Clase de fuente de datos: OGRDataSource es una clase base abstracta que representa un archivo o una base de datos que contiene objetos OGRLayer.
  • Clase de controladores: OGRSFDriver corresponde a cada formato de archivo vectorial admitido. La clase OGRSFDriver está registrada y administrada por la clase OGRSFDriverRegistrar.

enlace de descarga

  Inicio: https://gdal.org/download.html
 seleccione la versión 3.2.1


Preparar el entorno de compilación MSYS2

  (Aquí, cuando se usa mysy1.0 primero, la enumeración del sistema es desconocida, así que cambie a msys2).
  (Aquí, msys2 ha entrado en el foso durante unos días, y las bibliotecas dependientes dependen de glibc, libtool, pkg-config y otros problemas, y se dan la vuelta entre sí. Después de finalmente poder compilar, el logotipo del sistema no puede ser reconocido al final Todavía estoy insistiendo, así que lo cambié nuevamente Descargue msys642, hágalo nuevamente, elimine todas las rutas, instale directamente en msys642 y luego comience a usar el prefijo de ruta para configurar y luego compilar e instalar el archivo de biblioteca extraído) Este es el entorno donde se compila la biblioteca de Linux por encima de Windows
  .
  Descárgalo tú mismo y descomprímelo:
  inserte la descripción de la imagen aquí

  Haga clic en "msys2.bat" para comenzar:
  inserte la descripción de la imagen aquí

  Aquí necesitamos usar el desarrollo mingw32 de Qt5.9.3, por lo que necesitamos copiar el compilador mingw32 de Qt a este directorio raíz, para que pueda introducirse en el entorno msys calificado:
  inserte la descripción de la imagen aquí

  Entonces:
  inserte la descripción de la imagen aquí

  La ruta se importa en:

export PATH=$PATH:/mingw530_32/bin

  inserte la descripción de la imagen aquí


compilar GDAL

Paso 1: Descarga y descomprime

export PATH=$PATH:/mingw530_32/bin
cd /home/21497/compile
mkdir gdal

  inserte la descripción de la imagen aquí

  Luego copie el paquete gdal al directorio principal de msys:
  inserte la descripción de la imagen aquí

cd gdal
tar xvf gdal-3.2.1.tar.gz
ls -l

  inserte la descripción de la imagen aquí

Paso 2: Configurar configurar

  Aquí, el parámetro de prefijo se establece para permitir que la biblioteca se genere en el directorio especificado:

cd /home/21497/compile/gdal/gdal-3.2.1
./configure --prefix=/home/21497/compile/gdal/install
./configure --prefix=/home/21497/compile/gdal/install --without-libtool

  inserte la descripción de la imagen aquí

  Error "configure: error: PROJ 6 símbolos no encontrados", necesita compilar PROJ6:
  inserte la descripción de la imagen aquí

  Consulte el siguiente capítulo "Compilar PROJ6". Una vez completada la compilación, vuelva aquí para continuar con la configuración:

cd gdal-3.2.1
./configure

  Todavía informa un error, pero puede saber que ya hay archivos de encabezado y archivos de biblioteca, y luego comenzar a forzar:
  inserte la descripción de la imagen aquí

  inserte la descripción de la imagen aquí

  Todavía no puedo encontrar el archivo de encabezado, aquí hay otro:
  inserte la descripción de la imagen aquí

  No es suficiente, solo coméntalo para él:
  inserte la descripción de la imagen aquí

  Fuerce directamente la lectura de los comentarios y fuerce la definición de HAVA_PROJ_H (se colocan todas las carpetas y también se obliga a proteger la prueba, por lo que no pasará, el resultado final del método del código fuente:
  inserte la descripción de la imagen aquí

  Configurar a través de:
  inserte la descripción de la imagen aquí

  Proj6 también es sí.

Paso 3: Compilar mak

  (PD: Para esta biblioteca, mingw32-make tiene un error o una excepción, y make puede pasar. Básicamente, si el primero no puede pasar, use make. De todos modos, cuando se compila, es gcc puro, y gcc se introduce en el gcc de mingw32 de Qt5.9.3)

make -j4

  Comience a compilar, esta biblioteca gdal compila, lleva algo de tiempo y ocurre un error:
  inserte la descripción de la imagen aquí

  Este msys642 tiene algunos problemas con los archivos de encabezado, o de la manera antigua, puede copiar todos los encabezados directamente a esta carpeta "geo_keyp.h", por lo que teóricamente puede:
  inserte la descripción de la imagen aquí

  Después de compilar, efectivamente pasó (PD: por qué msys642 no carga la ruta del archivo de encabezado por sí mismo, y la variable de entorno adicional no funciona, así que no lo estudiaré detenidamente), continúe compilando:

make

  inserte la descripción de la imagen aquí

  Después de compilar:
  inserte la descripción de la imagen aquí

  Continúe haciendo sin j para asegurarse de que se ha compilado correctamente:
  inserte la descripción de la imagen aquí

  inserte la descripción de la imagen aquí

Paso 4: Instalar hacer instalar

  Instalar

make install

  inserte la descripción de la imagen aquí

  inserte la descripción de la imagen aquí

Paso 5: importa la biblioteca compilada al proyecto

  (PD: el proyecto aquí se basa en el sistema Kirin v1.0.0, actualizado a v1.1.0 e integrado con la versión mingw32 de la plataforma de Windows Qt5.9.3) Las
  instalaciones anteriores están todas instaladas en la ruta del sistema, por lo que la biblioteca de la ruta del sistema se presenta aquí por primera vez.
  inserte la descripción de la imagen aquí

  Hasta ahora, éxito.


Compilar PROJ6

Paso 1: Descarga y descomprime

  Dirección de descarga: https://proj.org
  Seleccione la versión 6.2.0
  para descargar y copiar a MSYS2:

cd /home/21497/compile
mkdir proj
cd proj

  

tar xfv proj-6.2.0.tar.gz

  

Paso 2: Configurar configurar

  Aquí, el parámetro de prefijo se establece para permitir que la biblioteca se genere en el directorio especificado:

cd /home/21497/compile/proj/proj-6.2.0/
./configure --prefix=/home/21497/compile/proj/install
./configure --without-libtool

  
  Error de configuración "SQLITE3", como se muestra en la siguiente figura:
  
  Consulte el siguiente capítulo "Compilar SQLITE3". Una vez completada la compilación, regrese aquí para continuar con la configuración:

cd /home/21497/compile/proj/proj-6.2.0/

  En este momento, todavía hay un error al compilar. El error puede ser un problema de pkgconfig. Instale "compile pkgconfig" y cambie a mingw642 para solucionarlo. Continúe:
  

Paso 3: Compilar make

make -j4

  Comience a compilar:
  inserte la descripción de la imagen aquí

  inserte la descripción de la imagen aquí

  Aquí, el archivo de encabezado no se encuentra:
  inserte la descripción de la imagen aquí

  Agregar la ruta del archivo de encabezado aún informa un error, forzarlo directamente y luego continuar:
  inserte la descripción de la imagen aquí

  inserte la descripción de la imagen aquí

  Agregar la ruta de la biblioteca aún informa un error, forzarlo directamente y luego continuar:
  inserte la descripción de la imagen aquí

  Finalmente compilado el pasado:
  inserte la descripción de la imagen aquí

  inserte la descripción de la imagen aquí

  Volver a la biblioteca "gdal".

Paso 4: Instalar hacer instalar

  Para usar privilegios de administrador, de lo contrario, la instalación fallará y no se podrá crear el directorio del sistema:

sudo make install

  Pruebe, puede confiar en él sin ldconfig, hasta ahora se ha compilado la biblioteca proj6.


Compilar SQLITE3

Paso 1: Descarga y descomprime

  https://www.sqlite.org/download.html
  inserte la descripción de la imagen aquí

  inserte la descripción de la imagen aquí

tar xvf sqlite-autoconf-3420000.tar.gz

  inserte la descripción de la imagen aquí

Paso 2: Configurar configurar

  Aquí, el parámetro de prefijo se establece para permitir que la biblioteca se genere en el directorio especificado:

cd /home/21497/compile/sqlite3/sqlite-autoconf-3420000
./configure --prefix=/home/21497/compile/sqlite3/install

  inserte la descripción de la imagen aquí

  Error de configuración:
  inserte la descripción de la imagen aquí

  (PD: No entre en pánico en todo, abra los ojos lentamente para ver el error línea por línea)
  Modifique la configuración:

./configure --prefix=/home/21497/compile/sqlite3/install --disable-dependency-tracking

  Luego continúe con la configuración:
  inserte la descripción de la imagen aquí

  La configuración fue exitosa:
  inserte la descripción de la imagen aquí

Paso 3: Compilar make

  inserte la descripción de la imagen aquí

  La compilación aquí hará que libtool cometa un error, y no hay solución, así que intente revertir sqlite por una versión, y pasará.Repita los pasos:
  inserte la descripción de la imagen aquí

cd sqlite-snapshot-202101271915
./configure --prefix=/home/21497/compile/sqlite3/install
mingw32-make.exe -j4

  inserte la descripción de la imagen aquí
  inserte la descripción de la imagen aquí

Paso 4: Instalar hacer instalar

mingw32-make install

  Falló, como se muestra a continuación:
  inserte la descripción de la imagen aquí

  Debido a que make es diferente, modifique el Makefile directamente:
  inserte la descripción de la imagen aquí

  Puedes pasar:
  inserte la descripción de la imagen aquí

Paso 5: Verifica que la compilación sea exitosa

  inserte la descripción de la imagen aquí

  Lo anterior es para extraer la ruta, y hay un problema con la compilación de la biblioteca que se basa en ella:
  inserte la descripción de la imagen aquí

  Para una talla única, reconfigure directamente sin una ruta e implemente en msys:

cd /home/21497/compile/sqlite3/sqlite-snapshot-202101271915/
./configure
mingw32-make.exe
mingw32-make install

  (Instalar recuerda modificar el CC de Makefile a mingw32-make)
  inserte la descripción de la imagen aquí

  Cambie msys642 y 3.42, use make (no use mingw32-make) con éxito:
  inserte la descripción de la imagen aquí
  inserte la descripción de la imagen aquí
  inserte la descripción de la imagen aquí


Compile pkgconfig (obsoleto, pero mantenga el paso)

Paso 1: Descarga y descomprime

  Dirección de descarga: https://www.freedesktop.org/wiki/Software/pkg-config/
  inserte la descripción de la imagen aquí

tar xvf pkgconfig-0.6.0.tar.gz

  inserte la descripción de la imagen aquí

Paso 2: Configurar configurar

cd pkgconfig-0.6.0/
./configure

  inserte la descripción de la imagen aquí

  inserte la descripción de la imagen aquí

  Para la versión 0.29:
  inserte la descripción de la imagen aquí

  Modificar la configuración:

./configure –with-internal-glib

  Hay varios errores, pero no hay solución.Después, la configuración mingw32-make proj6 no tendrá este error.


fin

  Hay muchos intentos de resolver el problema en este artículo. Después de la compilación final, no es necesario introducir el módulo, ya que el proceso de solución lleva unos tres días. Prueba y error en varios entornos msys, varias versiones de biblioteca de código abierto, ruta ajustes del código fuente, y finalmente este artículo acaba de terminar.
  Si el lector no requiere mingw32, se recomienda no utilizar la versión mingw32 de dgal.


Anterior: No más
Siguiente: Estén atentos...


Si el artículo es un artículo original, indique la fuente del artículo original al reproducirlo.
La dirección del blog de este artículo: https://hpzwl.blog.csdn.net/article/details/131931309

Supongo que te gusta

Origin blog.csdn.net/qq21497936/article/details/131931309
Recomendado
Clasificación