Ruta de aprendizaje de la API C++ de GDAL Clase de anillo OGRGeometry OGRLinearRing

Clase OGRLinearRing         <ogrsf_frmts.h>

OGRLinearRingEs una clase en la biblioteca OGR, es un objeto geométrico de un anillo lineal (Linear Ring), usado para representar un camino lineal cerrado. Un anillo lineal se compone de una serie de segmentos de línea consecutivos conectados de extremo a extremo para formar un anillo cerrado. Los anillos lineales se utilizan a menudo para construir geometría poligonal, y los límites de los polígonos están formados por anillos lineales.

Funciones Publicas

OGRAnilloLineal()

Constructor

OGRLinearRingconst  OGRLinearRing  y otros )

copiar constructor

OGRLinearRingOGRLinearRing * )

Constructor

OGRLinearRing  y operador =const  OGRLinearRing  y otros )

operador de asignación

Carácter de const virtual *getGeometryName() anulación de const

Obtener el nombre WKT del tipo de geometría

Devuelve: el nombre a utilizar para este tipo de geometría, en formato de texto conocido. El puntero devuelto apunta a la cadena interna estática y no debe modificarse ni liberarse

clon

virtual  OGRLinearRing  *clon() anulación de const

crear una copia de este objeto

Devuelve: una nueva instancia de objeto con la misma geometría y sistema de referencia espacial que el objeto original

esPuntoEnElAnillo

OGRBoolean  isPointInRing(const  OGRPoint  *pt, int bTestEnvelope = TRUE) const 

Devuelve si el punto está dentro del anillo.

parámetro:

  • punto  - punto

  • bTestEnvelope  : se establece en TRUE si primero se debe verificar la existencia del punto dentro del sobre del anillo.

Devoluciones: Verdadero o Falso

    // 创建一个 OGRLinearRing 对象,表示一个线性环
    OGRLinearRing ring;
    ring.addPoint(0, 0);
    ring.addPoint(0, 1);
    ring.addPoint(1, 1);
    ring.addPoint(1, 0);
    ring.addPoint(0, 0);

    // 创建一个 OGRPoint 对象,表示要检测的点的坐标 (0.5, 0.5)
    OGRPoint point(0.5, 0.5);

    // 判断点是否在线性环的内部
    OGRBoolean isInRing = ring.isPointInRing(&point);

    if (isInRing) {
        printf("Point is inside the ring.\n");
    } else {
        printf("Point is not inside the ring.\n");
    }

isPointOnRingBoundary

OGRBoolean  isPointOnRingBoundary(const  OGRPoint  *pt, int bTestEnvelope = TRUE) const

Devuelve si el punto está en el límite del anillo

parámetro:

  • punto  - punto

  • bTestEnvelope  : se establece en TRUE si primero se debe verificar la existencia del punto dentro del sobre del anillo.

Devoluciones: Verdadero o Falso

// 创建一个 OGRLinearRing 对象,表示一个线性环
    OGRLinearRing ring;
    ring.addPoint(0, 0);
    ring.addPoint(0, 1);
    ring.addPoint(1, 1);
    ring.addPoint(1, 0);
    ring.addPoint(0, 0);

    // 创建一个 OGRPoint 对象,表示要检测的点的坐标 (0.5, 0.5)
    OGRPoint point(0.5, 0.5);

    // 判断点是否在线性环的边界上
    OGRBoolean isOnBoundary = ring.isPointOnRingBoundary(&point);

    if (isOnBoundary) {
        printf("Point is on the ring boundary.\n");
    } else {
        printf("Point is not on the ring boundary.\n");
    }

transformar

anular la transformación virtual  OGRErr  (OGRCoordinateTransformation  *poCT)

Aplicar una transformación de coordenadas arbitrarias a una geometría

Este método transforma las coordenadas de la geometría de su sistema de referencia espacial actual al nuevo sistema de referencia espacial de destino. Por lo general, esto significa reproyectar los vectores, pero puede incluir compensaciones de referencia y cambios de unidades.

parámetro:

poCT  -- La transformación a aplicar.

Devuelve: OGRERR_NONE en caso de éxito o un código de error

    // 创建一个 OGRPoint 对象,表示原始点的坐标 (30, 40)
    OGRPoint originalPoint(30, 40);

    // 创建源和目标的空间参考系统
    OGRSpatialReference sourceSRS;
    OGRSpatialReference targetSRS;
    sourceSRS.SetWellKnownGeogCS("WGS84"); // 使用 WGS84 作为源 CRS
    targetSRS.SetWellKnownGeogCS("EPSG:4326"); // 使用 EPSG:4326 作为目标 CRS

    // 创建坐标转换对象
    OGRCoordinateTransformation *transformer = OGRCreateCoordinateTransformation(&sourceSRS, &targetSRS);

    if (transformer) {
        // 对原始点进行坐标转换
        OGRErr err = originalPoint.transform(transformer);

        if (err == OGRERR_NONE) {
            // 打印转换后的点坐标
            double x = originalPoint.getX();
            double y = originalPoint.getY();
            printf("Transformed Point: (%f, %f)\n", x, y);
        } else {
            printf("Error during coordinate transformation!\n");
        }

        // 释放坐标转换对象
        OCTDestroyCoordinateTransformation(transformer);
    } else {
        printf("Failed to create coordinate transformation!\n");
    }

Supongo que te gusta

Origin blog.csdn.net/qq_69574549/article/details/132006804
Recomendado
Clasificación