本文整理汇总了C++中OGRGeometry::exportToWkt方法的典型用法代码示例。如果您正苦于以下问题:C++ OGRGeometry::exportToWkt方法的具体用法?C++ OGRGeometry::exportToWkt怎么用?C++ OGRGeometry::exportToWkt使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类OGRGeometry
的用法示例。
在下文中一共展示了OGRGeometry::exportToWkt方法的13个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: OGR2SQLITE_ST_AsText
static
void OGR2SQLITE_ST_AsText(sqlite3_context* pContext,
int argc, sqlite3_value** argv)
{
OGRGeometry* poGeom = OGR2SQLITE_GetGeom(pContext, argc, argv, NULL);
if( poGeom != NULL )
{
char* pszWKT = NULL;
if( poGeom->exportToWkt(&pszWKT) == OGRERR_NONE )
sqlite3_result_text( pContext, pszWKT, -1, CPLFree);
else
sqlite3_result_null (pContext);
delete poGeom;
}
else
sqlite3_result_null (pContext);
}
示例2: CreateFeature
OGRErr OGRMSSQLSpatialTableLayer::CreateFeature( OGRFeature *poFeature )
{
GetLayerDefn();
if( NULL == poFeature )
{
CPLError( CE_Failure, CPLE_AppDefined,
"NULL pointer to OGRFeature passed to CreateFeature()." );
return OGRERR_FAILURE;
}
ClearStatement();
CPLODBCStatement oStatement( poDS->GetSession() );
/* the fid values are retieved from the source layer */
if( poFeature->GetFID() != OGRNullFID && pszFIDColumn != NULL )
oStatement.Appendf("SET IDENTITY_INSERT [%s].[%s] ON;", pszSchemaName, pszTableName );
/* -------------------------------------------------------------------- */
/* Form the INSERT command. */
/* -------------------------------------------------------------------- */
oStatement.Appendf( "INSERT INTO [%s].[%s] (", pszSchemaName, pszTableName );
OGRMSSQLGeometryValidator oValidator(poFeature->GetGeometryRef());
OGRGeometry *poGeom = oValidator.GetValidGeometryRef();
if (poFeature->GetGeometryRef() != poGeom)
{
CPLError( CE_Warning, CPLE_NotSupported,
"Geometry with FID = %ld has been modified.", poFeature->GetFID() );
}
int bNeedComma = FALSE;
if (poGeom != NULL && pszGeomColumn != NULL)
{
oStatement.Append( pszGeomColumn );
bNeedComma = TRUE;
}
if( poFeature->GetFID() != OGRNullFID && pszFIDColumn != NULL )
{
if (bNeedComma)
oStatement.Appendf( ", [%s]", pszFIDColumn );
else
{
oStatement.Appendf( "[%s]", pszFIDColumn );
bNeedComma = TRUE;
}
}
int nFieldCount = poFeatureDefn->GetFieldCount();
int i;
for( i = 0; i < nFieldCount; i++ )
{
if( !poFeature->IsFieldSet( i ) )
continue;
if (bNeedComma)
oStatement.Appendf( ", [%s]", poFeatureDefn->GetFieldDefn(i)->GetNameRef() );
else
{
oStatement.Appendf( "[%s]", poFeatureDefn->GetFieldDefn(i)->GetNameRef() );
bNeedComma = TRUE;
}
}
oStatement.Appendf( ") VALUES (" );
/* Set the geometry */
bNeedComma = FALSE;
if(poGeom != NULL && pszGeomColumn != NULL)
{
char *pszWKT = NULL;
//poGeom->setCoordinateDimension( nCoordDimension );
poGeom->exportToWkt( &pszWKT );
if( pszWKT != NULL && (nGeomColumnType == MSSQLCOLTYPE_GEOMETRY
|| nGeomColumnType == MSSQLCOLTYPE_GEOGRAPHY))
{
if (nGeomColumnType == MSSQLCOLTYPE_GEOGRAPHY)
{
oStatement.Append( "geography::STGeomFromText(" );
OGRMSSQLAppendEscaped(&oStatement, pszWKT);
oStatement.Appendf(",%d)", nSRSId );
}
else
{
oStatement.Append( "geometry::STGeomFromText(" );
OGRMSSQLAppendEscaped(&oStatement, pszWKT);
oStatement.Appendf(",%d).MakeValid()", nSRSId );
}
}
else
oStatement.Append( "null" );
//.........这里部分代码省略.........
示例3: SetFeature
OGRErr OGRMSSQLSpatialTableLayer::SetFeature( OGRFeature *poFeature )
{
OGRErr eErr = OGRERR_FAILURE;
GetLayerDefn();
if( NULL == poFeature )
{
CPLError( CE_Failure, CPLE_AppDefined,
"NULL pointer to OGRFeature passed to SetFeature()." );
return eErr;
}
if( poFeature->GetFID() == OGRNullFID )
{
CPLError( CE_Failure, CPLE_AppDefined,
"FID required on features given to SetFeature()." );
return eErr;
}
if( !pszFIDColumn )
{
CPLError( CE_Failure, CPLE_AppDefined,
"Unable to update features in tables without\n"
"a recognised FID column.");
return eErr;
}
ClearStatement();
/* -------------------------------------------------------------------- */
/* Form the UPDATE command. */
/* -------------------------------------------------------------------- */
CPLODBCStatement oStmt( poDS->GetSession() );
oStmt.Appendf( "UPDATE [%s].[%s] SET ", pszSchemaName, pszTableName);
OGRMSSQLGeometryValidator oValidator(poFeature->GetGeometryRef());
OGRGeometry *poGeom = oValidator.GetValidGeometryRef();
if (poFeature->GetGeometryRef() != poGeom)
{
CPLError( CE_Warning, CPLE_NotSupported,
"Geometry with FID = %ld has been modified.", poFeature->GetFID() );
}
int bNeedComma = FALSE;
if(pszGeomColumn != NULL)
{
char *pszWKT = NULL;
if (poGeom != NULL)
poGeom->exportToWkt( &pszWKT );
oStmt.Appendf( "[%s] = ", pszGeomColumn );
if( pszWKT != NULL && (nGeomColumnType == MSSQLCOLTYPE_GEOMETRY
|| nGeomColumnType == MSSQLCOLTYPE_GEOGRAPHY))
{
if (nGeomColumnType == MSSQLCOLTYPE_GEOGRAPHY)
{
oStmt.Append( "geography::STGeomFromText(" );
OGRMSSQLAppendEscaped(&oStmt, pszWKT);
oStmt.Appendf(",%d)", nSRSId );
}
else
{
oStmt.Append( "geometry::STGeomFromText(" );
OGRMSSQLAppendEscaped(&oStmt, pszWKT);
oStmt.Appendf(",%d).MakeValid()", nSRSId );
}
}
else
oStmt.Append( "null" );
bNeedComma = TRUE;
CPLFree(pszWKT);
}
int nFieldCount = poFeatureDefn->GetFieldCount();
int i;
for( i = 0; i < nFieldCount; i++ )
{
if (bNeedComma)
oStmt.Appendf( ", [%s] = ", poFeatureDefn->GetFieldDefn(i)->GetNameRef() );
else
{
oStmt.Appendf( "[%s] = ", poFeatureDefn->GetFieldDefn(i)->GetNameRef() );
bNeedComma = TRUE;
}
if( !poFeature->IsFieldSet( i ) )
oStmt.Append( "null" );
else
AppendFieldValue(&oStmt, poFeature, i);
}
/* Add the WHERE clause */
//.........这里部分代码省略.........
示例4: BuildURL
CPLString OGRPLScenesLayer::BuildURL(int nFeatures)
{
CPLString osURL = osBaseURL + CPLSPrintf("?count=%d", nFeatures);
if( bAcquiredAscending == 1 )
osURL += "&order_by=acquired%20asc";
else if( bAcquiredAscending == 0 )
osURL += "&order_by=acquired%20desc";
if( m_poFilterGeom != NULL || poMainFilter != NULL )
{
OGRGeometry* poIntersection = NULL;
OGRGeometry* poFilterGeom = m_poFilterGeom;
if( poFilterGeom )
{
OGREnvelope sEnvelope;
poFilterGeom->getEnvelope(&sEnvelope);
if( sEnvelope.MinX <= -180 && sEnvelope.MinY <= -90 &&
sEnvelope.MaxX >= 180 && sEnvelope.MaxY >= 90 )
poFilterGeom = NULL;
}
if( poFilterGeom && poMainFilter )
poIntersection = poFilterGeom->Intersection(poMainFilter);
else if( poFilterGeom )
poIntersection = poFilterGeom;
else if( poMainFilter )
poIntersection = poMainFilter;
if( poIntersection )
{
char* pszWKT = NULL;
OGREnvelope sEnvelope;
poIntersection->getEnvelope(&sEnvelope);
if( sEnvelope.MinX == sEnvelope.MaxX && sEnvelope.MinY == sEnvelope.MaxY )
{
pszWKT = CPLStrdup(CPLSPrintf("POINT(%.18g %.18g)",
sEnvelope.MinX, sEnvelope.MinY));
}
else
poIntersection->exportToWkt(&pszWKT);
osURL += "&intersects=";
char* pszWKTEscaped = CPLEscapeString(pszWKT, -1, CPLES_URL);
osURL += pszWKTEscaped;
CPLFree(pszWKTEscaped);
CPLFree(pszWKT);
}
if( poIntersection != m_poFilterGeom && poIntersection != poMainFilter )
delete poIntersection;
}
if( osFilterURLPart.size() )
{
if( osFilterURLPart[0] == '&' )
osURL += osFilterURLPart;
else
osURL = osBaseURL + osFilterURLPart;
}
return osURL;
}
示例5: CreateFeature
OGRErr OGRCSVLayer::CreateFeature( OGRFeature *poNewFeature )
{
int iField;
if( !bInWriteMode )
{
CPLError( CE_Failure, CPLE_AppDefined,
"The CreateFeature() operation is not permitted on a read-only CSV." );
return OGRERR_FAILURE;
}
/* If we need rewind, it means that we have just written a feature before */
/* so there's no point seeking to the end of the file, as we're already */
/* at the end */
int bNeedSeekEnd = !bNeedRewindBeforeRead;
bNeedRewindBeforeRead = TRUE;
/* -------------------------------------------------------------------- */
/* Write field names if we haven't written them yet. */
/* Write .csvt file if needed */
/* -------------------------------------------------------------------- */
if( bNew )
{
OGRErr eErr = WriteHeader();
if (eErr != OGRERR_NONE)
return eErr;
bNeedSeekEnd = FALSE;
}
if (fpCSV == NULL)
return OGRERR_FAILURE;
/* -------------------------------------------------------------------- */
/* Make sure we are at the end of the file. */
/* -------------------------------------------------------------------- */
if (bNeedSeekEnd)
{
if (bFirstFeatureAppendedDuringSession)
{
/* Add a newline character to the end of the file if necessary */
bFirstFeatureAppendedDuringSession = FALSE;
VSIFSeekL( fpCSV, 0, SEEK_END );
VSIFSeekL( fpCSV, VSIFTellL(fpCSV) - 1, SEEK_SET);
char chLast;
VSIFReadL( &chLast, 1, 1, fpCSV );
VSIFSeekL( fpCSV, 0, SEEK_END );
if (chLast != '\n')
{
if( bUseCRLF )
VSIFPutcL( 13, fpCSV );
VSIFPutcL( '\n', fpCSV );
}
}
else
{
VSIFSeekL( fpCSV, 0, SEEK_END );
}
}
/* -------------------------------------------------------------------- */
/* Write out the geometry */
/* -------------------------------------------------------------------- */
if (eGeometryFormat == OGR_CSV_GEOM_AS_WKT)
{
OGRGeometry *poGeom = poNewFeature->GetGeometryRef();
char* pszWKT = NULL;
if (poGeom && poGeom->exportToWkt(&pszWKT) == OGRERR_NONE)
{
VSIFPrintfL( fpCSV, "\"%s\"", pszWKT);
}
else
{
VSIFPrintfL( fpCSV, "\"\"");
}
CPLFree(pszWKT);
if (poFeatureDefn->GetFieldCount() > 0)
VSIFPrintfL( fpCSV, "%c", chDelimiter);
}
else if (eGeometryFormat == OGR_CSV_GEOM_AS_XYZ ||
eGeometryFormat == OGR_CSV_GEOM_AS_XY ||
eGeometryFormat == OGR_CSV_GEOM_AS_YX)
{
OGRGeometry *poGeom = poNewFeature->GetGeometryRef();
if (poGeom && wkbFlatten(poGeom->getGeometryType()) == wkbPoint)
{
OGRPoint* poPoint = (OGRPoint*) poGeom;
char szBuffer[75];
if (eGeometryFormat == OGR_CSV_GEOM_AS_XYZ )
OGRMakeWktCoordinate(szBuffer, poPoint->getX(), poPoint->getY(), poPoint->getZ(), 3);
else if (eGeometryFormat == OGR_CSV_GEOM_AS_XY )
OGRMakeWktCoordinate(szBuffer, poPoint->getX(), poPoint->getY(), 0, 2);
else
OGRMakeWktCoordinate(szBuffer, poPoint->getY(), poPoint->getX(), 0, 2);
char* pc = szBuffer;
while(*pc != '\0')
{
if (*pc == ' ')
*pc = chDelimiter;
//.........这里部分代码省略.........
示例6: CreateFeatureViaInsert
OGRErr OGRPGDumpLayer::CreateFeatureViaInsert( OGRFeature *poFeature )
{
CPLString osCommand;
int i = 0;
int bNeedComma = FALSE;
OGRErr eErr = OGRERR_FAILURE;
int bEmptyInsert = FALSE;
if( NULL == poFeature )
{
CPLError( CE_Failure, CPLE_AppDefined,
"NULL pointer to OGRFeature passed to CreateFeatureViaInsert()." );
return eErr;
}
/* -------------------------------------------------------------------- */
/* Form the INSERT command. */
/* -------------------------------------------------------------------- */
osCommand.Printf( "INSERT INTO %s (", pszSqlTableName );
for(i = 0; i < poFeatureDefn->GetGeomFieldCount(); i++ )
{
OGRGeometry *poGeom = poFeature->GetGeomFieldRef(i);
if( poGeom != NULL )
{
if( bNeedComma )
osCommand += ", ";
OGRGeomFieldDefn* poGFldDefn = poFeature->GetGeomFieldDefnRef(i);
osCommand = osCommand + OGRPGDumpEscapeColumnName(poGFldDefn->GetNameRef()) + " ";
bNeedComma = TRUE;
}
}
if( poFeature->GetFID() != OGRNullFID && pszFIDColumn != NULL )
{
if( bNeedComma )
osCommand += ", ";
osCommand = osCommand + OGRPGDumpEscapeColumnName(pszFIDColumn) + " ";
bNeedComma = TRUE;
}
for( i = 0; i < poFeatureDefn->GetFieldCount(); i++ )
{
if( !poFeature->IsFieldSet( i ) )
continue;
if( !bNeedComma )
bNeedComma = TRUE;
else
osCommand += ", ";
osCommand = osCommand
+ OGRPGDumpEscapeColumnName(poFeatureDefn->GetFieldDefn(i)->GetNameRef());
}
if (!bNeedComma)
bEmptyInsert = TRUE;
osCommand += ") VALUES (";
/* Set the geometry */
bNeedComma = FALSE;
for(i = 0; i < poFeatureDefn->GetGeomFieldCount(); i++ )
{
OGRGeometry *poGeom = poFeature->GetGeomFieldRef(i);
if( poGeom != NULL )
{
char *pszWKT = NULL;
OGRPGDumpGeomFieldDefn* poGFldDefn =
(OGRPGDumpGeomFieldDefn*) poFeature->GetGeomFieldDefnRef(i);
poGeom->closeRings();
poGeom->setCoordinateDimension( poGFldDefn->nCoordDimension );
if( bNeedComma )
osCommand += ", ";
if( bWriteAsHex )
{
char* pszHex = OGRGeometryToHexEWKB( poGeom, poGFldDefn->nSRSId );
osCommand += "'";
if (pszHex)
osCommand += pszHex;
osCommand += "'";
CPLFree(pszHex);
}
else
{
poGeom->exportToWkt( &pszWKT );
if( pszWKT != NULL )
{
osCommand +=
CPLString().Printf(
"GeomFromEWKT('SRID=%d;%s'::TEXT) ", poGFldDefn->nSRSId, pszWKT );
OGRFree( pszWKT );
//.........这里部分代码省略.........
示例7: CreateFeature
//.........这里部分代码省略.........
/* -------------------------------------------------------------------- */
/* Prepare the statement. */
/* -------------------------------------------------------------------- */
int rc;
sqlite3_stmt *hInsertStmt;
#ifdef DEBUG
CPLDebug( "OGR_SQLITE", "prepare(%s)", osCommand.c_str() );
#endif
rc = sqlite3_prepare( hDB, osCommand, -1, &hInsertStmt, NULL );
if( rc != SQLITE_OK )
{
CPLError( CE_Failure, CPLE_AppDefined,
"In CreateFeature(): sqlite3_prepare(%s):\n %s",
osCommand.c_str(), sqlite3_errmsg(hDB) );
return OGRERR_FAILURE;
}
/* -------------------------------------------------------------------- */
/* Bind the geometry */
/* -------------------------------------------------------------------- */
int nBindField = 1;
if( osGeomColumn.size() != 0 &&
poGeom != NULL &&
eGeomFormat != OSGF_FGF )
{
if ( eGeomFormat == OSGF_WKT )
{
char *pszWKT = NULL;
poGeom->exportToWkt( &pszWKT );
rc = sqlite3_bind_text( hInsertStmt, nBindField++, pszWKT, -1, CPLFree );
}
else if( eGeomFormat == OSGF_WKB )
{
int nWKBLen = poGeom->WkbSize();
GByte *pabyWKB = (GByte *) CPLMalloc(nWKBLen + 1);
poGeom->exportToWkb( wkbNDR, pabyWKB );
rc = sqlite3_bind_blob( hInsertStmt, nBindField++, pabyWKB, nWKBLen, CPLFree );
}
else if ( eGeomFormat == OSGF_SpatiaLite )
{
int nBLOBLen;
GByte *pabySLBLOB;
ExportSpatiaLiteGeometry( poGeom, nSRSId, wkbNDR, bHasM,
bSpatialite2D, &pabySLBLOB, &nBLOBLen );
rc = sqlite3_bind_blob( hInsertStmt, nBindField++, pabySLBLOB,
nBLOBLen, CPLFree );
}
else
{
CPLAssert(0);
}
if( rc != SQLITE_OK )
{
CPLError( CE_Failure, CPLE_AppDefined,
"sqlite3_bind_blob/text() failed:\n %s",
sqlite3_errmsg(hDB) );
sqlite3_finalize( hInsertStmt );
示例8: 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.
//.........这里部分代码省略.........
示例9: insertLayer
bool QgsShapeFile::insertLayer(QString dbname, QString schema, QString geom_col, QString srid, PGconn * conn, QProgressDialog * pro, bool &fin){
connect(pro, SIGNAL(cancelled()), this, SLOT(cancelImport()));
import_cancelled = false;
bool result = true;
QString query = "CREATE TABLE "+schema+"."+table_name+"(gid int4 PRIMARY KEY, ";
for(int n=0; n<column_names.size() && result; n++){
if(!column_names[n][0].isLetter())
result = false;
char * esc_str = new char[column_names[n].length()*2+1];
PQescapeString(esc_str, (const char *)column_names[n].lower(), column_names[n].length());
query += esc_str;
query += " ";
query += column_types[n];
if(n<column_names.size()-1)
query += ", ";
delete[] esc_str;
}
query += " )";
PGresult *res = PQexec(conn, (const char *)query);
qWarning(query);
if(PQresultStatus(res)!=PGRES_COMMAND_OK){
// flag error and send query and error message to stdout on debug
result = false;
qWarning(PQresultErrorMessage(res));
}
else {
PQclear(res);
}
query = "SELECT AddGeometryColumn(\'" + dbname + "\', \'" + table_name + "\', \'"+geom_col+"\', " + srid +
", \'" + geom_type + "\', 2)";
if(result) res = PQexec(conn, (const char *)query);
if(PQresultStatus(res)!=PGRES_TUPLES_OK){
result = false;
}
else{
qWarning(query);
qWarning(PQresultErrorMessage(res));
PQclear(res);
}
//adding the data into the table
for(int m=0;m<features && result; m++){
if(import_cancelled){
fin = true;
break;
}
OGRFeature *feat = ogrLayer->GetNextFeature();
if(feat){
OGRGeometry *geom = feat->GetGeometryRef();
if(geom){
query = "INSERT INTO "+schema+"."+table_name+QString(" VALUES( %1, ").arg(m);
int num = geom->WkbSize();
char * geo_temp = new char[num*3];
geom->exportToWkt(&geo_temp);
QString geometry(geo_temp);
QString quotes;
for(int n=0; n<column_types.size(); n++){
if(column_types[n] == "int" || column_types[n] == "float")
quotes = " ";
else
quotes = "\'";
query += quotes;
// escape the string value
QString val = feat->GetFieldAsString(n);
char * esc_str = new char[val.length()*2+1];
PQescapeString(esc_str, (const char *)val.lower(), val.length());
// add escaped value to the query
query += esc_str;
query += QString(quotes + ", ");
delete[] esc_str;
}
query += QString("GeometryFromText(\'")+geometry+QString("\', ")+srid+QString("))");
if(result)
res = PQexec(conn, (const char *)query);
if(PQresultStatus(res)!=PGRES_COMMAND_OK){
// flag error and send query and error message to stdout on debug
result = false;
qWarning(PQresultErrorMessage(res));
}
else {
PQclear(res);
}
pro->setProgress(pro->progress()+1);
qApp->processEvents();
delete[] geo_temp;
}
delete feat;
}
}
//.........这里部分代码省略.........
示例10: ICreateFeature
OGRErr OGRIDBTableLayer::ICreateFeature( OGRFeature *poFeature )
{
OGRErr eErr(OGRERR_FAILURE);
if ( ! bUpdateAccess )
{
CPLError( CE_Failure, CPLE_AppDefined,
"Error create feature. Layer is read only." );
return eErr;
}
if( NULL == poFeature )
{
CPLError( CE_Failure, CPLE_AppDefined,
"NULL pointer to OGRFeature passed to CreateFeature()." );
return eErr;
}
if( poFeature->GetFID() != OGRNullFID && pszFIDColumn == NULL )
{
CPLError( CE_Failure, CPLE_AppDefined,
"FID ignored on feature given to CreateFeature(). Unknown FID column." );
return eErr;
}
int bUpdateGeom = TRUE;
CPLString osGeomFunc;
if ( poFeature->GetGeometryRef() )
{
OGRwkbGeometryType nGeomType = poFeature->GetGeometryRef()->getGeometryType();
switch (nGeomType)
{
case wkbPoint:
osGeomFunc = "ST_PointFromText";
break;
case wkbLineString:
osGeomFunc = "ST_LineFromText";
break;
case wkbPolygon:
osGeomFunc = "ST_PolyFromText";
break;
case wkbMultiPoint:
osGeomFunc = "ST_MPointFromText";
break;
case wkbMultiLineString:
osGeomFunc = "ST_MLineFromText";
break;
case wkbMultiPolygon:
osGeomFunc = "ST_MPolyFromText";
break;
default:
bUpdateGeom = FALSE;
CPLDebug("OGR_IDB", "SetFeature(): Unknown geometry type. Geometry will not be updated.");
}
}
else
bUpdateGeom = FALSE;
// Create query
CPLString osSql;
CPLString osFields;
CPLString osValues;
if ( pszGeomColumn && bUpdateGeom )
{
OGRGeometry * poGeom = poFeature->GetGeometryRef();
char * wkt;
poGeom->exportToWkt( &wkt );
osFields += pszGeomColumn;
osValues.Printf( "%s( '%s', %d )", osGeomFunc.c_str(), wkt, nSRSId );
CPLFree( wkt );
}
for( int i = 0; i < poFeatureDefn->GetFieldCount(); i++ )
{
const char * pszFieldName = poFeatureDefn->GetFieldDefn(i)->GetNameRef();
// Skip NULL fields
if ( ! poFeature->IsFieldSet( i ) )
{
continue;
}
if ( ! osFields.empty() )
{
osFields += ",";
osValues += ",";
}
osFields += pszFieldName;
CPLString osVal;
switch ( poFeatureDefn->GetFieldDefn( i )->GetType() )
{
case OFTInteger:
//.........这里部分代码省略.........
示例11: ISetFeature
OGRErr OGRIDBTableLayer::ISetFeature( OGRFeature *poFeature )
{
OGRErr eErr(OGRERR_FAILURE);
if ( ! bUpdateAccess )
{
CPLError( CE_Failure, CPLE_AppDefined,
"Error update feature. Layer is read only." );
return eErr;
}
if( NULL == poFeature )
{
CPLError( CE_Failure, CPLE_AppDefined,
"NULL pointer to OGRFeature passed to SetFeature()." );
return eErr;
}
if( poFeature->GetFID() == OGRNullFID )
{
CPLError( CE_Failure, CPLE_AppDefined,
"FID required on features given to SetFeature()." );
return eErr;
}
ITStatement oQuery( *poDS->GetConnection() );
int bUpdateGeom = TRUE;
CPLString osGeomFunc;
if ( poFeature->GetGeometryRef() )
{
OGRwkbGeometryType nGeomType = poFeature->GetGeometryRef()->getGeometryType();
switch (nGeomType)
{
case wkbPoint:
osGeomFunc = "ST_PointFromText";
break;
case wkbLineString:
osGeomFunc = "ST_LineFromText";
break;
case wkbPolygon:
osGeomFunc = "ST_PolyFromText";
break;
case wkbMultiPoint:
osGeomFunc = "ST_MPointFromText";
break;
case wkbMultiLineString:
osGeomFunc = "ST_MLineFromText";
break;
case wkbMultiPolygon:
osGeomFunc = "ST_MPolyFromText";
break;
default:
bUpdateGeom = FALSE;
CPLDebug("OGR_IDB", "SetFeature(): Unknown geometry type. Geometry will not be updated.");
}
}
else
bUpdateGeom = FALSE;
// Create query
CPLString osSql;
CPLString osFields;
if ( pszGeomColumn && bUpdateGeom )
{
OGRGeometry * poGeom = poFeature->GetGeometryRef();
char * wkt;
poGeom->exportToWkt( &wkt );
osFields.Printf( "%s = %s( '%s', %d )", pszGeomColumn, osGeomFunc.c_str(), wkt, nSRSId );
CPLFree( wkt );
}
for( int i = 0; i < poFeatureDefn->GetFieldCount(); i++ )
{
const char * pszFieldName = poFeatureDefn->GetFieldDefn(i)->GetNameRef();
// skip fid column from update
if ( EQUAL( pszFIDColumn, pszFieldName ) )
continue;
if ( ! osFields.empty() )
{
osFields += ",";
}
osFields += pszFieldName;
osFields += "=";
if ( ! poFeature->IsFieldSet( i ) )
{
osFields += "NULL";
continue;
}
//.........这里部分代码省略.........
示例12: CreateFeature
//.........这里部分代码省略.........
/* Make sure we are at the end of the file. */
/* -------------------------------------------------------------------- */
if (bNeedSeekEnd)
{
if (bFirstFeatureAppendedDuringSession)
{
/* Add a newline character to the end of the file if necessary */
bFirstFeatureAppendedDuringSession = FALSE;
VSIFSeekL( fpCSV, 0, SEEK_END );
VSIFSeekL( fpCSV, VSIFTellL(fpCSV) - 1, SEEK_SET);
char chLast;
VSIFReadL( &chLast, 1, 1, fpCSV );
VSIFSeekL( fpCSV, 0, SEEK_END );
if (chLast != '\n')
{
if( bUseCRLF )
VSIFPutcL( 13, fpCSV );
VSIFPutcL( '\n', fpCSV );
}
}
else
{
VSIFSeekL( fpCSV, 0, SEEK_END );
}
}
/* -------------------------------------------------------------------- */
/* Write out the geometry */
/* -------------------------------------------------------------------- */
if (eGeometryFormat == OGR_CSV_GEOM_AS_WKT)
{
OGRGeometry *poGeom = poNewFeature->GetGeometryRef();
char* pszWKT = NULL;
if (poGeom && poGeom->exportToWkt(&pszWKT) == OGRERR_NONE)
{
VSIFPrintfL( fpCSV, "\"%s\"", pszWKT);
}
else
{
VSIFPrintfL( fpCSV, "\"\"");
}
CPLFree(pszWKT);
if (poFeatureDefn->GetFieldCount() > 0)
VSIFPrintfL( fpCSV, "%c", chDelimiter);
}
else if (eGeometryFormat == OGR_CSV_GEOM_AS_XYZ ||
eGeometryFormat == OGR_CSV_GEOM_AS_XY ||
eGeometryFormat == OGR_CSV_GEOM_AS_YX)
{
OGRGeometry *poGeom = poNewFeature->GetGeometryRef();
if (poGeom && wkbFlatten(poGeom->getGeometryType()) == wkbPoint)
{
OGRPoint* poPoint = (OGRPoint*) poGeom;
char szBuffer[75];
if (eGeometryFormat == OGR_CSV_GEOM_AS_XYZ )
OGRMakeWktCoordinate(szBuffer, poPoint->getX(), poPoint->getY(), poPoint->getZ(), 3);
else if (eGeometryFormat == OGR_CSV_GEOM_AS_XY )
OGRMakeWktCoordinate(szBuffer, poPoint->getX(), poPoint->getY(), 0, 2);
else
OGRMakeWktCoordinate(szBuffer, poPoint->getY(), poPoint->getX(), 0, 2);
char* pc = szBuffer;
while(*pc != '\0')
{
if (*pc == ' ')
*pc = chDelimiter;
pc ++;
示例13: 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 )
//.........这里部分代码省略.........