本文整理汇总了C++中OGRGeometry::IsValid方法的典型用法代码示例。如果您正苦于以下问题:C++ OGRGeometry::IsValid方法的具体用法?C++ OGRGeometry::IsValid怎么用?C++ OGRGeometry::IsValid使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类OGRGeometry
的用法示例。
在下文中一共展示了OGRGeometry::IsValid方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: main
int main (int argc, const char * argv[]) {
if (argc < 2 || argc > 3 || strcmp(argv[1], "-h") == 0 || strcmp(argv[1], "--help") == 0) {
std::cout << "=== prepair Help ===\n" << std::endl;
std::cout << "Usage: triface 'POLYGON(...)'" << std::endl;
std::cout << "OR" << std::endl;
std::cout << "Usage: triface -f infile.txt (infile.txt must contain one WKT on the 1st line)" << std::endl;
return 0;
}
// Read input
unsigned int bufferSize = 10000000;
char *inputWKT = (char *)malloc(bufferSize*sizeof(char *));
for (int argNum = 1; argNum < argc; ++argNum) {
if (strcmp(argv[argNum], "-f") == 0) {
if (argNum + 1 <= argc - 1 && argv[argNum+1][0] != '-') {
std::ifstream infile(argv[argNum+1], std::ifstream::in);
infile.getline(inputWKT, bufferSize);
++argNum;
} else {
std::cerr << "Error: Missing input file name." << std::endl;
return 1;
}
}
else
strcpy(inputWKT, argv[argNum]);
}
// std::cout << "Processing: " << inputWKT << std::endl;
OGRGeometry *geometry;
OGRGeometryFactory::createFromWkt(&inputWKT, NULL, &geometry);
if (geometry == NULL) {
std::cout << "Error: WKT is not valid" << std::endl;
return 1;
}
if (geometry->getGeometryType() != wkbPolygon25D) {
std::cout << "Error: input geometry is not a 3D polygon" << std::endl;
return 1;
}
//-- project to proper plane + get flattened geometry
int proj = get_projection_plane(geometry);
OGRGeometry *flatgeom = geometry->clone();
if (proj == 1) {
OGRPolygon *polygon = (OGRPolygon *)flatgeom;
for (int curp = 0; curp < polygon->getExteriorRing()->getNumPoints(); ++curp)
polygon->getExteriorRing()->setPoint(curp, polygon->getExteriorRing()->getX(curp), polygon->getExteriorRing()->getZ(curp), 0);
for (int currentRing = 0; currentRing < polygon->getNumInteriorRings(); ++currentRing) {
for (int curp = 0; curp < polygon->getInteriorRing(currentRing)->getNumPoints(); ++curp)
polygon->getInteriorRing(currentRing)->setPoint(curp, polygon->getInteriorRing(currentRing)->getX(curp), polygon->getInteriorRing(currentRing)->getZ(curp), 0);
}
}
else if (proj == 0) {
OGRPolygon *polygon = (OGRPolygon *)geometry;
for (int curp = 0; curp < polygon->getExteriorRing()->getNumPoints(); ++curp)
polygon->getExteriorRing()->setPoint(curp, polygon->getExteriorRing()->getY(curp), polygon->getExteriorRing()->getZ(curp), 0);
for (int currentRing = 0; currentRing < polygon->getNumInteriorRings(); ++currentRing) {
for (int curp = 0; curp < polygon->getInteriorRing(currentRing)->getNumPoints(); ++curp)
polygon->getInteriorRing(currentRing)->setPoint(curp, polygon->getInteriorRing(currentRing)->getY(curp), polygon->getInteriorRing(currentRing)->getZ(curp), 0);
}
}
flatgeom->flattenTo2D();
// std::cout << "geom: " << geometry->getCoordinateDimension() << std::endl;
// std::cout << "flatgeom: " << flatgeom->getCoordinateDimension() << std::endl;
//-- check if flattened geometry is valid
if (flatgeom->IsValid() == FALSE) {
std::cout << "Error: input polygon is not valid." << std::endl;
return 1;
}
if (proj == 2) {
Triangulationxy triangulation;
triangulateandtag_xy(geometry, triangulation);
for (Triangulationxy::Finite_faces_iterator currentFace = triangulation.finite_faces_begin(); currentFace != triangulation.finite_faces_end(); ++currentFace) {
std::cout << "--triangle--" << std::endl;
Point p = currentFace->vertex(0)->point();
std::cout << p.x() << ", " << p.y() << ", " << p.z() << std::endl;
p = currentFace->vertex(1)->point();
std::cout << p.x() << ", " << p.y() << ", " << p.z() << std::endl;
p = currentFace->vertex(2)->point();
std::cout << p.x() << ", " << p.y() << ", " << p.z() << std::endl;
}
}
else if (proj == 1) {
Triangulationxz triangulation;
triangulateandtag_xz(geometry, triangulation);
for (Triangulationxz::Finite_faces_iterator currentFace = triangulation.finite_faces_begin(); currentFace != triangulation.finite_faces_end(); ++currentFace) {
std::cout << "--triangle--" << std::endl;
Point p = currentFace->vertex(0)->point();
std::cout << p.x() << ", " << p.y() << ", " << p.z() << std::endl;
p = currentFace->vertex(1)->point();
std::cout << p.x() << ", " << p.y() << ", " << p.z() << std::endl;
p = currentFace->vertex(2)->point();
std::cout << p.x() << ", " << p.y() << ", " << p.z() << std::endl;
}
//.........这里部分代码省略.........