Notas de desarrollo de Qt+GDAL (2): Compile la biblioteca GDAL, cree un entorno de desarrollo y una demostración básica en el sistema Windows msvc207x64

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

Enciclopedia del blog de tecnología de Red Fatty Network: 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 tripartitas

Anterior: " Notas de desarrollo de Qt+GDAL (1): Compile la biblioteca GDAL, cree un entorno de desarrollo y una demostración básica en mingw32 del sistema Windows "
Siguiente: Estén atentos...


prefacio

  El artículo anterior utilizó la versión mingw32 de gdal y el proceso fue tortuoso. Para crear un entorno mejor y más conveniente, el método msvc en Windows es más amigable para la biblioteca.


blog relacionado

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


Introducción a las coordenadas geodésicas

descripción general

  Las coordenadas geodésicas son las coordenadas del elipsoide de referencia en los estudios geodésicos. La posición del punto de tierra P se expresa por 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 está representado por 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 del meridiano inicial, la longitud este de 0° a 180° se llama longitud este; la longitud oeste de 0° a 180° se llama 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 llama latitud norte, la latitud sur de De 0° a 90° se llama latitud sur. La altura geodésica es la distancia desde el punto del terreno a lo largo de la normal al elipsoide de referencia.

Sistema de coordenadas de 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 de 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. sistema de coordenadas resultante después del ajuste local.

  • Semieje mayor a = 6378245m
  • Semieje 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 rectangular espacial 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 BIH y el ecuador CTP, y el eje Y y el eje Z forman un sistema de coordenadas diestro.
  El elipsoide WGS-84 adopta las constantes de medición recomendadas por el 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:

  • Semieje mayor a = 6378137m
  • Semieje 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 de coordenadas geodésicas nacional de 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 nacionales de 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 nacionales de 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 proporciona la Oficina Internacional del Tiempo La época fija es el cálculo de orientación inicial de 1984.0, y la evolución temporal de la orientación garantiza que no habrá rotación global residual en relación con la corteza.Eje y eje X formar un sistema de coordenadas ortogonales diestros. Utilice la escala en el sentido de la relatividad general.

  • Semieje mayor a = 6378137m
  • Semieje 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 distintos formatos de archivo admitidos. También tiene una colección de herramientas de línea de comandos para transformación y manipulación de datos. OGR es una bifurcación del proyecto GDAL que brinda soporte para datos vectoriales. Hay muchos productos SIG conocidos que utilizan la biblioteca GDAL/OGR, incluido 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 brindar soporte para datos de archivos vectoriales y rasterizados.

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 abstracto (modelo de datos abstracto) para analizar los formatos de datos que admite. El modelo de datos abstracto incluye conjuntos de datos, sistemas de coordenadas, transformación de coordenadas geográficas afines (Affine Geo Transform) y puntos de control geodésicos (GCP). Banda, Tabla de colores, Dominio de subdatasets, Dominio Image_Structure, Dominios XML.
  • Clase GDALMajorObject: un objeto con metadatos.
  • Clase GDALDdataset: normalmente 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 administración de controladores de formato de archivo, utilizada para administrar 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 los formatos WKB (Well Knows Binary) y WKT (Well Known Text), y un sistema de referencia espacial (proyección). .
  • Clase de referencia espacial: OGRSpatialReference encapsula la definición de proyección y datum.
  • Clase de característica: OGRFeature encapsula la definición de una característica completa, y una característica completa incluye una geometría y una serie de atributos de la geometría.
  • Clase de definición de característica: OGRFeatureDefn encapsula los atributos de característica, el tipo, el nombre y su sistema de referencia espacial predeterminado. Un objeto OGRFeatureDefn normalmente 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


Acerca del orden de compilación

   Porque la primera opción es la versión que se compiló con éxito con vs2019 antes, pero esta vez no hay solución para vs2017x64.
  gdal depende de proj y proj depende de sqlite, por lo que este artículo comienza con sqlite, luego proj y finalmente gdal.


Compile SQLite 3.34.1 (versión windows msvc2017x64)

Paso 1: descargar y descomprimir

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

Paso 2: use VS2017 para crear un nuevo proyecto vacío de VC++

  inserte la descripción de la imagen aquí

  inserte la descripción de la imagen aquí

Paso 3: agregar archivos al proyecto

  inserte la descripción de la imagen aquí

  inserte la descripción de la imagen aquí

Paso 4: agregue comandos de macro

  inserte la descripción de la imagen aquí

_USRDLL
SQLITE_ENABLE_RTREE
SQLITE_ENABLE_COLUMN_METADATA
SQLITE_ENABLE_FTS5
SQLITE_ENABLE_UNLOCK_NOTIFY

  inserte la descripción de la imagen aquí

Paso 6: Modificar sqlite3.def

sqlite3_unlock_nofity

  inserte la descripción de la imagen aquí

Paso 7: modificar el objetivo

  Aquí la versión y la depuración deben cambiarse al tipo de configuración "biblioteca estática (.lib)":
  inserte la descripción de la imagen aquí

Paso 8: compilar correctamente

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

  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 PROJ 6.2.0 (versión de Windows msvc2017x64)

Paso 1: descargar y descomprimir

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

Paso 2: configuración de CMake, agregue sqlite3

  inserte la descripción de la imagen aquí

  (Nota: al seleccionar el compilador durante la configuración, debe elegir x64. No vaya a vs para compilar nuevamente. CMake debe incorporar algunas variables de entorno). Si no se agrega SQLIte, se informará un error
  :
  inserte la descripción de la imagen aquí

  Añadir:
  inserte la descripción de la imagen aquí

  inserte la descripción de la imagen aquí

  Instale Python en el sistema, descargue la versión python3.7.3 usted mismo, instálela en el sistema y luego agregue el archivo ejecutable de Python a la variable del sistema:
  inserte la descripción de la imagen aquí

  Luego reinicie CMake antes de continuar:
  inserte la descripción de la imagen aquí

  La siguiente versión correspondiente de sqlite3.exe:
  inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

  Continuar configurando, configurar a través de:
  inserte la descripción de la imagen aquí

Paso 3: CMake genera el proyecto

  inserte la descripción de la imagen aquí

Paso 4: abrir la compilación (abrir con vs2017)

  inserte la descripción de la imagen aquí

  (PD: si no hay x64 aquí, debe configurar para seleccionar x64 en CMakeGui, y se informará un error si crea uno nuevo aquí)

Paso 5: compilar correctamente

  inserte la descripción de la imagen aquí

  inserte la descripción de la imagen aquí


Compile GDAL (versión de Windows msvc2017x64)

Paso 1: descargar y descomprimir

  Antes de compilar con osgearth la versión 2019x64 de Qt5.15, esta vez compilé la versión 2017x64 de qt5.9.3.
  inserte la descripción de la imagen aquí

Paso 2: modificar el código fuente

  Modifique el archivo nmake.opt en el directorio de la siguiente manera:
  el código en la línea 41 se modifica a:
  inserte la descripción de la imagen aquí

!IFNDEF MSVC_VER
#MSVC_VER=1800 # VS2013
#MSVC_VER=1900 # VS2015
MSVC_VER=1910 # vs2017
#MSVC_VER=1921 # VS2019
!ENDIF
WIN64=1

Paso 3: abra la compilación de la línea de comando vs2017

  inserte la descripción de la imagen aquí

  inserte la descripción de la imagen aquí

  Busque el directorio e ingrese el comando:

nmake /f makefile.vc MSVC_VER=1910 WIN64=1 DEBUG=1

  Ocurrió un error:
  inserte la descripción de la imagen aquí

  La modificación es la siguiente (cuando la despreciaba antes, preste atención a la configuración de la ruta prefix_install del proyecto para ver dónde se encuentra la instalación):
  inserte la descripción de la imagen aquí

  Compilar en el pozo no puede resolverlo:
  inserte la descripción de la imagen aquí

  Luego continúa compilando:

nmake /f makefile.vc MSVC_VER=1910 WIN64=1 DEBUG=1

Paso 4: compilar

nmake /f makefile.vc MSVC_VER=1910 WIN64=1 DEBUG=1

  inserte la descripción de la imagen aquí

  Esto es cuando se configura el proyecto antes sin eliminar múltiples shell32 y ole32, y luego continúa:
  inserte la descripción de la imagen aquí

  Esto es sin introducir sqlite, reimportado bajo gdal;
  inserte la descripción de la imagen aquí

  Luego continúe, finalmente se compiló con éxito, la mayoría de los problemas, tomó dos días:
  inserte la descripción de la imagen aquí

  inserte la descripción de la imagen aquí

Paso cinco: instalar la extracción

  (depurar aquí significa modo de depuración)

nmake /f makefile.vc MSVC_VER=1910 WIN64=1 DEBUG=1 install

  inserte la descripción de la imagen aquí

  inserte la descripción de la imagen aquí

  Tienes que hacer una desinstalación:

nmake /f makefile.vc MSVC_VER=1910 WIN64=1 DEBUG=1 devinstall

  inserte la descripción de la imagen aquí

  inserte la descripción de la imagen aquí

  inserte la descripción de la imagen aquí

  Los archivos de encabezado finalmente están disponibles.

Paso 6: pase por el modo sin depuración

  Solía ​​​​pensar que DEBUG es imprimir información de depuración durante el proceso de compilación. Ahora parece que la biblioteca generada no está en modo de depuración. Necesitamos liberarla, así que hazlo de nuevo:

nmake /f makefile.vc MSVC_VER=1910 WIN64=1 
nmake /f makefile.vc MSVC_VER=1910 WIN64=1 install
nmake /f makefile.vc MSVC_VER=1910 WIN64=1 devinstall

  inserte la descripción de la imagen aquí

Paso siete: ajustar las pruebas de ingeniería

  Importe la biblioteca de Windows al archivo pri, como se muestra en la siguiente figura:
  inserte la descripción de la imagen aquí


Modular

  inserte la descripción de la imagen aquí


Código fuente de demostración

GDALManager.at

INCLUDEPATH += $$PWD
DEPENDPATH += $$PWD

HEADERS += \
    $$PWD/GDALManager.h

SOURCES += \
    $$PWD/GDALManager.cpp


win32 {
    
    


    # windows Qt5.9.3 msvc2017x64 版本 gdal
    INCLUDEPATH += $$PWD/gdal-3.2.1_msvc2017x64/include
    LIBS += -L$$PWD/gdal-3.2.1_msvc2017x64/lib
    LIBS += -lgdal_i



    # 引入也失败了,当前不深
#    # windows Qt5.9.3 mingw32 版本 sqlite3
#    INCLUDEPATH += $$PWD/gdal3.2.1_qt593_mingw32/sqlite3/include
#    LIBS += -L$$PWD/gdal3.2.1_qt593_mingw32/sqlite3/lib
#    LIBS += -lsqlite3

#    # windows Qt5.9.3 mingw32 版本 proj6.2.0
#    INCLUDEPATH += $$PWD/gdal3.2.1_qt593_mingw32/proj6.2.0/include
#    LIBS += -L$$PWD/gdal3.2.1_qt593_mingw32/proj6.2.0/lib
#    LIBS += -lproj

#    # windows Qt5.9.3 mingw32 版本 gdal3.2.1
#    INCLUDEPATH += $$PWD/gdal3.2.1_qt593_mingw32/gdal3.2.1/include
#    LIBS += -L$$PWD/gdal3.2.1_qt593_mingw32/gdal3.2.1/lib
#    LIBS += -lgdal
}else {
    
    

    DEFINES += LINUX

    # GDAL系统安装的默认路径位/usr/local
    # 系统库,头文件路径和库文件默认已包含
    LIBS += -lgdal
    # PROJ系统安装的默认路径位/usr/local
    # 系统库,头文件路径和库文件默认已包含
    LIBS += -lproj
}

GDALManager.h

#ifndef GDALMANAGER_H
#define GDALMANAGER_H

#include <QObject>

class GDALManager : public QObject
{
    
    
    Q_OBJECT
public:
    explicit GDALManager(QObject *parent = 0);

signals:

public:
    static void testEnv();                     // v1.0.0 测试环境

private:
};

#endif // GDALMANAGER_H

GDALManager.cpp

#include "GDALManager.h"

#include "gdal.h"

#include <QDebug>
#include <QDateTime>
//#define LOG qDebug()<<__FILE__<<__LINE__
//#define LOG qDebug()<<__FILE__<<__LINE__<<__FUNCTION__
//#define LOG qDebug()<<__FILE__<<__LINE__<<QThread()::currentThread()
//#define LOG qDebug()<<__FILE__<<__LINE__<<QDateTime::currentDateTime().toString("yyyy-MM-dd")
#define LOG qDebug()<<__FILE__<<__LINE__<<QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz")

GDALManager::GDALManager(QObject *parent)
    : QObject(parent)
{
    
    
    // 注册所有驱动
    GDALAllRegister();
}

void GDALManager::testEnv()
{
    
    
    QString version = QString(GDALVersionInfo("RELEASE_NAME"));
    LOG << version;
}

Plantilla de proyecto v1.1.0

  inserte la descripción de la imagen aquí


Anterior: " Notas de desarrollo de Qt+GDAL (1): Compile la biblioteca GDAL, cree un entorno de desarrollo y una demostración básica en mingw32 del sistema Windows "
Siguiente: Estén atentos...


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

Supongo que te gusta

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