Ruta de aprendizaje de la API C++ de GDAL Clase de arco OGRGeometry OGRCircularString

Clase OGRCircularString         <ogrsf_frmts.h>

OGRCircularStringLa clase es una clase en la biblioteca de geometría OGR, utilizada para representar la geometría del tipo de cadena de arco (cadena circular). Una cuerda de arco es una figura geométrica que consta de una serie de segmentos de arco, cada uno definido por tres puntos: un punto inicial, un punto intermedio y un punto final. Estos segmentos de arco se pueden conectar en una cadena de arco cerrado, o pueden formar una curva abierta

Funciones Publicas

OGRCircularString()

Crear una cadena de arco vacía

OGRCircularStringconst  OGRCircularString  y otros )

copiar constructor

OGRCircularString  & operador =const  OGRCircularString  &other )

operador de asignación

importarDesdeWkb

virtual  OGRErr  importFromWkb(const unsigned char*, size_t,  OGRwkbVariant , size_t &nBytesConsumedOut) sobrescribir

especificar geometría a partir de datos binarios conocidos

parámetro:

  • pabyData  : datos de entrada binarios.

  • nSize  : el tamaño de pabyData en bytes, o -1 si no se conoce.

  • eWkbVariant  : interpretación especial de códigos de geometría de curva si wkbVariantPostGIS1

  • nBytesConquisitiondOut  -- parámetro de salida. El número de bytes consumidos.

Devuelve: OGRERR_NONE si todo va bien; de lo contrario, se puede devolver cualquiera de OGRERR_NOT_ENOUGH_DATA, OGRERR_UNSUPPORTED_GEOMETRY_TYPE u OGRERR_CORRUPT_DATA

exportToWkb

virtual  OGRErr  exportToWkb( OGRwkbByteOrder , carácter sin firmar*,  OGRwkbVariant  =  wkbVariantOldOgc ) anulación de const

Convierta la geometría a un formato binario conocido

parámetro:

  • eByteOrder  : uno de wkbXDR o wkbNDR, que indica el orden de bytes MSB o LSB, respectivamente.

  • pabyData  : el búfer para escribir la representación binaria. El tamaño de este búfer debe ser al menos  OGRGeometry::WkbSize()  bytes.

  • eWkbVariant  : qué estándar usar al exportar geometría 3D (o más). El wkbVariantOldOgc predeterminado es la variante histórica de OGR. wkbVariantIso es una variante definida en ISO SQL/MM y utilizada por OGC para SFSQL 1.2.

Devoluciones: actualmente siempre devuelve OGRERR_NONE

importFromWkt

virtual  OGRErr  importFromWkt(const char**) anular

especificar geometría a partir de datos de texto conocidos

parámetro:

ppszInput  : puntero al puntero del texto de origen. El puntero se actualizará al puntero después del texto usado.

Devuelve: OGRERR_NONE si todo va bien; de lo contrario, se puede devolver cualquiera de OGRERR_NOT_ENOUGH_DATA, OGRERR_UNSUPPORTED_GEOMETRY_TYPE u OGRERR_CORRUPT_DATA

exportToWkt

estándar virtual::cadena exportToWkt(const OGRWktOptions &opts = OGRWktOptions(),  OGRErr  *err = nullptr) const override

Exportar cadenas de bucle a WKT

parámetro:

  • optsopciones de salida .

  • err  : puntero al código de error (si es necesario).

devolver:

la cadena WKT que representa esta cadena de bucle

Es válida

virtual  OGRBoolean  IsValid() anulación de const

Comprueba que la geometría es válida

Devuelve: VERDADERO si la geometría no tiene puntos, FALSO en caso contrario

obtenerEnvolvente

virtual void getEnvelope(OGREnvelope  *psEnvelope) anular const

Calcula y devuelve el sobre delimitador de esta geometría en la estructura psEnvelope pasada

parámetro:

psEnvelope  : la estructura en la que colocar los resultados

// 创建一个圆弧几何对象
    OGRCircularString circularString;
    
    // 添加一些点到圆弧
    circularString.addPoint(0, 0);
    circularString.addPoint(1, 1);
    circularString.addPoint(2, 2);
    
    // 创建一个用于存储外包络矩形的结构体
    OGREnvelope envelope;
    
    // 获取圆弧的外包络矩形
    circularString.getEnvelope(&envelope);
    
    // 打印外包络矩形的坐标信息
    std::cout << "MinX: " << envelope.MinX << std::endl;
    std::cout << "MinY: " << envelope.MinY << std::endl;
    std::cout << "MaxX: " << envelope.MaxX << std::endl;
    std::cout << "MaxY: " << envelope.MaxY << std::endl;

obtenerEnvolvente

virtual void getEnvelope(OGREnvelope3D  *psEnvelope) anular const

Calcula y devuelve el sobre delimitador (3D) de esta geometría en la estructura psEnvelope pasada

parámetro:

psEnvelope  : la estructura en la que colocar los resultados

clon

virtual  OGRCircularString  *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

obtener_Longitud

virtual double get_Length() anulación de const

Devuelve la longitud de la curva.

Devuelve: la longitud de la curva, o cero si la curva no se ha inicializado

CurvaALínea

OGRLineString virtual   *CurveToLine(doble dfMaxAngleStepSizeDegrees = 0, const char *const *papszOptions = nullptr) const override

parámetro:

  • dfMaxAngleStepSizeDegrees  : tamaño de paso máximo a lo largo del arco en grados, con el valor predeterminado en cero.

  • papszOptions  : opciones como una lista de cadenas terminada en nulo o NULL.

Devuelve: la cadena lineal que se aproxima a la curva

Valor

Valor de vacío virtual (doble,  OGRPoint *) anulación constante

Obtener puntos a una distancia dada a lo largo de una curva

parámetro:

  • dfDistance  : la distancia a lo largo de la curva en la ubicación de muestreo. Para esta curva, esta distancia debe estar entre 0 y  get_Length()  .

  • poPoint  : el punto en el que especificar la posición de la curva

    // 创建一个OGRPoint对象表示圆弧曲线的起点
    OGRPoint startPoint(0.0, 0.0);

    // 创建一个圆弧曲线对象,构建一个圆弧
    OGRCircularString circularString;
    circularString.addPoint(&startPoint);
    circularString.addCircularArc(10.0, 0.0, 20.0);

    // 调用Value函数计算圆弧上的点
    double Distance = 15.0; // 假设给定一个长度
    OGRPoint resultPoint;
    circularString.Value(Distance, &resultPoint);

    // 打印计算得到的点坐标
    std::cout << "Point on circular arc at angle " << angle << ": " << resultPoint.getX() << ", " << resultPoint.getY() << std::endl;

get_Area

sobrescritura de const de get_Area() virtual doble

Obtener el área de una curva (cerrada)

getGeometryType

virtual  OGRwkbGeometryType  getGeometryType() anulación de const

obtener el tipo de geometría

getGeometryName

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

Obtener el nombre WKT del tipo de geometría

Devuelve: El nombre que se 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

segmentar

invalidación de segmentación de vacío virtual (doble dfMaxLength)

Modifique la geometría para que no tenga segmentos de línea más largos que una distancia dada

parámetro:

dfMaxLength  : la distancia máxima entre 2 puntos después de dividir

// 创建一个圆弧几何对象
    OGRPoint point1(0, 0);
    OGRPoint point2(5, 0);
    OGRPoint point3(10, 0);
    OGRCircularString circularString;
    circularString.addPoint(&point1);
    circularString.addPoint(&point2);
    circularString.addPoint(&point3);

    // 打印原始的圆弧几何对象
    std::cout << "原始圆弧几何对象:" << std::endl;
    char* wkt;
    circularString.exportToWkt(&wkt);
    std::cout << wkt << std::endl;
    CPLFree(wkt);

    // 使用最大长度为2.0的线段对圆弧几何对象进行分段
    circularString.segmentize(2.0);

    // 打印分段后的圆弧几何对象
    std::cout << "分段后的圆弧几何对象:" << std::endl;
    circularString.exportToWkt(&wkt);
    std::cout << wkt << std::endl;
    CPLFree(wkt)

tieneGeometríaCurva

virtual  OGRBoolean  hasCurveGeometry(int bLookForNonLinear = FALSE) anulación de const

Devuelve esta geometría si es o tiene una geometría de curva

  1. Tipo de geometría lineal:

    • OGRPoint: tipo de geometría de punto, que representa un punto.
    • OGRLineString: tipo de geometría de línea, que representa una polilínea, compuesta por una serie de segmentos de línea continuos.
    • OGRRing: tipo de geometría de anillo, que es un tipo especial de tipo de geometría lineal, que representa una línea cerrada. Los tipos de geometría de anillo se pueden utilizar para representar los anillos exterior o interior de polígonos simples.
  2. Tipo de geometría de curva:

    • OGRCircularString: tipo de geometría de arco circular, que representa un arco circular.
    • OGRCompoundCurve: tipo de geometría de curva compuesta, una curva compleja formada por varios segmentos de línea y arcos.
    • OGRCurvePolygon: tipo de geometría de polígono de curva, que representa un polígono compuesto por curvas. Un polígono curvo consta de un anillo exterior y cero o más anillos interiores, que pueden ser lineales o circulares.
  1. Cuando bLookForNonLinearel parámetro se establece en FALSE, significa que solo se buscan los objetos subgeométricos lineales y no se buscan los objetos subgeométricos del tipo de curva (incluidos arcos, curvas compuestas, etc.).
  2. Cuando bLookForNonLinearel parámetro se establece en TRUE, significa buscar los objetos subgeométricos del tipo de curva y del tipo lineal al mismo tiempo.

parámetro:

bLookForNonLinear  -- Establézcalo en TRUE para verificar si la geometría es o contiene una CUERDA CIRCULAR.

Devuelve: VERDADERO si esta geometría es o tiene una geometría curva

 OGRPoint point(10.0, 20.0);

    //检查点是否具有曲线几何(非线性)。
    if (point.hasCurveGeometry()) {
        std::cout << "The point contains curve geometry." << std::endl;
    } else {
        std::cout << "The point does not contain curve geometry." << std::endl;
    }

getLinearGeometry

virtual  OGRGeometry  *getLinearGeometry(doble dfMaxAngleStepSizeDegrees = 0, const char *const *papszOptions = nullptr) const override

devuelve una versión no curva de esta geometría, posiblemente una aproximación

parámetro:

  • dfMaxAngleStepSizeDegrees  : tamaño de paso máximo a lo largo del arco en grados, con el valor predeterminado en cero.

  • papszOptions  : opciones como una lista de cadenas terminadas en nulo.

Devoluciones: la nueva geometría

OGRPoint p1(0, 0);
OGRPoint p2(1, 1);
OGRPoint p3(2, 0);

OGRCircularString cs;
cs.addPoint(&p1);
cs.addPoint(&p2);
cs.addPoint(&p3);

// 转换为线性几何对象
OGRGeometry* linearGeom = cs.getLinearGeometry();

En el ejemplo anterior, el punto establecido al principio OGRCircularStringrepresenta un segmento de arco en , que se puede representar con información como el punto central, el punto inicial, el punto final y el radio. Pero cuando OGRCircularStringel objeto se convierte en un objeto de geometría lineal, el segmento de arco se dividirá en un conjunto de segmentos de línea recta continuos que se aproximan a la forma del arco original.

Supongo que te gusta

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