Clase OGRLinearRing <ogrsf_frmts.h>
OGRLinearRing
Es 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
OGRLinearRing(const OGRLinearRing y otros )
copiar constructor
OGRLinearRing(OGRLinearRing * )
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");
}