Класс OGRLinearRing <ogrsf_frmts.h>
OGRLinearRing
Класс в библиотеке OGR, представляет собой геометрический объект линейного кольца (Linear Ring), используемый для представления замкнутого линейного пути. Линейное кольцо состоит из ряда последовательных отрезков, соединенных друг с другом в замкнутое кольцо. Линейные кольца часто используются для построения многоугольной геометрии, а границы многоугольников образованы линейными кольцами.
Публичные функции
OGRLinearRing()
Конструктор
OGRLinearRing ( const OGRLinearRing &other )
конструктор копирования
OGRLinearRing(OGRLinearRing * )
Конструктор
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");
}