Схема обучения API GDAL C++ OGRGeometry ring class OGRLinearRing

Класс OGRLinearRing         <ogrsf_frmts.h>

OGRLinearRingКласс в библиотеке OGR, представляет собой геометрический объект линейного кольца (Linear Ring), используемый для представления замкнутого линейного пути. Линейное кольцо состоит из ряда последовательных отрезков, соединенных друг с другом в замкнутое кольцо. Линейные кольца часто используются для построения многоугольной геометрии, а границы многоугольников образованы линейными кольцами.

Публичные функции

OGRLinearRing()

Конструктор

OGRLinearRing ( const  OGRLinearRing  &other )

конструктор копирования

OGRLinearRingOGRLinearRing * )

Конструктор

OGRLinearRing  & оператор = ( const  OGRLinearRing  &other )

оператор присваивания

Виртуальный константный символ *getGeometryName() переопределение константы

Получить имя WKT типа геометрии

Возвращает: имя, используемое для этого типа геометрии, в известном текстовом формате. Возвращаемый указатель указывает на статическую внутреннюю строку и не должен изменяться или освобождаться.

клон

виртуальный  OGRLinearRing  *clone() переопределение константы

создать копию этого объекта

Возвращает: новый экземпляр объекта с той же геометрией и системой пространственной привязки, что и исходный объект.

isPointInRing

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

Возвращает, находится ли точка внутри кольца

параметр:

  • точка  - точка

  • bTestEnvelope  — установите значение TRUE, если точка должна быть сначала проверена на существование в кольцевой оболочке.

Возвращает: Правда или Ложь

    // 创建一个 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

Возвращает, находится ли точка на границе кольца

параметр:

  • точка  - точка

  • bTestEnvelope  — установите значение TRUE, если точка должна быть сначала проверена на существование в кольцевой оболочке.

Возвращает: Правда или Ложь

// 创建一个 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");
    }

трансформировать

виртуальное  преобразование OGRErr  (OGRCoordinateTransformation  *poCT) переопределить

Применение произвольного преобразования координат к геометрии

Этот метод преобразует координаты геометрии из ее текущей системы пространственной привязки в новую целевую систему пространственной привязки. Обычно это означает перепроецирование векторов, но может включать в себя смещения нулевой точки и изменения единиц измерения.

параметр:

poCT  -- применяемое преобразование.

Возвращает: OGRERR_NONE в случае успеха или код ошибки.

    // 创建一个 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");
    }

рекомендация

отblog.csdn.net/qq_69574549/article/details/132006804
рекомендация