本文整理汇总了C++中OGRLinearRing::addPoint方法的典型用法代码示例。如果您正苦于以下问题:C++ OGRLinearRing::addPoint方法的具体用法?C++ OGRLinearRing::addPoint怎么用?C++ OGRLinearRing::addPoint使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类OGRLinearRing
的用法示例。
在下文中一共展示了OGRLinearRing::addPoint方法的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: main
//.........这里部分代码省略.........
assert(NULL != poFieldCur);
if( poField->GetType() != poFieldCur->GetType()
|| poField->GetWidth() != poFieldCur->GetWidth()
|| poField->GetPrecision() != poFieldCur->GetPrecision()
|| !EQUAL( poField->GetNameRef(), poFieldCur->GetNameRef() ) )
{
fprintf( stderr, "Schema of attributes of layer %s of %s does not match ... skipping it.\n",
poLayer->GetLayerDefn()->GetName(), papszArgv[nFirstSourceDataset]);
if (bFirstWarningForNonMatchingAttributes)
{
fprintf( stderr, "Note : you can override this behaviour with -accept_different_schemas option\n"
"but this may result in a tileindex incompatible with MapServer\n");
bFirstWarningForNonMatchingAttributes = FALSE;
}
bSkip = TRUE;
break;
}
}
if (bSkip)
continue;
}
/* -------------------------------------------------------------------- */
/* Get layer extents, and create a corresponding polygon */
/* geometry. */
/* -------------------------------------------------------------------- */
OGREnvelope sExtents;
OGRPolygon oRegion;
OGRLinearRing oRing;
if( poLayer->GetExtent( &sExtents, TRUE ) != OGRERR_NONE )
{
fprintf( stderr, "GetExtent() failed on layer %s of %s, skipping.\n",
poLayer->GetLayerDefn()->GetName(),
papszArgv[nFirstSourceDataset] );
continue;
}
oRing.addPoint( sExtents.MinX, sExtents.MinY );
oRing.addPoint( sExtents.MinX, sExtents.MaxY );
oRing.addPoint( sExtents.MaxX, sExtents.MaxY );
oRing.addPoint( sExtents.MaxX, sExtents.MinY );
oRing.addPoint( sExtents.MinX, sExtents.MinY );
oRegion.addRing( &oRing );
/* -------------------------------------------------------------------- */
/* Add layer to tileindex. */
/* -------------------------------------------------------------------- */
char szLocation[5000];
OGRFeature oTileFeat( poDstLayer->GetLayerDefn() );
sprintf( szLocation, "%s,%d",
fileNameToWrite, iLayer );
oTileFeat.SetGeometry( &oRegion );
oTileFeat.SetField( iTileIndexField, szLocation );
if( poDstLayer->CreateFeature( &oTileFeat ) != OGRERR_NONE )
{
fprintf( stderr, "Failed to create feature on tile index ... terminating." );
GDALClose( (GDALDatasetH) poDstDS );
exit( 1 );
}
}
/* -------------------------------------------------------------------- */
/* Cleanup this data source. */
/* -------------------------------------------------------------------- */
CPLFree(fileNameToWrite);
GDALClose( (GDALDatasetH)poDS );
}
/* -------------------------------------------------------------------- */
/* Close tile index and clear buffers. */
/* -------------------------------------------------------------------- */
GDALClose( (GDALDatasetH) poDstDS );
OGRFeatureDefn::DestroyFeatureDefn( poFeatureDefn );
if (alreadyExistingSpatialRef != NULL)
OGRSpatialReference::DestroySpatialReference( alreadyExistingSpatialRef );
CPLFree(current_path);
if (nExistingLayers)
{
int i;
for(i=0;i<nExistingLayers;i++)
{
CPLFree(existingLayersTab[i]);
}
CPLFree(existingLayersTab);
}
OGRCleanupAll();
return 0;
}
示例2: getGeometry
OGRGeometry* KMLNode::getGeometry(Nodetype eType)
{
unsigned int nCount, nCount2, nCountP;
OGRGeometry* poGeom = NULL;
KMLNode* poCoor = NULL;
Coordinate* psCoord = NULL;
if (sName_.compare("Point") == 0)
{
// Search coordinate Element
for(nCount = 0; nCount < pvpoChildren_->size(); nCount++)
{
if((*pvpoChildren_)[nCount]->sName_.compare("coordinates") == 0)
{
poCoor = (*pvpoChildren_)[nCount];
for(nCountP = 0; nCountP < poCoor->pvsContent_->size(); nCountP++)
{
psCoord = ParseCoordinate((*poCoor->pvsContent_)[nCountP]);
if(psCoord != NULL)
{
if (psCoord->bHasZ)
poGeom = new OGRPoint(psCoord->dfLongitude,
psCoord->dfLatitude,
psCoord->dfAltitude);
else
poGeom = new OGRPoint(psCoord->dfLongitude,
psCoord->dfLatitude);
delete psCoord;
return poGeom;
}
}
}
}
poGeom = new OGRPoint();
}
else if (sName_.compare("LineString") == 0)
{
// Search coordinate Element
poGeom = new OGRLineString();
for(nCount = 0; nCount < pvpoChildren_->size(); nCount++)
{
if((*pvpoChildren_)[nCount]->sName_.compare("coordinates") == 0)
{
poCoor = (*pvpoChildren_)[nCount];
for(nCountP = 0; nCountP < poCoor->pvsContent_->size(); nCountP++)
{
psCoord = ParseCoordinate((*poCoor->pvsContent_)[nCountP]);
if(psCoord != NULL)
{
if (psCoord->bHasZ)
((OGRLineString*)poGeom)->addPoint(psCoord->dfLongitude,
psCoord->dfLatitude,
psCoord->dfAltitude);
else
((OGRLineString*)poGeom)->addPoint(psCoord->dfLongitude,
psCoord->dfLatitude);
delete psCoord;
}
}
}
}
}
else if (sName_.compare("Polygon") == 0)
{
//*********************************
// Search outerBoundaryIs Element
//*********************************
poGeom = new OGRPolygon();
for(nCount = 0; nCount < pvpoChildren_->size(); nCount++)
{
if((*pvpoChildren_)[nCount]->sName_.compare("outerBoundaryIs") == 0 &&
(*pvpoChildren_)[nCount]->pvpoChildren_->size() > 0)
{
poCoor = (*(*pvpoChildren_)[nCount]->pvpoChildren_)[0];
}
}
// No outer boundary found
if(poCoor == NULL)
{
return poGeom;
}
// Search coordinate Element
OGRLinearRing* poLinearRing = NULL;
for(nCount = 0; nCount < poCoor->pvpoChildren_->size(); nCount++)
{
if((*poCoor->pvpoChildren_)[nCount]->sName_.compare("coordinates") == 0)
{
for(nCountP = 0; nCountP < (*poCoor->pvpoChildren_)[nCount]->pvsContent_->size(); nCountP++)
{
psCoord = ParseCoordinate((*(*poCoor->pvpoChildren_)[nCount]->pvsContent_)[nCountP]);
if(psCoord != NULL)
{
if (poLinearRing == NULL)
{
poLinearRing = new OGRLinearRing();
}
if (psCoord->bHasZ)
poLinearRing->addPoint(psCoord->dfLongitude,
psCoord->dfLatitude,
psCoord->dfAltitude);
//.........这里部分代码省略.........
示例3: if
//.........这里部分代码省略.........
if (CSLCount(papszTokens) == 5)
{
sStyle.penStyle = atoi(papszTokens[0]);
sStyle.penWidth = atoi(papszTokens[1]);
sStyle.penR = atoi(papszTokens[2]);
sStyle.penG = atoi(papszTokens[3]);
sStyle.penB = atoi(papszTokens[4]);
}
CSLDestroy(papszTokens);
}
}
else if (EQUALN(pszLine, "SB ", 3))
{
if (osCLASS.size() != 0)
{
char** papszTokens = CSLTokenizeString2(pszLine+3, ", ", 0);
if (CSLCount(papszTokens) == 3)
{
sStyle.fillR = atoi(papszTokens[0]);
sStyle.fillG = atoi(papszTokens[1]);
sStyle.fillB = atoi(papszTokens[2]);
}
CSLDestroy(papszTokens);
}
}
else if (EQUALN(pszLine, "DP ", 3))
{
pszLine += 3;
double dfLat, dfLon;
if (!OGROpenAirGetLatLon(pszLine, dfLat, dfLon))
continue;
oLR.addPoint(dfLon, dfLat);
dfLastLat = dfLat;
dfLastLon = dfLon;
}
else if (EQUALN(pszLine, "DA ", 3))
{
pszLine += 3;
char* pszStar = strchr((char*)pszLine, '*');
if (pszStar) *pszStar = 0;
char** papszTokens = CSLTokenizeString2(pszLine, ",", 0);
if (bHasCenter && CSLCount(papszTokens) == 3)
{
double dfRadius = atof(papszTokens[0]) * 1852;
double dfStartAngle = atof(papszTokens[1]);
double dfEndAngle = atof(papszTokens[2]);
if (bClockWise && dfEndAngle < dfStartAngle)
dfEndAngle += 360;
else if (!bClockWise && dfStartAngle < dfEndAngle)
dfEndAngle -= 360;
double dfStartDistance = dfRadius;
double dfEndDistance = dfRadius;
int nSign = (bClockWise) ? 1 : -1;
double dfAngle;
double dfLat, dfLon;
for(dfAngle = dfStartAngle;
(dfAngle - dfEndAngle) * nSign < 0;
dfAngle += nSign)
{
double pct = (dfAngle - dfStartAngle) /
(dfEndAngle - dfStartAngle);
示例4: if
OGRFeature *OGRHTFPolygonLayer::GetNextRawFeature()
{
OGRFeature* poFeature = new OGRFeature(poFeatureDefn);
const char* pszLine;
OGRLinearRing oLR;
bool bHasFirstCoord = false;
double dfFirstEasting = 0;
double dfFirstNorthing = 0;
double dfIslandEasting = 0;
double dfIslandNorthing = 0;
bool bInIsland = false;
OGRPolygon* poPoly = new OGRPolygon();
while( (pszLine = CPLReadLine2L(fpHTF, 1024, NULL)) != NULL)
{
if (pszLine[0] == ';')
{
/* comment */ ;
}
else if (pszLine[0] == 0)
{
/* end of polygon is marked by a blank line */
break;
}
else if (STARTS_WITH(pszLine, "POLYGON DESCRIPTION: "))
{
poFeature->SetField(0, pszLine + strlen("POLYGON DESCRIPTION: "));
}
else if (STARTS_WITH(pszLine, "POLYGON IDENTIFIER: "))
{
poFeature->SetField(1, pszLine + strlen("POLYGON IDENTIFIER: "));
}
else if (STARTS_WITH(pszLine, "SEAFLOOR COVERAGE: "))
{
const char* pszVal = pszLine + strlen("SEAFLOOR COVERAGE: ");
if (*pszVal != '*')
poFeature->SetField(2, pszVal);
}
else if (STARTS_WITH(pszLine, "POSITION ACCURACY: "))
{
const char* pszVal = pszLine + strlen("POSITION ACCURACY: ");
if (*pszVal != '*')
poFeature->SetField(3, pszVal);
}
else if (STARTS_WITH(pszLine, "DEPTH ACCURACY: "))
{
const char* pszVal = pszLine + strlen("DEPTH ACCURACY: ");
if (*pszVal != '*')
poFeature->SetField(4, pszVal);
}
else if (strcmp(pszLine, "END OF POLYGON DATA") == 0)
{
bEOF = true;
break;
}
else
{
char** papszTokens = CSLTokenizeString(pszLine);
if (CSLCount(papszTokens) == 4)
{
const double dfEasting = CPLAtof(papszTokens[2]);
const double dfNorthing = CPLAtof(papszTokens[3]);
if (!bHasFirstCoord)
{
bHasFirstCoord = true;
dfFirstEasting = dfEasting;
dfFirstNorthing = dfNorthing;
oLR.addPoint(dfEasting, dfNorthing);
}
else if (dfFirstEasting == dfEasting &&
dfFirstNorthing == dfNorthing)
{
if (!bInIsland)
{
oLR.addPoint(dfEasting, dfNorthing);
poPoly->addRing(&oLR);
oLR.empty();
bInIsland = true;
}
}
else if (bInIsland && oLR.getNumPoints() == 0)
{
dfIslandEasting = dfEasting;
dfIslandNorthing = dfNorthing;
oLR.addPoint(dfEasting, dfNorthing);
}
else if (bInIsland && dfIslandEasting == dfEasting &&
dfIslandNorthing == dfNorthing)
{
oLR.addPoint(dfEasting, dfNorthing);
poPoly->addRing(&oLR);
oLR.empty();
}
else
{
oLR.addPoint(dfEasting, dfNorthing);
}
}
//.........这里部分代码省略.........
示例5: save
bool Shape::save(const std::string& filename) {
if (shapeType == -1) {
std::cout << "Shape type is not set." << std::endl;
return false;
}
if (shapeObjects.size() == 0) {
std::cout << "No shape exists." << std::endl;
return false;
}
const char *pszDriverName = "ESRI Shapefile";
GDALDriver *poDriver;
GDALAllRegister();
poDriver = GetGDALDriverManager()->GetDriverByName(pszDriverName);
if (poDriver == NULL) {
printf("%s driver not available.\n", pszDriverName);
return false;
}
GDALDataset *poDS;
poDS = poDriver->Create(filename.c_str(), 0, 0, 0, GDT_Unknown, NULL);
if (poDS == NULL) {
printf("Creation of output file failed.\n");
return false;
}
OGRLayer *poLayer;
if (shapeType == wkbPoint) {
poLayer = poDS->CreateLayer("point_out", NULL, wkbPoint, NULL);
}
else if (shapeType == wkbLineString) {
poLayer = poDS->CreateLayer("point_out", NULL, wkbLineString, NULL);
}
else if (shapeType == wkbPolygon) {
poLayer = poDS->CreateLayer("point_out", NULL, wkbPolygon, NULL);
}
if (poLayer == NULL) {
printf("Layer creation failed.\n");
return false;
}
for (auto it = shapeObjects[0].attributes.begin(); it != shapeObjects[0].attributes.end(); ++it) {
OGRFieldDefn oField(it->first.c_str(), static_cast<OGRFieldType>(it->second.type));
if (it->second.type == OFTString) {
oField.SetWidth(it->second.stringValue().size());
}
if (poLayer->CreateField(&oField) != OGRERR_NONE) {
printf("Creating Name field failed.\n");
return false;
}
}
for (int i = 0; i < shapeObjects.size(); ++i) {
if (shapeObjects[i].parts.size() == 0) continue;
OGRFeature *poFeature;
poFeature = OGRFeature::CreateFeature(poLayer->GetLayerDefn());
// 属性をセット
for (auto it = shapeObjects[i].attributes.begin(); it != shapeObjects[i].attributes.end(); ++it) {
poFeature->SetField(it->first.c_str(), it->second.stringValue().c_str());
}
// ジオメトリ情報をセット
if (shapeType == wkbPoint) {
OGRPoint point;
point.setX(shapeObjects[i].parts[0].points[0].x);
point.setY(shapeObjects[i].parts[0].points[0].y);
point.setZ(shapeObjects[i].parts[0].points[0].z);
poFeature->SetGeometry(&point);
}
else if (shapeType == wkbLineString) {
OGRLineString lineString;
for (int k = 0; k < shapeObjects[i].parts[0].points.size(); ++k) {
lineString.addPoint(shapeObjects[i].parts[0].points[k].x, shapeObjects[i].parts[0].points[k].y, shapeObjects[i].parts[0].points[k].z);
}
poFeature->SetGeometry(&lineString);
}
else if (shapeType == wkbPolygon) {
OGRPolygon polygon;
for (int j = 0; j < shapeObjects[i].parts.size(); ++j) {
OGRLinearRing linearRing;
for (int k = 0; k < shapeObjects[i].parts[j].points.size(); ++k) {
linearRing.addPoint(shapeObjects[i].parts[j].points[k].x, shapeObjects[i].parts[j].points[k].y, shapeObjects[i].parts[j].points[k].z);
}
polygon.addRing(&linearRing);
}
poFeature->SetGeometry(&polygon);
}
if (poLayer->CreateFeature(poFeature) != OGRERR_NONE) {
printf("Failed to create feature in shapefile.\n");
return false;
}
OGRFeature::DestroyFeature(poFeature);
}
GDALClose(poDS);
//.........这里部分代码省略.........
示例6: OGRPoint
OGRFeature *OGRCADLayer::GetFeature( GIntBig nFID )
{
if( poCADLayer.getGeometryCount() <= static_cast<size_t>(nFID)
|| nFID < 0 )
{
return nullptr;
}
OGRFeature *poFeature = nullptr;
CADGeometry *poCADGeometry = poCADLayer.getGeometry( static_cast<size_t>(nFID) );
if( nullptr == poCADGeometry || GetLastErrorCode() != CADErrorCodes::SUCCESS )
{
CPLError( CE_Failure, CPLE_NotSupported,
"Failed to get geometry with ID = " CPL_FRMT_GIB " from layer \"%s\". Libopencad errorcode: %d",
nFID, poCADLayer.getName().c_str(), GetLastErrorCode() );
return nullptr;
}
poFeature = new OGRFeature( poFeatureDefn );
poFeature->SetFID( nFID );
poFeature->SetField( FIELD_NAME_THICKNESS, poCADGeometry->getThickness() );
if( !poCADGeometry->getEED().empty() )
{
std::vector<std::string> asGeometryEED = poCADGeometry->getEED();
std::string sEEDAsOneString = "";
for ( std::vector<std::string>::const_iterator
iter = asGeometryEED.cbegin();
iter != asGeometryEED.cend(); ++iter )
{
sEEDAsOneString += *iter;
sEEDAsOneString += ' ';
}
poFeature->SetField( FIELD_NAME_EXT_DATA, sEEDAsOneString.c_str() );
}
RGBColor stRGB = poCADGeometry->getColor();
CPLString sHexColor;
sHexColor.Printf("#%02X%02X%02X%02X", stRGB.R, stRGB.G, stRGB.B, 255);
poFeature->SetField( FIELD_NAME_COLOR, sHexColor );
CPLString sStyle;
sStyle.Printf("PEN(c:%s,w:5px)", sHexColor.c_str());
poFeature->SetStyleString( sStyle );
std::vector< CADAttrib > oBlockAttrs = poCADGeometry->getBlockAttributes();
for( const CADAttrib& oAttrib : oBlockAttrs )
{
CPLString osTag = oAttrib.getTag();
auto featureAttrIt = asFeaturesAttributes.find( osTag );
if( featureAttrIt != asFeaturesAttributes.end())
{
poFeature->SetField(*featureAttrIt, oAttrib.getTextValue().c_str());
}
}
switch( poCADGeometry->getType() )
{
case CADGeometry::POINT:
{
CADPoint3D * const poCADPoint = ( CADPoint3D* ) poCADGeometry;
CADVector stPositionVector = poCADPoint->getPosition();
poFeature->SetGeometryDirectly( new OGRPoint( stPositionVector.getX(),
stPositionVector.getY(),
stPositionVector.getZ() ) );
poFeature->SetField( FIELD_NAME_GEOMTYPE, "CADPoint" );
break;
}
case CADGeometry::LINE:
{
CADLine * const poCADLine = ( CADLine* ) poCADGeometry;
OGRLineString *poLS = new OGRLineString();
poLS->addPoint( poCADLine->getStart().getPosition().getX(),
poCADLine->getStart().getPosition().getY(),
poCADLine->getStart().getPosition().getZ() );
poLS->addPoint( poCADLine->getEnd().getPosition().getX(),
poCADLine->getEnd().getPosition().getY(),
poCADLine->getEnd().getPosition().getZ() );
poFeature->SetGeometryDirectly( poLS );
poFeature->SetField( FIELD_NAME_GEOMTYPE, "CADLine" );
break;
}
case CADGeometry::SOLID:
{
CADSolid * const poCADSolid = ( CADSolid* ) poCADGeometry;
OGRPolygon * poPoly = new OGRPolygon();
OGRLinearRing * poLR = new OGRLinearRing();
std::vector<CADVector> astSolidCorners = poCADSolid->getCorners();
for( size_t i = 0; i < astSolidCorners.size(); ++i )
{
poLR->addPoint( astSolidCorners[i].getX(),
astSolidCorners[i].getY(),
astSolidCorners[i].getZ());
//.........这里部分代码省略.........
示例7: SavePolygons
//.........这里部分代码省略.........
int multiring = 0;
printf ("Write File: %s (polygon)\n", OutFilename);
for (size_t k = 0; k < m_labels; k++)
{
if (multiring == 1) {
k = k - 1;
multiring = 0;
}
if (linelists[k].size() == 0)
continue;
// insert field data
OGRFeature *liFeature;
liFeature = OGRFeature::CreateFeature( liLayer->GetLayerDefn() );
liFeature->SetField( "CLASS", (int) k );
liFeature->SetField( "AREA", (int) labelpixels.at(k) );
for ( size_t b = 0; b < m_bands; b++ )
{
stringstream value; value << b+1;
std::string FieldName = value.str() + "_AVERAGE";
liFeature->SetField( FieldName.c_str(), (double) avgCH[b].at(k) );
}
for ( size_t b = 0; b < m_bands; b++ )
{
stringstream value; value << b+1;
std::string FieldName = value.str() + "_STDDEV";
liFeature->SetField( FieldName.c_str(), stdCH[b].at(k) );
}
// initiate polygon start
OGRLinearRing linestring;
linestring.setCoordinateDimension(2);
linestring.addPoint( oX + (double) linelists[k][0].sX * mX, oY + mY * (double) linelists[k][0].sY );
linestring.addPoint( oX + (double) linelists[k][0].eX * mX, oY + mY * (double) linelists[k][0].eY );
linelists[k].erase( linelists[k].begin() );
// construct polygon from lines
while ( linelists[k].size() > 0 )
{
if (multiring == 1) break;
vector<LINE>::iterator it = linelists[k].begin();
for (; it != linelists[k].end(); ++it)
{
double ltX = linestring.getX(linestring.getNumPoints()-1);
double ltY = linestring.getY(linestring.getNumPoints()-1);
double csX = oX + (double) it->sX * mX;
double csY = oY + mY * (double) it->sY;
double ceX = oX + (double) it->eX * mX;
double ceY = oY + mY * (double) it->eY;
if ( ( csX == ltX ) && ( csY == ltY ) ) {
linestring.addPoint(ceX, ceY);
linelists[k].erase(it);
break;
}
if ( ( ceX == ltX ) && ( ceY == ltY ) ) {
linestring.addPoint(csX, csY);
linelists[k].erase(it);
break;
}
if (it == linelists[k].end()-1) {
multiring = 1;
break;
}
示例8: if
OGRFeature *OGRSUALayer::GetNextRawFeature()
{
const char* pszLine;
CPLString osTYPE, osCLASS, osTITLE, osTOPS, osBASE;
OGRLinearRing oLR;
double dfLastLat = 0, dfLastLon = 0;
int bFirst = TRUE;
if (bEOF)
return NULL;
while( true )
{
if (bFirst && bHasLastLine)
{
pszLine = osLastLine.c_str();
bFirst = FALSE;
}
else
{
pszLine = CPLReadLine2L(fpSUA, 1024, NULL);
if (pszLine == NULL)
{
bEOF = TRUE;
if (oLR.getNumPoints() == 0)
return NULL;
break;
}
osLastLine = pszLine;
bHasLastLine = TRUE;
}
if (pszLine[0] == '#' || pszLine[0] == '\0')
continue;
if (STARTS_WITH_CI(pszLine, "TYPE="))
{
if (osTYPE.size() != 0)
break;
osTYPE = pszLine + 5;
}
else if (STARTS_WITH_CI(pszLine, "CLASS="))
{
if (osCLASS.size() != 0)
break;
osCLASS = pszLine + 6;
}
else if (STARTS_WITH_CI(pszLine, "TITLE="))
{
if (osTITLE.size() != 0)
break;
osTITLE = pszLine + 6;
}
else if (STARTS_WITH_CI(pszLine, "TOPS="))
osTOPS = pszLine + 5;
else if (STARTS_WITH_CI(pszLine, "BASE="))
osBASE = pszLine + 5;
else if (STARTS_WITH_CI(pszLine, "POINT="))
{
pszLine += 6;
if (strlen(pszLine) != 16)
continue;
double dfLat, dfLon;
if (!GetLatLon(pszLine, dfLat, dfLon))
continue;
oLR.addPoint(dfLon, dfLat);
dfLastLat = dfLat;
dfLastLon = dfLon;
}
else if (STARTS_WITH_CI(pszLine, "CLOCKWISE") || STARTS_WITH_CI(pszLine, "ANTI-CLOCKWISE"))
{
if (oLR.getNumPoints() == 0)
continue;
int bClockWise = STARTS_WITH_CI(pszLine, "CLOCKWISE");
/*const char* pszRADIUS = strstr(pszLine, "RADIUS=");
if (pszRADIUS == NULL)
continue;
double dfRADIUS = CPLAtof(pszRADIUS + 7) * 1852;*/
const char* pszCENTRE = strstr(pszLine, "CENTRE=");
if (pszCENTRE == NULL)
continue;
pszCENTRE += 7;
if (strlen(pszCENTRE) < 17 || pszCENTRE[16] != ' ')
continue;
double dfCenterLat, dfCenterLon;
if (!GetLatLon(pszCENTRE, dfCenterLat, dfCenterLon))
continue;
const char* pszTO = strstr(pszLine, "TO=");
if (pszTO == NULL)
continue;
pszTO += 3;
if (strlen(pszTO) != 16)
continue;
double dfToLat, dfToLon;
//.........这里部分代码省略.........
示例9: if
//.........这里部分代码省略.........
break;
case wkbMultiPoint:
poGeom = new OGRMultiPoint();
break;
case wkbMultiLineString:
poGeom = new OGRMultiLineString();
reinterpret_cast<OGRMultiLineString *>(poGeom)->
addGeometryDirectly(new OGRLineString() );
break;
case wkbPoint:
case wkbUnknown:
default:
poGeom = new OGRPoint();
break;
}
}
switch( wkbFlatten(poGeom->getGeometryType()) )
{
case wkbPoint:
reinterpret_cast<OGRPoint *>(poGeom)->setX( dfX );
reinterpret_cast<OGRPoint *>(poGeom)->setY( dfY );
if( nDim == 3 )
reinterpret_cast<OGRPoint *>(poGeom)->setZ( dfZ );
break;
case wkbLineString:
if( nDim == 3 )
reinterpret_cast<OGRLineString *>(poGeom)->
addPoint( dfX, dfY, dfZ);
else
reinterpret_cast<OGRLineString *>(poGeom)->
addPoint( dfX, dfY );
break;
case wkbPolygon:
case wkbMultiPolygon:
{
OGRPolygon *poPoly = NULL;
if( wkbFlatten(poGeom->getGeometryType())
== wkbMultiPolygon )
{
OGRMultiPolygon *poMP = (OGRMultiPolygon *) poGeom;
poPoly = (OGRPolygon*) poMP->getGeometryRef(
poMP->getNumGeometries() - 1 );
}
else
poPoly = reinterpret_cast<OGRPolygon *>(poGeom);
OGRLinearRing *poRing = NULL;
if( poPoly->getNumInteriorRings() == 0 )
poRing = poPoly->getExteriorRing();
else
poRing = poPoly->getInteriorRing(
poPoly->getNumInteriorRings()-1 );
if( nDim == 3 )
poRing->addPoint( dfX, dfY, dfZ );
else
poRing->addPoint( dfX, dfY );
}