本文整理汇总了C++中OGRGeometry::flattenTo2D方法的典型用法代码示例。如果您正苦于以下问题:C++ OGRGeometry::flattenTo2D方法的具体用法?C++ OGRGeometry::flattenTo2D怎么用?C++ OGRGeometry::flattenTo2D使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类OGRGeometry
的用法示例。
在下文中一共展示了OGRGeometry::flattenTo2D方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的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;
}
//.........这里部分代码省略.........
示例2: CollectBoundaryPath
//.........这里部分代码省略.........
if( poDS->ReadValue(szLineBuf,sizeof(szLineBuf)) == 40 )
dfRadius = CPLAtof(szLineBuf);
else
break;
if( poDS->ReadValue(szLineBuf,sizeof(szLineBuf)) == 50 )
dfStartAngle = CPLAtof(szLineBuf);
else
break;
if( poDS->ReadValue(szLineBuf,sizeof(szLineBuf)) == 51 )
dfEndAngle = CPLAtof(szLineBuf);
else
break;
if( (nCode = poDS->ReadValue(szLineBuf,sizeof(szLineBuf))) == 73 )
bCounterClockwise = atoi(szLineBuf);
else if (nCode >= 0)
poDS->UnreadValue();
if( dfStartAngle > dfEndAngle )
dfEndAngle += 360.0;
if( bCounterClockwise )
{
dfStartAngle *= -1;
dfEndAngle *= -1;
}
OGRGeometry *poArc = OGRGeometryFactory::approximateArcAngles(
dfCenterX, dfCenterY, 0.0,
dfRadius, dfRadius, 0.0,
dfStartAngle, dfEndAngle, 0.0 );
poArc->flattenTo2D();
poGC->addGeometryDirectly( poArc );
}
/* -------------------------------------------------------------------- */
/* Process an elliptical arc. */
/* -------------------------------------------------------------------- */
else if( nEdgeType == ET_ELLIPTIC_ARC )
{
double dfCenterX;
double dfCenterY;
double dfMajorRadius, dfMinorRadius;
double dfMajorX, dfMajorY;
double dfStartAngle;
double dfEndAngle;
double dfRotation;
double dfRatio;
int bCounterClockwise = FALSE;
if( poDS->ReadValue(szLineBuf,sizeof(szLineBuf)) == 10 )
dfCenterX = CPLAtof(szLineBuf);
else
break;
if( poDS->ReadValue(szLineBuf,sizeof(szLineBuf)) == 20 )
dfCenterY = CPLAtof(szLineBuf);
else
break;
if( poDS->ReadValue(szLineBuf,sizeof(szLineBuf)) == 11 )
dfMajorX = CPLAtof(szLineBuf);
else
示例3: CreateFeature
OGRErr OGRMySQLTableLayer::CreateFeature( OGRFeature *poFeature )
{
MYSQL_RES *hResult=NULL;
CPLString osCommand;
int i, bNeedComma = FALSE;
/* -------------------------------------------------------------------- */
/* Form the INSERT command. */
/* -------------------------------------------------------------------- */
osCommand.Printf( "INSERT INTO `%s` (", poFeatureDefn->GetName() );
if( poFeature->GetGeometryRef() != NULL )
{
osCommand = osCommand + "`" + pszGeomColumn + "` ";
bNeedComma = TRUE;
}
if( poFeature->GetFID() != OGRNullFID && pszFIDColumn != NULL )
{
if( bNeedComma )
osCommand += ", ";
osCommand = osCommand + "`" + pszFIDColumn + "` ";
bNeedComma = TRUE;
}
for( i = 0; i < poFeatureDefn->GetFieldCount(); i++ )
{
if( !poFeature->IsFieldSet( i ) )
continue;
if( !bNeedComma )
bNeedComma = TRUE;
else
osCommand += ", ";
osCommand = osCommand + "`"
+ poFeatureDefn->GetFieldDefn(i)->GetNameRef() + "`";
}
osCommand += ") VALUES (";
// Set the geometry
bNeedComma = poFeature->GetGeometryRef() != NULL;
if( poFeature->GetGeometryRef() != NULL)
{
char *pszWKT = NULL;
if( poFeature->GetGeometryRef() != NULL )
{
OGRGeometry *poGeom = (OGRGeometry *) poFeature->GetGeometryRef();
poGeom->closeRings();
poGeom->flattenTo2D();
poGeom->exportToWkt( &pszWKT );
}
if( pszWKT != NULL )
{
osCommand +=
CPLString().Printf(
"GeometryFromText('%s',%d) ", pszWKT, nSRSId );
OGRFree( pszWKT );
}
else
osCommand += "''";
}
// Set the FID
if( poFeature->GetFID() != OGRNullFID && pszFIDColumn != NULL )
{
if( bNeedComma )
osCommand += ", ";
osCommand += CPLString().Printf( "%ld ", poFeature->GetFID() );
bNeedComma = TRUE;
}
for( i = 0; i < poFeatureDefn->GetFieldCount(); i++ )
{
if( !poFeature->IsFieldSet( i ) )
continue;
if( bNeedComma )
osCommand += ", ";
else
bNeedComma = TRUE;
const char *pszStrValue = poFeature->GetFieldAsString(i);
if( poFeatureDefn->GetFieldDefn(i)->GetType() != OFTInteger
&& poFeatureDefn->GetFieldDefn(i)->GetType() != OFTReal
&& poFeatureDefn->GetFieldDefn(i)->GetType() != OFTBinary )
{
int iChar;
//We need to quote and escape string fields.
//.........这里部分代码省略.........
示例4: CollectBoundaryPath
//.........这里部分代码省略.........
break;
if( poDS->ReadValue(szLineBuf,sizeof(szLineBuf)) == 21 )
dfEndY = atof(szLineBuf);
else
break;
OGRLineString *poLS = new OGRLineString();
poLS->addPoint( dfStartX, dfStartY );
poLS->addPoint( dfEndX, dfEndY );
poGC->addGeometryDirectly( poLS );
}
/* -------------------------------------------------------------------- */
/* Process a circular arc. */
/* -------------------------------------------------------------------- */
else if( nEdgeType == ET_CIRCULAR_ARC )
{
double dfCenterX;
double dfCenterY;
double dfRadius;
double dfStartAngle;
double dfEndAngle;
int bCounterClockwise = FALSE;
if( poDS->ReadValue(szLineBuf,sizeof(szLineBuf)) == 10 )
dfCenterX = atof(szLineBuf);
else
break;
if( poDS->ReadValue(szLineBuf,sizeof(szLineBuf)) == 20 )
dfCenterY = atof(szLineBuf);
else
break;
if( poDS->ReadValue(szLineBuf,sizeof(szLineBuf)) == 40 )
dfRadius = atof(szLineBuf);
else
break;
if( poDS->ReadValue(szLineBuf,sizeof(szLineBuf)) == 50 )
dfStartAngle = -1 * atof(szLineBuf);
else
break;
if( poDS->ReadValue(szLineBuf,sizeof(szLineBuf)) == 51 )
dfEndAngle = -1 * atof(szLineBuf);
else
break;
if( poDS->ReadValue(szLineBuf,sizeof(szLineBuf)) == 73 )
bCounterClockwise = atoi(szLineBuf);
else
poDS->UnreadValue();
if( bCounterClockwise )
{
double dfTemp = dfStartAngle;
dfStartAngle = dfEndAngle;
dfEndAngle = dfTemp;
}
if( dfStartAngle > dfEndAngle )
dfEndAngle += 360.0;
OGRGeometry *poArc = OGRGeometryFactory::approximateArcAngles(
dfCenterX, dfCenterY, 0.0,
dfRadius, dfRadius, 0.0,
dfStartAngle, dfEndAngle, 0.0 );
poArc->flattenTo2D();
poGC->addGeometryDirectly( poArc );
}
else
{
CPLDebug( "DXF", "Unsupported HATCH boundary line type:%d",
nEdgeType );
return OGRERR_UNSUPPORTED_OPERATION;
}
}
/* -------------------------------------------------------------------- */
/* Number of source boundary objects. */
/* -------------------------------------------------------------------- */
nCode = poDS->ReadValue(szLineBuf,sizeof(szLineBuf));
if( nCode != 97 )
poDS->UnreadValue();
else
{
if( atoi(szLineBuf) != 0 )
{
CPLDebug( "DXF", "got unsupported HATCH boundary object references." );
return OGRERR_UNSUPPORTED_OPERATION;
}
}
return OGRERR_NONE;
}
示例5: CollectBoundaryPath
//.........这里部分代码省略.........
double dfEndAngle = 0.0;
if( (nCode = poDS->ReadValue(szLineBuf, sizeof(szLineBuf))) == 51 )
dfEndAngle = CPLAtof(szLineBuf);
else
break;
bool bCounterClockwise = false;
if( (nCode = poDS->ReadValue(szLineBuf, sizeof(szLineBuf))) == 73 )
bCounterClockwise = atoi(szLineBuf) != 0;
else if (nCode >= 0)
poDS->UnreadValue();
else
break;
if( dfStartAngle > dfEndAngle )
dfEndAngle += 360.0;
if( bCounterClockwise )
{
dfStartAngle *= -1;
dfEndAngle *= -1;
}
if( fabs(dfEndAngle - dfStartAngle) <= 361.0 )
{
OGRGeometry *poArc = OGRGeometryFactory::approximateArcAngles(
dfCenterX, dfCenterY, dfElevation,
dfRadius, dfRadius, 0.0,
dfStartAngle, dfEndAngle, 0.0 );
// If the input was 2D, we assume we want to keep it that way
if( dfElevation == 0.0 )
poArc->flattenTo2D();
poGC->addGeometryDirectly( poArc );
}
else
{
// TODO: emit error ?
}
}
/* -------------------------------------------------------------------- */
/* Process an elliptical arc. */
/* -------------------------------------------------------------------- */
else if( nEdgeType == ET_ELLIPTIC_ARC )
{
double dfCenterX = 0.0;
if( (nCode = poDS->ReadValue(szLineBuf, sizeof(szLineBuf))) == 10 )
dfCenterX = CPLAtof(szLineBuf);
else
break;
double dfCenterY = 0.0;
if( (nCode = poDS->ReadValue(szLineBuf, sizeof(szLineBuf))) == 20 )
dfCenterY = CPLAtof(szLineBuf);
else
break;
double dfMajorX = 0.0;
if( (nCode = poDS->ReadValue(szLineBuf, sizeof(szLineBuf))) == 11 )
dfMajorX = CPLAtof(szLineBuf);
示例6: ICreateFeature
OGRErr OGRMySQLTableLayer::ICreateFeature( OGRFeature *poFeature )
{
int bNeedComma = FALSE;
CPLString osCommand;
/* -------------------------------------------------------------------- */
/* Form the INSERT command. */
/* -------------------------------------------------------------------- */
osCommand.Printf( "INSERT INTO `%s` (", poFeatureDefn->GetName() );
if( poFeature->GetGeometryRef() != nullptr )
{
osCommand = osCommand + "`" + pszGeomColumn + "` ";
bNeedComma = TRUE;
}
if( poFeature->GetFID() != OGRNullFID && pszFIDColumn != nullptr )
{
if( bNeedComma )
osCommand += ", ";
osCommand = osCommand + "`" + pszFIDColumn + "` ";
bNeedComma = TRUE;
}
for( int i = 0; i < poFeatureDefn->GetFieldCount(); i++ )
{
if( !poFeature->IsFieldSet( i ) )
continue;
if( !bNeedComma )
bNeedComma = TRUE;
else
osCommand += ", ";
osCommand = osCommand + "`"
+ poFeatureDefn->GetFieldDefn(i)->GetNameRef() + "`";
}
osCommand += ") VALUES (";
// Set the geometry
bNeedComma = poFeature->GetGeometryRef() != nullptr;
if( poFeature->GetGeometryRef() != nullptr)
{
char *pszWKT = nullptr;
if( poFeature->GetGeometryRef() != nullptr )
{
OGRGeometry *poGeom = (OGRGeometry *) poFeature->GetGeometryRef();
poGeom->closeRings();
poGeom->flattenTo2D();
poGeom->exportToWkt( &pszWKT );
}
if( pszWKT != nullptr )
{
const char* pszAxisOrder = "";
OGRSpatialReference* l_poSRS = GetSpatialRef();
if( poDS->GetMajorVersion() >= 8 && !poDS->IsMariaDB() &&
l_poSRS && l_poSRS->IsGeographic() )
{
pszAxisOrder = ", 'axis-order=long-lat'";
}
osCommand +=
CPLString().Printf(
"%s('%s',%d%s) ",
poDS->GetMajorVersion() >= 8 ? "ST_GeomFromText" : "GeometryFromText",
pszWKT, nSRSId, pszAxisOrder );
CPLFree( pszWKT );
}
else
osCommand += "''";
}
// Set the FID
if( poFeature->GetFID() != OGRNullFID && pszFIDColumn != nullptr )
{
GIntBig nFID = poFeature->GetFID();
if( !CPL_INT64_FITS_ON_INT32(nFID) &&
GetMetadataItem(OLMD_FID64) == nullptr )
{
CPLString osCommand2;
osCommand2.Printf(
"ALTER TABLE `%s` MODIFY COLUMN `%s` BIGINT UNIQUE NOT NULL AUTO_INCREMENT",
poFeatureDefn->GetName(), pszFIDColumn );
if( mysql_query(poDS->GetConn(), osCommand2 ) )
{
poDS->ReportError( osCommand2 );
return OGRERR_FAILURE;
}
// make sure to attempt to free results of successful queries
MYSQL_RES *hResult = mysql_store_result( poDS->GetConn() );
if( hResult != nullptr )
//.........这里部分代码省略.........