Simplificar
Geometría OGRG virtual * Simplificar (doble dTolerancia) const
Simplificar Geometría
parámetro:
dTolerancia : tolerancia de distancia simplificada.
Devuelve: la geometría simplificada o NULL si se produce un error
// 创建一个多边形对象
OGRLinearRing ring;
ring.addPoint(0, 0);
ring.addPoint(0, 4);
ring.addPoint(2, 4);
ring.addPoint(2, 2);
ring.addPoint(4, 2);
ring.addPoint(4, 0);
ring.addPoint(0, 0);
OGRPolygon polygon;
polygon.addRing(&ring);
// 输出原始多边形的点数
std::cout << "Original polygon points count: " << polygon.getNumPoints() << std::endl;
// 进行简化
OGRGeometry* simplifiedGeometry = polygon.Simplify(1.0);
// 输出简化后的多边形的点数
cout << "Simplified polygon points count: " << simplifiedGeometry->getNumPoints() << endl;
SimplificarConservarTopología
OGRGeometry *SimplifyPreserveTopology(doble dTolerance) const
Simplifique la geometría mientras conserva la topología
parámetro:
dTolerancia : tolerancia de distancia simplificada.
Devuelve: la geometría simplificada o NULL si se produce un error
// 创建一个多边形对象
OGRLinearRing ring;
ring.addPoint(0, 0);
ring.addPoint(0, 4);
ring.addPoint(2, 4);
ring.addPoint(2, 2);
ring.addPoint(4, 2);
ring.addPoint(4, 0);
ring.addPoint(0, 0);
OGRPolygon polygon;
polygon.addRing(&ring);
// 输出原始多边形的点数
std::cout << "Original polygon points count: " << polygon.getNumPoints() << std::endl;
// 进行简化,并保持拓扑结构
OGRGeometry* simplifiedGeometry = polygon.SimplifyPreserveTopology(1.0);
// 输出简化后的多边形的点数
std::cout << "Simplified polygon points count: " << simplifiedGeometry->getNumPoints() << std::endl;
// 释放简化后的几何对象的内存
delete simplifiedGeometry;
DelaunayTriangulación
virtual OGRGeometry *DelaunayTriangulation(doble dfTolerance, int bOnlyEdges) const
Devuelve la triangulación de Delaunay de los vértices de la geometría.
parámetro:
-
dfTolerance : tolerancia de ajuste opcional para mayor robustez
-
bOnlyEdge : si es VERDADERO, devolverá MULTILINESTRING; de lo contrario, devolverá GEOMETRYCOLLECTION que contiene polígonos triangulares.
Devuelve: la geometría generada por la triangulación de Delaunay o NULL si se produjo un error
// 创建一组点
OGRPoint points[4];
points[0].setX(0);
points[0].setY(0);
points[1].setX(0);
points[1].setY(10);
points[2].setX(10);
points[2].setY(10);
points[3].setX(10);
points[3].setY(0);
// 创建一个几何对象集合并添加点
OGRGeometryCollection collection;
for (int i = 0; i < 4; i++) {
collection.addGeometry(&points[i]);
}
// 对点进行 Delaunay 三角剖分
OGRGeometry* triangulatedGeometry = collection.DelaunayTriangulation(0.0, 0);
// 输出三角剖分结果的类型
if (triangulatedGeometry != nullptr) {
OGRwkbGeometryType geomType = triangulatedGeometry->getGeometryType();
std::cout << "Triangulated geometry type: " << OGRGeometryTypeToName(geomType) << std::endl;
// 释放三角剖分结果的内存
delete triangulatedGeometry;
} else {
std::cout << "Failed to perform Delaunay triangulation." << std::endl;
}
poligonizar
OGRGeometría virtual *Polygonize() const
Poligonizar un conjunto de bordes dispersos
creará y devolverá un nuevo objeto de geometría que contenga la colección de polígonos reensamblados: se devolverá NULL si la colección de entrada no corresponde a una cadena multilínea, o si los bordes no se pueden reensamblar en polígonos debido a inconsistencias topológicas
Devuelve: la geometría recién asignada ahora propiedad de la persona que llama, o NULL en caso de falla
// 创建一组线要素
OGRLineString lineStrings[3];
lineStrings[0].addPoint(0, 0);
lineStrings[0].addPoint(0, 10);
lineStrings[1].addPoint(0, 10);
lineStrings[1].addPoint(10, 10);
lineStrings[2].addPoint(10, 10);
lineStrings[2].addPoint(10, 0);
// 创建一个几何对象集合并添加线要素
OGRGeometryCollection collection;
for (int i = 0; i < 3; i++) {
collection.addGeometry(&lineStrings[i]);
}
// 对几何对象进行多边形化处理
OGRGeometry* polygonizedGeometry = collection.Polygonize();
// 输出多边形化处理结果的类型
if (polygonizedGeometry != nullptr) {
OGRwkbGeometryType geomType = polygonizedGeometry->getGeometryType();
std::cout << "Polygonized geometry type: " << OGRGeometryTypeToName(geomType) << std::endl;
// 释放多边形化处理结果的内存
delete polygonizedGeometry;
} else {
std::cout << "Failed to polygonize the geometries." << std::endl;
}
Distancia3D
distancia virtual doble 3D(const OGRGeometry *poOtherGeom) const
Devuelve la distancia 3D entre dos geometrías
Las distancias se expresan en las mismas unidades que las coordenadas geométricas
Devoluciones: la distancia entre dos formas geométricas
// 创建两个点
OGRPoint point1(0, 0, 0);
OGRPoint point2(3, 4, 5);
// 计算两点之间的三维空间距离
double distance3D = point1.Distance3D(&point2);
cout << "3D Distance between point1 and point2: " << distance3D << endl;
intercambiarXY
intercambio de vacío virtualXY ( )
intercambiar coordenadas x e y
// 创建一个点对象
OGRPoint point(10, 20);
// 打印交换前的坐标
std::cout << "Before swap: X=" << point.getX() << ", Y=" << point.getY() << std::endl;
// 调用 swapXY 函数交换 X 和 Y 坐标
point.swapXY();
// 打印交换后的坐标
std::cout << "After swap: X=" << point.getX() << ", Y=" << point.getY() << std::endl;
proyección
en línea OGRPoint * toPoint ( )
Abajo a OGRPoint*
Significa comprobar de antemano que wkbFlatten(getGeometryType()) == wkbPoint
Hay muchas proyecciones diferentes, pero en general es de alta latitud a baja dimensión.