Distancia
Distancia doble virtual (const OGRGeometry *) const
Calcular distancia entre dos geometrías Devuelve la distancia más corta entre dos geometrías. Las distancias se expresan en las mismas unidades que las coordenadas geométricas
parámetro:
poOtherGeom : otra geometría para comparar.
Devuelve: la distancia entre geometrías, o -1 si se produce un error
// 创建两个点
OGRPoint point1(0, 0);
OGRPoint point2(3, 4);
// 计算两个点之间的距离
double distance = point1.Distance(&point2);
cout << "Distance between point1 and point2: " << distance << endl;
Casco convexo
Virtual OGRGeometry *ConvexHull() const
Compute Convex Hull creará y devolverá un nuevo objeto Geometry que contiene el casco convexo de la geometría en la que se llama al método
Devuelve: la geometría recién asignada ahora propiedad de la persona que llama, o NULL en caso de falla
// 创建一个线环(LinearRing)
OGRLinearRing ring;
ring.addPoint(0, 0);
ring.addPoint(1, 0);
ring.addPoint(1, 1);
ring.addPoint(0, 1);
ring.addPoint(0, 0);
// 创建一个多边形(Polygon)
OGRPolygon polygon;
polygon.addRing(&ring);
// 计算凸包
OGRGeometry* convexHull = polygon.ConvexHull();
// 输出凸包的WKT表示
char* wkt;
convexHull->exportToWkt(&wkt);
std::cout << "Convex Hull: " << wkt << std::endl;
// 释放内存
CPLFree(wkt);
delete convexHull;
Casco cóncavo
virtual OGRGeometry *ConcaveHull(doble dfRatio, bool bAllowHoles) const
Cálculo del "casco cóncavo" de una geometría Cálculo del "casco cóncavo" de una geometría
El casco cóncavo está completamente contenido dentro del casco convexo y también contiene todos los puntos de entrada, pero con un área más pequeña. La relación de área es la relación de las áreas de los cascos convexos y cóncavos. Comúnmente utilizado para convertir multipuntos en regiones poligonales. contiene todos los puntos en la geometría de entrada
parámetro:
-
dfRatio -- la relación del área de los cascos convexos y cóncavos.
-
bAllowHole : si se permiten agujeros.
Devuelve: la geometría recién asignada ahora propiedad de la persona que llama, o NULL en caso de falla
// 创建一个线环(LinearRing)
OGRLinearRing ring;
ring.addPoint(0, 0);
ring.addPoint(1, 0);
ring.addPoint(1, 1);
ring.addPoint(0, 1);
ring.addPoint(0, 0);
// 创建一个多边形(Polygon)
OGRPolygon polygon;
polygon.addRing(&ring);
// 计算凹多边形凸包
double concaveHullRatio = 0.8; // 指定一个凹多边形凸包的压缩比例
bool allowHoles = true; // 允许生成含有洞的凹多边形凸包
OGRGeometry* concaveHull = polygon.ConcaveHull(concaveHullRatio, allowHoles);
// 输出凹多边形凸包的WKT表示
char* wkt;
concaveHull->exportToWkt(&wkt);
std::cout << "Concave Hull: " << wkt << std::endl;
// 释放内存
CPLFree(wkt);
delete concaveHull;
Buffer
OGRGeometry virtual *Búfer(doble dfDist, int nQuadSegs = 30) const
Búfer de geometría computacional
Genera una nueva geometría que contiene el búfer desde el que se llamó. Una zona de influencia es un polígono que contiene el área dentro de la distancia de zona de influencia de la geometría original
Algunas partes de la zona de influencia se describen correctamente como curvas, pero se convierten en polígonos aproximados. El parámetro nQuadSegs se puede usar para controlar cuántas líneas se deben usar para definir los cuadrantes del círculo de curva de 90 grados. Un valor de 30 es un valor predeterminado razonable. Los valores más grandes dan como resultado una gran cantidad de vértices en la geometría del búfer resultante, mientras que los números más pequeños reducen la precisión de los resultados.
parámetro:
-
dfDist : la distancia de zona de influencia que se va a aplicar. Se expresará en las mismas unidades que las coordenadas geométricas.
-
nQuadSegs : número de segmentos utilizados para aproximar la curvatura de 90 grados (cuadrante).
Devuelve: la geometría recién creada, o NULL si se produjo un error
// 创建一个点(Point)
OGRPoint point(0, 0);
// 对点进行缓冲区分析,生成一个缓冲区几何对象
double bufferDistance = 1.0; // 缓冲区的距离
int numQuadSegments = 30; // 四边形段数,用于控制缓冲区的平滑程度
OGRGeometry* buffer = point.Buffer(bufferDistance, numQuadSegments);
Intersección
Virtual OGRGeometry *Intersección(const OGRGeometry *) const
Calcular la intersección
Genera una nueva geometría que es la región de intersección de las dos geometrías operadas. El método Intersects() se puede usar para probar si dos geometrías se cruzan
La validez de la geometría no se comprueba. Si no está seguro de la validez de la geometría de entrada, llame a IsValid() antes , de lo contrario, el resultado puede ser incorrecto
parámetro:
poOtherGeom : otra geometría que se cruza con "esta" geometría.
Devuelve: la nueva geometría que representa el punto de intersección, o NULL si no hay intersección o se produce un error
// 创建两个多边形对象
OGRLinearRing ring1, ring2;
ring1.addPoint(0, 0);
ring1.addPoint(0, 1);
ring1.addPoint(1, 1);
ring1.addPoint(1, 0);
ring1.addPoint(0, 0);
ring2.addPoint(0.5, 0.5);
ring2.addPoint(0.5, 1.5);
ring2.addPoint(1.5, 1.5);
ring2.addPoint(1.5, 0.5);
ring2.addPoint(0.5, 0.5);
OGRPolygon polygon1, polygon2;
polygon1.addRing(&ring1);
polygon2.addRing(&ring2);
// 计算两个多边形的交集
OGRGeometry* intersection = polygon1.Intersection(&polygon2);
Unión
OGRGeometry virtual * Unión (const OGRGeometry *) const
Federación de cálculo
Genera una nueva geometría que es la región de unión de las dos geometrías operadas
La validez de la geometría no se comprueba. Si no está seguro de la validez de la geometría de entrada, llame a IsValid() antes , de lo contrario, el resultado puede ser incorrecto
parámetro:
poOtherGeom -- La otra geometría para combinar con "esta" geometría.
Devuelve: la nueva geometría que representa la unión o NULL si se produce un error
// 创建两个多边形对象
OGRLinearRing ring1, ring2;
ring1.addPoint(0, 0);
ring1.addPoint(0, 1);
ring1.addPoint(1, 1);
ring1.addPoint(1, 0);
ring1.addPoint(0, 0);
ring2.addPoint(0.5, 0.5);
ring2.addPoint(0.5, 1.5);
ring2.addPoint(1.5, 1.5);
ring2.addPoint(1.5, 0.5);
ring2.addPoint(0.5, 0.5);
OGRPolygon polygon1, polygon2;
polygon1.addRing(&ring1);
polygon2.addRing(&ring2);
// 计算两个多边形的并集
OGRGeometry* unionGeometry = polygon1.Union(&polygon2);
UniónEn Cascada
OGRGeometría virtual * UnionCascaded() constante
Cálculo de unión usando cascada Las geometrías de entrada deben ser multifacéticas
La validez de la geometría no se comprueba. Si no está seguro de la validez de la geometría de entrada, llame a IsValid() antes , de lo contrario, el resultado puede ser incorrecto
Devuelve: la nueva geometría que representa la unión o NULL si se produce un error
// 创建一个多边形对象
OGRLinearRing ring;
ring.addPoint(0, 0);
ring.addPoint(0, 1);
ring.addPoint(1, 1);
ring.addPoint(1, 0);
ring.addPoint(0, 0);
OGRPolygon polygon;
polygon.addRing(&ring);
// 计算多边形与其自身的并集
OGRGeometry* unionGeometry = polygon.UnionCascaded();
Virtual OGRGeometry *UnionCascaded() const
: Esta función se utiliza para devolver la unión (Union) del objeto de geometría actual consigo mismo. Es decir, combina todos los componentes geométricos del objeto geométrico actual para obtener un nuevo objeto geométrico que contiene todos los componentes. Por ejemplo, si el objeto de geometría actual es un polígono que contiene varios anillos separados, la función devuelve un nuevo polígono que contiene la unión de todos los anillos.
Virtual OGRGeometry *Union(const OGRGeometry*) const
: Esta función se utiliza para devolver la unión (Union) del objeto de geometría actual y otro objeto de geometría. Es decir, realiza una operación de unión en el objeto de geometría actual con otro objeto de geometría para obtener un nuevo objeto de geometría que contiene todos los componentes de los dos objetos de geometría. Por ejemplo, si el objeto de geometría actual es un polígono y el parámetro pasado es otro polígono, la función devolverá un nuevo polígono que contiene el resultado de la unión de los dos polígonos.Resumir:
UnionCascaded()
La función se utiliza para calcular el resultado de la unión dentro del objeto de geometría actual.Union(const OGRGeometry*)
La función se utiliza para calcular el resultado de la unión del objeto geométrico actual y otro objeto geométrico.
Unión unaria
OGRGeometry *UnaryUnion() const
Devuelve la unión de todos los componentes de una sola geometría, que normalmente se usa para convertir una colección en el conjunto más pequeño de polígonos que cubren la misma área.
Devuelve: la nueva geometría que representa la unión o NULL si se produce un error
// 创建两个多边形对象
OGRLinearRing ring1;
ring1.addPoint(0, 0);
ring1.addPoint(0, 1);
ring1.addPoint(1, 1);
ring1.addPoint(1, 0);
ring1.addPoint(0, 0);
OGRPolygon polygon1;
polygon1.addRing(&ring1);
OGRLinearRing ring2;
ring2.addPoint(1, 1);
ring2.addPoint(1, 2);
ring2.addPoint(2, 2);
ring2.addPoint(2, 1);
ring2.addPoint(1, 1);
OGRPolygon polygon2;
polygon2.addRing(&ring2);
// 计算两个多边形对象的一元并集
OGRGeometry* unaryUnionGeometry = polygon1.Union(&polygon2);
Diferencia
virtual OGRGeometry *Diferencia(const OGRGeometry *) const
calcular la diferencia
Genera una nueva geometría que es la región de esta geometría con la región de la segunda geometría eliminada
La validez de la geometría no se comprueba. Si no está seguro de la validez de la geometría de entrada, llame a IsValid() antes , de lo contrario, el resultado puede ser incorrecto
parámetro:
poOtherGeom : la otra geometría que se eliminará de la geometría "esta".
Devuelve: la nueva geometría que representa la diferencia, o NULL si la diferencia está vacía o se produjo un error
// 创建两个多边形对象
OGRLinearRing ring1;
ring1.addPoint(0, 0);
ring1.addPoint(0, 2);
ring1.addPoint(2, 2);
ring1.addPoint(2, 0);
ring1.addPoint(0, 0);
OGRPolygon polygon1;
polygon1.addRing(&ring1);
OGRLinearRing ring2;
ring2.addPoint(1, 1);
ring2.addPoint(1, 3);
ring2.addPoint(3, 3);
ring2.addPoint(3, 1);
ring2.addPoint(1, 1);
OGRPolygon polygon2;
polygon2.addRing(&ring2);
// 计算两个多边形对象的差异
OGRGeometry* differenceGeometry = polygon1.Difference(&polygon2);
SymDiferencia
virtual OGRGeometry *SymDifference(const OGRGeometry *) const
Calcular diferencia simétrica
Genera una nueva geometría que es la diferencia simétrica de esta geometría y la segunda geometría pasada al método
La validez de la geometría no se comprueba. Si no está seguro de la validez de la geometría de entrada, llame a IsValid() antes , de lo contrario, el resultado puede ser incorrecto
parámetro:
poOtherGeom -- la otra geometría.
Devuelve: la nueva geometría que representa la diferencia simétrica, o NULL si la diferencia está vacía o se produce un error
// 创建两个多边形对象
OGRLinearRing ring1;
ring1.addPoint(0, 0);
ring1.addPoint(0, 2);
ring1.addPoint(2, 2);
ring1.addPoint(2, 0);
ring1.addPoint(0, 0);
OGRPolygon polygon1;
polygon1.addRing(&ring1);
OGRLinearRing ring2;
ring2.addPoint(1, 1);
ring2.addPoint(1, 3);
ring2.addPoint(3, 3);
ring2.addPoint(3, 1);
ring2.addPoint(1, 1);
OGRPolygon polygon2;
polygon2.addRing(&ring2);
// 计算两个多边形对象的对称差异
OGRGeometry* symDifferenceGeometry = polygon1.SymDifference(&polygon2);
Centroide
virtual OGRErr Centroid(OGRPoint *poPoint) const
Calcular centroide geométrico
La posición del centroide se aplica al objeto OGRPoint entrante . El centroide no está necesariamente dentro de la geometría.
Devuelve: OGRERR_NONE en caso de éxito o OGRERR_FAILURE en caso de error
// 创建一个多边形对象
OGRLinearRing ring;
ring.addPoint(0, 0);
ring.addPoint(0, 4);
ring.addPoint(4, 4);
ring.addPoint(4, 0);
ring.addPoint(0, 0);
OGRPolygon polygon;
polygon.addRing(&ring);
// 创建一个空的 OGRPoint 对象用于存储质心
OGRPoint centroidPoint;
// 计算多边形对象的质心
OGRErr err = polygon.Centroid(¢roidPoint);
if (err == OGRERR_NONE) {
// 输出质心的坐标
double x = centroidPoint.getX();
double y = centroidPoint.getY();
std::cout << "Centroid coordinates: (" << x << ", " << y << ")" << std::endl;
} else {
std::cout << "Error calculating centroid." << std::endl;