本文整理汇总了C++中OGRFeatureDefn::Reference方法的典型用法代码示例。如果您正苦于以下问题:C++ OGRFeatureDefn::Reference方法的具体用法?C++ OGRFeatureDefn::Reference怎么用?C++ OGRFeatureDefn::Reference使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类OGRFeatureDefn
的用法示例。
在下文中一共展示了OGRFeatureDefn::Reference方法的14个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: if
OGRFeatureDefn *OGRLayerWithTransaction::GetLayerDefn()
{
if( !m_poDecoratedLayer )
{
if( m_poFeatureDefn == NULL )
{
m_poFeatureDefn = new OGRFeatureDefn(GetDescription());
m_poFeatureDefn->Reference();
}
return m_poFeatureDefn;
}
else if( m_poFeatureDefn == NULL )
{
OGRFeatureDefn* poSrcFeatureDefn = m_poDecoratedLayer->GetLayerDefn();
m_poFeatureDefn = poSrcFeatureDefn->Clone();
m_poFeatureDefn->Reference();
}
return m_poFeatureDefn;
}
示例2: CPLError
OGRLayer *OGRSOSIDataSource::ICreateLayer( const char *pszNameIn,
OGRSpatialReference *poSpatialRef,
OGRwkbGeometryType eGType,
CPL_UNUSED char **papszOptions ) {
/* SOSI does not really support layers - so let's first see that the global settings are consistent */
if (poSRS == NULL) {
if (poSpatialRef!=NULL) {
poSRS = poSpatialRef;
poSRS->Reference();
const char *pszKoosys = poSRS->GetAuthorityCode("PROJCS");
if (pszKoosys == NULL) {
OGRErr err = poSRS->AutoIdentifyEPSG();
if (err == OGRERR_UNSUPPORTED_SRS) {
CPLError( CE_Failure, CPLE_OpenFailed,
"Could not identify EPSG code for spatial reference system");
return NULL;
}
pszKoosys = poSRS->GetAuthorityCode("PROJCS");
}
if (pszKoosys != NULL) {
int nKoosys = epsg2sosi(atoi(pszKoosys));
CPLDebug( "[CreateLayer]","Projection set to SOSI %i", nKoosys);
LC_PutTrans(nKoosys,0,0,0.01,0.01,0.01);
} else {
pszKoosys = poSRS->GetAuthorityCode("GEOGCS");
if (pszKoosys != NULL) {
int nKoosys = epsg2sosi(atoi(pszKoosys));
LC_PutTrans(nKoosys,0,0,0.01,0.01,0.01);
} else {
CPLError( CE_Failure, CPLE_OpenFailed,
"Could not retrieve EPSG code for spatial reference system");
return NULL;
}
}
}
LC_WsGr(poFileadm); /* Writing the header here! */
} else {
if (!poSRS->IsSame(poSpatialRef)) {
CPLError( CE_Failure, CPLE_AppDefined,
"SOSI driver does not support different spatial reference systems in one file.");
}
}
OGRFeatureDefn *poFeatureDefn = new OGRFeatureDefn( pszNameIn );
poFeatureDefn->Reference();
poFeatureDefn->SetGeomType( eGType );
OGRSOSILayer *poLayer = new OGRSOSILayer( this, poFeatureDefn, poFileadm, NULL /*poHeaderDefn*/);
/* todo: where do we delete poLayer and poFeatureDefn? */
return poLayer;
}
示例3:
JNIEXPORT jint JNICALL Java_es_gva_cit_jogr_JNIBase_referenceFeatureDefnNat
(JNIEnv *env, jobject obj, jlong cPtr){
OGRFeatureDefn *fd = (OGRFeatureDefn *) 0 ;
int res=-1;
fd = *(OGRFeatureDefn **)&cPtr;
if(fd!=NULL){
res = fd->Reference();
}
return res;
}
示例4: if
OGRFeatureDefn *S57GenerateGeomFeatureDefn( OGRwkbGeometryType eGType,
int nOptionFlags )
{
OGRFeatureDefn *poFDefn = NULL;
if( eGType == wkbPoint )
{
poFDefn = new OGRFeatureDefn( "Point" );
poFDefn->SetGeomType( eGType );
}
else if( eGType == wkbLineString )
{
poFDefn = new OGRFeatureDefn( "Line" );
poFDefn->SetGeomType( eGType );
}
else if( eGType == wkbPolygon )
{
poFDefn = new OGRFeatureDefn( "Area" );
poFDefn->SetGeomType( eGType );
}
else if( eGType == wkbNone )
{
poFDefn = new OGRFeatureDefn( "Meta" );
poFDefn->SetGeomType( eGType );
}
else if( eGType == wkbUnknown )
{
poFDefn = new OGRFeatureDefn( "Generic" );
poFDefn->SetGeomType( eGType );
}
else
return NULL;
poFDefn->Reference();
S57GenerateStandardAttributes( poFDefn, nOptionFlags );
return poFDefn;
}
示例5: oHolderNames
//.........这里部分代码省略.........
return NULL;
}
json_object* poValue = CPL_json_object_object_get(poRow, "value");
if (!(poValue != NULL && json_object_is_type(poValue, json_type_object)))
{
json_object_put(poAnswerObj);
return NULL;
}
json_object* poSum = CPL_json_object_object_get(poValue, "sum");
json_object* poCount = CPL_json_object_object_get(poValue, "count");
json_object* poMin = CPL_json_object_object_get(poValue, "min");
json_object* poMax = CPL_json_object_object_get(poValue, "max");
if (poSum != NULL && (json_object_is_type(poSum, json_type_int) ||
json_object_is_type(poSum, json_type_double)) &&
poCount != NULL && (json_object_is_type(poCount, json_type_int) ||
json_object_is_type(poCount, json_type_double)) &&
poMin != NULL && (json_object_is_type(poMin, json_type_int) ||
json_object_is_type(poMin, json_type_double)) &&
poMax != NULL && (json_object_is_type(poMax, json_type_int) ||
json_object_is_type(poMax, json_type_double)) )
{
double dfSum = json_object_get_double(poSum);
int nCount = json_object_get_int(poCount);
double dfMin = json_object_get_double(poMin);
double dfMax = json_object_get_double(poMax);
json_object_put(poAnswerObj);
//CPLDebug("CouchDB", "sum=%f, count=%d, min=%f, max=%f",
// dfSum, nCount, dfMin, dfMax);
OGRFeatureDefn* poFeatureDefn = new OGRFeatureDefn(poSrcLayer->GetName());
poFeatureDefn->Reference();
for( int iField = 0; iField < sSelectInfo.result_columns; iField++ )
{
swq_col_def *psColDef = sSelectInfo.column_defs + iField;
OGRFieldDefn oFDefn( "", OFTInteger );
if( psColDef->field_alias != NULL )
{
oFDefn.SetName(psColDef->field_alias);
}
else
{
const swq_operation *op = swq_op_registrar::GetOperator(
(swq_op) psColDef->col_func );
oFDefn.SetName( CPLSPrintf( "%s_%s",
op->pszName,
psColDef->field_name ) );
}
if( psColDef->col_func == SWQCF_COUNT )
oFDefn.SetType( OFTInteger );
else if (psColDef->field_type == SWQ_INTEGER)
oFDefn.SetType( OFTInteger );
else if (psColDef->field_type == SWQ_FLOAT)
oFDefn.SetType( OFTReal );
poFeatureDefn->AddFieldDefn(&oFDefn);
}
OGRFeature* poFeature = new OGRFeature(poFeatureDefn);
for( int iField = 0; iField < sSelectInfo.result_columns; iField++ )
示例6: oStatement
OGRFeatureDefn *OGRIngresTableLayer::ReadTableDefinition( const char *pszTable )
{
poDS->EstablishActiveLayer( NULL );
/* -------------------------------------------------------------------- */
/* Fire off commands to get back the schema of the table. */
/* -------------------------------------------------------------------- */
CPLString osCommand;
OGRIngresStatement oStatement( poDS->GetConn() );
osCommand.Printf( "select column_name, column_datatype, column_length, "
"column_scale, column_ingdatatype, "
"column_internal_datatype "
"from iicolumns where table_name = '%s'",
pszTable );
if( !oStatement.ExecuteSQL( osCommand ) )
{
return NULL;
}
/* -------------------------------------------------------------------- */
/* Parse the returned table information. */
/* -------------------------------------------------------------------- */
OGRFeatureDefn *poDefn = new OGRFeatureDefn( pszTable );
char **papszRow;
poDefn->Reference();
poDefn->SetGeomType( wkbNone );
while( (papszRow = oStatement.GetRow()) != NULL )
{
CPLString osFieldName = papszRow[0];
CPLString osIngresType = papszRow[1];
CPLString osInternalType = papszRow[5];
GInt32 nWidth, nScale;
osIngresType.Trim();
osFieldName.Trim();
osInternalType.Trim();
memcpy( &nWidth, papszRow[2], 4 );
memcpy( &nScale, papszRow[3], 4 );
OGRFieldDefn oField(osFieldName, OFTString);
if( osGeomColumn.size() == 0
&& (EQUAL(osInternalType,"POINT")
|| EQUAL(osInternalType,"IPOINT")
|| EQUAL(osInternalType,"BOX")
|| EQUAL(osInternalType,"IBOX")
|| EQUAL(osInternalType,"LSEG")
|| EQUAL(osInternalType,"ILSEG")
|| EQUAL(osInternalType,"LINE")
|| EQUAL(osInternalType,"ILINE")
|| EQUAL(osInternalType,"LONG LINE")
|| EQUAL(osInternalType,"POLYGON")
|| EQUAL(osInternalType,"IPOLYGON")
|| EQUAL(osInternalType,"LONG POLYGON")
|| EQUAL(osInternalType,"CIRCLE")
|| EQUAL(osInternalType,"LINESTRING")
|| EQUAL(osInternalType,"MULTIPOINT")
|| EQUAL(osInternalType,"MULTIPOLYGON")
|| EQUAL(osInternalType,"MULTILINESTRING")
|| EQUAL(osInternalType,"GEOMETRYCOLLECTION")
|| EQUAL(osInternalType,"ICIRCLE")) )
{
osGeomColumn = osFieldName;
osIngresGeomType = osInternalType;
if( strstr(osInternalType,"POINT") )
poDefn->SetGeomType( wkbPoint );
else if( strstr(osInternalType,"LINE")
|| strstr(osInternalType,"SEG")
|| strstr(osInternalType, "LINESTRING"))
poDefn->SetGeomType( wkbLineString );
else if( strstr(osInternalType,"MULTIPOINT"))
poDefn->SetGeomType(wkbMultiPoint);
else if( strstr(osInternalType,"MULTIPOLYGON"))
poDefn->SetGeomType(wkbMultiPolygon);
else if( strstr(osInternalType,"MULTILINESTRING"))
poDefn->SetGeomType(wkbMultiLineString);
// Oddly this is the standin for a generic geometry type.
else if( strstr(osInternalType,"GEOMETRYCOLLECTION"))
poDefn->SetGeomType(wkbUnknown);
else
poDefn->SetGeomType( wkbPolygon );
continue;
}
else if( EQUALN(osIngresType,"byte",4)
|| EQUALN(osIngresType,"long byte",9) )
{
oField.SetType( OFTBinary );
}
else if( EQUALN(osIngresType,"varchar",7)
|| EQUAL(osIngresType,"text")
|| EQUALN(osIngresType,"long varchar",12) )
{
oField.SetType( OFTString );
//.........这里部分代码省略.........
示例7: Open
//.........这里部分代码省略.........
bPolyLayer = TRUE;
/* cannot build geometries that reference others yet */
break;
}
case L_KURVE:
case L_LINJE: {
/* Pre-build a line feature. Activate line/curve layer. */
bCurveLayer = TRUE;
buildOGRLineString(static_cast<int>(nNumCoo), oNextSerial.lNr);
break;
}
case L_BUEP: {
/* Pre-build a line feature as interpolation from an arc. Activate line/curve layer. */
bCurveLayer = TRUE;
buildOGRLineStringFromArc(oNextSerial.lNr);
break;
}
case L_TEKST: {
/* Pre-build a text line contour feature. Activate text layer. */
/* Todo: observe only points 2ff if more than one point is given for follow mode */
bTextLayer = TRUE;
buildOGRMultiPoint(static_cast<int>(nNumCoo), oNextSerial.lNr);
break;
}
case L_HODE: {
/* Get SRS from SOSI header. */
unsigned short nMask = LC_TR_ALLT;
LC_TRANSPAR oTrans;
if (LC_GetTransEx(&nMask,&oTrans) == UT_FALSE) {
CPLError( CE_Failure, CPLE_OpenFailed,
"TRANSPAR section not found - No reference system information available.");
return FALSE;
}
poSRS = new OGRSpatialReference();
/* Get coordinate system from SOSI header. */
int nEPSG = sosi2epsg(oTrans.sKoordsys);
if (poSRS->importFromEPSG(nEPSG) != OGRERR_NONE) {
CPLError( CE_Failure, CPLE_OpenFailed,
"OGR could not load coordinate system definition EPSG:%i.", nEPSG);
return FALSE;
}
/* Get character encoding from SOSI header. */
iHeaders = oHeaders.find("TEGNSETT");
if (iHeaders != oHeaders.end()) {
CPLString osLine = iHeaders->second;
if (osLine.compare("ISO8859-1")==0) {
pszEncoding = CPL_ENC_ISO8859_1;
} else if (osLine.compare("ISO8859-10")==0) {
pszEncoding = CPL_ENC_ISO8859_10;
} else if (osLine.compare("UTF-8")==0) {
pszEncoding = CPL_ENC_UTF8;
}
}
break;
}
default: {
break;
}
}
}
/* -------------------------------------------------------------------- *
* Create a corresponding layers. One per geometry type *
示例8: OGRFeatureDefn
OGRFeatureDefn *S57GenerateDSIDFeatureDefn()
{
OGRFeatureDefn *poFDefn = new OGRFeatureDefn( "DSID" );
OGRFieldDefn oField( "", OFTInteger );
poFDefn->SetGeomType( wkbNone );
poFDefn->Reference();
/* -------------------------------------------------------------------- */
/* DSID fields. */
/* -------------------------------------------------------------------- */
oField.Set( "DSID_EXPP", OFTInteger, 3, 0 );
poFDefn->AddFieldDefn( &oField );
oField.Set( "DSID_INTU", OFTInteger, 3, 0 );
poFDefn->AddFieldDefn( &oField );
oField.Set( "DSID_DSNM", OFTString, 0, 0 );
poFDefn->AddFieldDefn( &oField );
oField.Set( "DSID_EDTN", OFTString, 0, 0 );
poFDefn->AddFieldDefn( &oField );
oField.Set( "DSID_UPDN", OFTString, 0, 0 );
poFDefn->AddFieldDefn( &oField );
oField.Set( "DSID_UADT", OFTString, 8, 0 );
poFDefn->AddFieldDefn( &oField );
oField.Set( "DSID_ISDT", OFTString, 8, 0 );
poFDefn->AddFieldDefn( &oField );
oField.Set( "DSID_STED", OFTReal, 11, 6 );
poFDefn->AddFieldDefn( &oField );
oField.Set( "DSID_PRSP", OFTInteger, 3, 0 );
poFDefn->AddFieldDefn( &oField );
oField.Set( "DSID_PSDN", OFTString, 0, 0 );
poFDefn->AddFieldDefn( &oField );
oField.Set( "DSID_PRED", OFTString, 0, 0 );
poFDefn->AddFieldDefn( &oField );
oField.Set( "DSID_PROF", OFTInteger, 3, 0 );
poFDefn->AddFieldDefn( &oField );
oField.Set( "DSID_AGEN", OFTInteger, 5, 0 );
poFDefn->AddFieldDefn( &oField );
oField.Set( "DSID_COMT", OFTString, 0, 0 );
poFDefn->AddFieldDefn( &oField );
/* -------------------------------------------------------------------- */
/* DSSI fields. */
/* -------------------------------------------------------------------- */
oField.Set( "DSSI_DSTR", OFTInteger, 3, 0 );
poFDefn->AddFieldDefn( &oField );
oField.Set( "DSSI_AALL", OFTInteger, 3, 0 );
poFDefn->AddFieldDefn( &oField );
oField.Set( "DSSI_NALL", OFTInteger, 3, 0 );
poFDefn->AddFieldDefn( &oField );
oField.Set( "DSSI_NOMR", OFTInteger, 10, 0 );
poFDefn->AddFieldDefn( &oField );
oField.Set( "DSSI_NOCR", OFTInteger, 10, 0 );
poFDefn->AddFieldDefn( &oField );
oField.Set( "DSSI_NOGR", OFTInteger, 10, 0 );
poFDefn->AddFieldDefn( &oField );
oField.Set( "DSSI_NOLR", OFTInteger, 10, 0 );
poFDefn->AddFieldDefn( &oField );
oField.Set( "DSSI_NOIN", OFTInteger, 10, 0 );
poFDefn->AddFieldDefn( &oField );
oField.Set( "DSSI_NOCN", OFTInteger, 10, 0 );
poFDefn->AddFieldDefn( &oField );
oField.Set( "DSSI_NOED", OFTInteger, 10, 0 );
poFDefn->AddFieldDefn( &oField );
oField.Set( "DSSI_NOFA", OFTInteger, 10, 0 );
poFDefn->AddFieldDefn( &oField );
/* -------------------------------------------------------------------- */
/* DSPM fields. */
/* -------------------------------------------------------------------- */
oField.Set( "DSPM_HDAT", OFTInteger, 3, 0 );
poFDefn->AddFieldDefn( &oField );
oField.Set( "DSPM_VDAT", OFTInteger, 3, 0 );
poFDefn->AddFieldDefn( &oField );
//.........这里部分代码省略.........
示例9: OGRFeatureDefn
OGRFeatureDefn *OGRIngresResultLayer::ReadResultDefinition()
{
/* -------------------------------------------------------------------- */
/* Parse the returned table information. */
/* -------------------------------------------------------------------- */
OGRFeatureDefn *poDefn = new OGRFeatureDefn( "sql_statement" );
int iRawField;
poDefn->Reference();
for( iRawField = 0;
iRawField < (int) poResultSet->getDescrParm.gd_descriptorCount;
iRawField++ )
{
IIAPI_DESCRIPTOR *psFDesc =
poResultSet->getDescrParm.gd_descriptor + iRawField;
OGRFieldDefn oField( psFDesc->ds_columnName, OFTString);
switch( psFDesc->ds_dataType )
{
case IIAPI_CHR_TYPE:
case IIAPI_CHA_TYPE:
// string - fixed width.
oField.SetWidth( psFDesc->ds_length );
poDefn->AddFieldDefn( &oField );
break;
case IIAPI_LVCH_TYPE:
case IIAPI_LTXT_TYPE:
case IIAPI_VCH_TYPE:
case IIAPI_TXT_TYPE:
// default variable length string
poDefn->AddFieldDefn( &oField );
break;
case IIAPI_INT_TYPE:
oField.SetType( OFTInteger );
poDefn->AddFieldDefn( &oField );
break;
case IIAPI_FLT_TYPE:
oField.SetType( OFTReal );
poDefn->AddFieldDefn( &oField );
break;
case IIAPI_DEC_TYPE:
oField.SetWidth( psFDesc->ds_precision );
if( psFDesc->ds_scale == 0 )
oField.SetType( OFTInteger );
else
{
oField.SetType( OFTReal );
oField.SetPrecision( psFDesc->ds_scale );
}
poDefn->AddFieldDefn( &oField );
break;
default:
// any other field we ignore.
break;
}
}
poDefn->SetGeomType( wkbNone );
return poDefn;
}
示例10: if
OGRFeatureDefn *OGRPGResultLayer::ReadResultDefinition(PGresult *hInitialResultIn)
{
PGresult *hResult = hInitialResultIn;
/* -------------------------------------------------------------------- */
/* Parse the returned table information. */
/* -------------------------------------------------------------------- */
OGRFeatureDefn *poDefn = new OGRFeatureDefn( "sql_statement" );
int iRawField;
poDefn->Reference();
for( iRawField = 0; iRawField < PQnfields(hResult); iRawField++ )
{
OGRFieldDefn oField( PQfname(hResult,iRawField), OFTString);
Oid nTypeOID;
nTypeOID = PQftype(hResult,iRawField);
if( EQUAL(oField.GetNameRef(),"ogc_fid") )
{
bHasFid = TRUE;
pszFIDColumn = CPLStrdup(oField.GetNameRef());
continue;
}
else if( nTypeOID == poDS->GetGeometryOID() ||
nTypeOID == poDS->GetGeographyOID() ||
EQUAL(oField.GetNameRef(),"ST_AsText") ||
EQUAL(oField.GetNameRef(),"ST_AsBinary") ||
EQUAL(oField.GetNameRef(),"AsBinary") ||
EQUAL(oField.GetNameRef(),"asEWKT") ||
EQUAL(oField.GetNameRef(),"asText") )
{
if (bHasPostGISGeometry || bHasPostGISGeography )
{
CPLError(CE_Warning, CPLE_AppDefined,
"More than one geometry column was found in the result of the SQL request. Only last one will be used");
}
if (nTypeOID == poDS->GetGeographyOID())
bHasPostGISGeography = TRUE;
else
bHasPostGISGeometry = TRUE;
CPLFree(pszGeomColumn);
pszGeomColumn = CPLStrdup(oField.GetNameRef());
continue;
}
else if( EQUAL(oField.GetNameRef(),"WKB_GEOMETRY") )
{
bHasWkb = TRUE;
if( nTypeOID == OIDOID )
bWkbAsOid = TRUE;
continue;
}
if( nTypeOID == BYTEAOID )
{
oField.SetType( OFTBinary );
}
else if( nTypeOID == CHAROID ||
nTypeOID == TEXTOID ||
nTypeOID == BPCHAROID ||
nTypeOID == VARCHAROID )
{
oField.SetType( OFTString );
/* See http://www.mail-archive.com/[email protected]/msg57726.html */
/* nTypmod = width + 4 */
int nTypmod = PQfmod(hResult, iRawField);
if (nTypmod >= 4 && (nTypeOID == BPCHAROID ||
nTypeOID == VARCHAROID ) )
{
oField.SetWidth( nTypmod - 4);
}
}
else if( nTypeOID == BOOLOID )
{
oField.SetType( OFTInteger );
oField.SetWidth( 1 );
}
else if (nTypeOID == INT2OID )
{
oField.SetType( OFTInteger );
oField.SetWidth( 5 );
}
else if (nTypeOID == INT4OID )
{
oField.SetType( OFTInteger );
}
else if ( nTypeOID == INT8OID )
{
/* FIXME: OFTInteger can not handle 64bit integers */
oField.SetType( OFTInteger );
}
else if( nTypeOID == FLOAT4OID ||
nTypeOID == FLOAT8OID )
{
oField.SetType( OFTReal );
}
else if( nTypeOID == NUMERICOID )
//.........这里部分代码省略.........
示例11: if
OGRFeatureDefn *OGRMySQLTableLayer::ReadTableDefinition( const char *pszTable )
{
MYSQL_RES *hResult;
char szCommand[1024];
/* -------------------------------------------------------------------- */
/* Fire off commands to get back the schema of the table. */
/* -------------------------------------------------------------------- */
sprintf( szCommand, "DESCRIBE `%s`", pszTable );
pszGeomColumnTable = CPLStrdup(pszTable);
if( mysql_query( poDS->GetConn(), szCommand ) )
{
poDS->ReportError( "DESCRIBE Failed" );
return FALSE;
}
hResult = mysql_store_result( poDS->GetConn() );
if( hResult == NULL )
{
poDS->ReportError( "mysql_store_result() failed on DESCRIBE result." );
return FALSE;
}
/* -------------------------------------------------------------------- */
/* Parse the returned table information. */
/* -------------------------------------------------------------------- */
OGRFeatureDefn *poDefn = new OGRFeatureDefn( pszTable );
char **papszRow;
poDefn->Reference();
while( (papszRow = mysql_fetch_row( hResult )) != NULL )
{
const char *pszType;
OGRFieldDefn oField( papszRow[0], OFTString);
pszType = papszRow[1];
if( pszType == NULL )
continue;
if( EQUAL(pszType,"varbinary")
|| (strlen(pszType)>3 && EQUAL(pszType+strlen(pszType)-4,"blob")))
{
oField.SetType( OFTBinary );
}
else if( EQUAL(pszType,"varchar")
|| EQUAL(pszType+strlen(pszType)-4,"enum")
|| EQUAL(pszType+strlen(pszType)-4,"set") )
{
oField.SetType( OFTString );
}
else if( EQUALN(pszType,"char",4) )
{
oField.SetType( OFTString );
char ** papszTokens;
papszTokens = CSLTokenizeString2(pszType,"(),",0);
/* width is the second */
oField.SetWidth(atoi(papszTokens[1]));
CSLDestroy( papszTokens );
oField.SetType( OFTString );
}
if(strlen(pszType)>3 && EQUAL(pszType+strlen(pszType)-4,"text"))
{
oField.SetType( OFTString );
}
else if( EQUALN(pszType,"varchar",6) )
{
/*
pszType is usually in the form "varchar(15)"
so we'll split it up and get the width and precision
*/
oField.SetType( OFTString );
char ** papszTokens;
papszTokens = CSLTokenizeString2(pszType,"(),",0);
/* width is the second */
oField.SetWidth(atoi(papszTokens[1]));
CSLDestroy( papszTokens );
oField.SetType( OFTString );
}
else if( EQUALN(pszType,"int", 3) )
{
oField.SetType( OFTInteger );
}
else if( EQUALN(pszType,"tinyint", 7) )
{
oField.SetType( OFTInteger );
}
else if( EQUALN(pszType,"smallint", 8) )
//.........这里部分代码省略.........
示例12: oField
OGRFeatureDefn *
OGROCISelectLayer::ReadTableDefinition( OGROCIStatement *poCommand )
{
OGROCISession *poSession = poDS->GetSession();
/* -------------------------------------------------------------------- */
/* Parse the returned table information. */
/* -------------------------------------------------------------------- */
for( int iParm = 0; TRUE; iParm++ )
{
OGRFieldDefn oField( "", OFTString );
int nStatus;
OCIParam *hParmDesc;
ub2 nOCIType;
ub4 nOCILen;
nStatus =
OCIParamGet( poCommand->GetStatement(), OCI_HTYPE_STMT,
poSession->hError, (dvoid**)&hParmDesc,
(ub4) iParm+1 );
if( nStatus == OCI_ERROR )
break;
if( poSession->GetParmInfo( hParmDesc, &oField, &nOCIType, &nOCILen )
!= CE_None )
break;
if( oField.GetType() == OFTBinary && nOCIType == 108 )
{
CPLFree( pszGeomName );
pszGeomName = CPLStrdup( oField.GetNameRef() );
iGeomColumn = iParm;
break;
}
}
/* -------------------------------------------------------------------- */
/* Use the schema off the statement. */
/* -------------------------------------------------------------------- */
OGRFeatureDefn *poDefn;
poDefn = poCommand->GetResultDefn();
if( iGeomColumn >= 0 )
poDefn->SetGeomType(wkbUnknown);
poDefn->Reference();
/* -------------------------------------------------------------------- */
/* Do we have an FID? */
/* -------------------------------------------------------------------- */
const char *pszExpectedFIDName =
CPLGetConfigOption( "OCI_FID", "OGR_FID" );
if( poDefn->GetFieldIndex(pszExpectedFIDName) > -1 )
{
iFIDColumn = poDefn->GetFieldIndex(pszExpectedFIDName);
pszFIDName = CPLStrdup(poDefn->GetFieldDefn(iFIDColumn)->GetNameRef());
}
if( EQUAL(pszExpectedFIDName, "OGR_FID") && pszFIDName )
{
for(int i=0;i<poDefn->GetFieldCount();i++)
{
// This is presumably a Integer since we always create Integer64 with a
// defined precision
if( poDefn->GetFieldDefn(i)->GetType() == OFTInteger64 &&
poDefn->GetFieldDefn(i)->GetWidth() == 0 )
{
poDefn->GetFieldDefn(i)->SetType(OFTInteger);
}
}
}
return poDefn;
}
示例13: oField
OGRFeatureDefn *OGRMySQLResultLayer::ReadResultDefinition()
{
/* -------------------------------------------------------------------- */
/* Parse the returned table information. */
/* -------------------------------------------------------------------- */
OGRFeatureDefn *poDefn = new OGRFeatureDefn( "sql_statement" );
SetDescription( poDefn->GetName() );
poDefn->Reference();
mysql_field_seek( hResultSet, 0 );
for( int iRawField = 0;
iRawField < (int) mysql_num_fields(hResultSet);
iRawField++ )
{
MYSQL_FIELD *psMSField = mysql_fetch_field( hResultSet );
OGRFieldDefn oField( psMSField->name, OFTString);
switch( psMSField->type )
{
case FIELD_TYPE_TINY:
case FIELD_TYPE_SHORT:
case FIELD_TYPE_LONG:
case FIELD_TYPE_INT24:
case FIELD_TYPE_LONGLONG:
{
oField.SetType( OFTInteger );
const int width = (int)psMSField->length;
oField.SetWidth(width);
poDefn->AddFieldDefn( &oField );
break;
}
case FIELD_TYPE_DECIMAL:
#ifdef FIELD_TYPE_NEWDECIMAL
case FIELD_TYPE_NEWDECIMAL:
#endif
{
oField.SetType( OFTReal );
// a bunch of hackery to munge the widths that MySQL gives
// us into corresponding widths and precisions for OGR
const int precision = (int)psMSField->decimals;
int width = (int)psMSField->length;
if (!precision)
width = width - 1;
width = width - precision;
oField.SetWidth(width);
oField.SetPrecision(precision);
poDefn->AddFieldDefn( &oField );
break;
}
case FIELD_TYPE_FLOAT:
case FIELD_TYPE_DOUBLE:
/* MYSQL_FIELD is always reporting ->length = 22 and ->decimals = 31
for double type regardless of the data it returned. In an example,
the data it returned had only 5 or 6 decimal places which were
exactly as entered into the database but reported the decimals
as 31. */
/* Assuming that a length of 22 means no particular width and 31
decimals means no particular precision. */
{
const int width = (int)psMSField->length;
const int precision = (int)psMSField->decimals;
oField.SetType( OFTReal );
if( width != 22 )
oField.SetWidth(width);
if( precision != 31 )
oField.SetPrecision(precision);
poDefn->AddFieldDefn( &oField );
break;
}
case FIELD_TYPE_DATE:
{
oField.SetType( OFTDate );
oField.SetWidth(0);
poDefn->AddFieldDefn( &oField );
break;
}
case FIELD_TYPE_TIME:
{
oField.SetType( OFTTime );
oField.SetWidth(0);
poDefn->AddFieldDefn( &oField );
break;
}
case FIELD_TYPE_TIMESTAMP:
case FIELD_TYPE_DATETIME:
{
oField.SetType( OFTDateTime );
oField.SetWidth(0);
poDefn->AddFieldDefn( &oField );
break;
}
case FIELD_TYPE_YEAR:
case FIELD_TYPE_STRING:
case FIELD_TYPE_VAR_STRING:
{
oField.SetType( OFTString );
//.........这里部分代码省略.........
示例14: if
OGRFeatureDefn *OGRMySQLTableLayer::ReadTableDefinition( const char *pszTable )
{
MYSQL_RES *hResult;
CPLString osCommand;
/* -------------------------------------------------------------------- */
/* Fire off commands to get back the schema of the table. */
/* -------------------------------------------------------------------- */
osCommand.Printf("DESCRIBE `%s`", pszTable );
pszGeomColumnTable = CPLStrdup(pszTable);
if( mysql_query( poDS->GetConn(), osCommand ) )
{
poDS->ReportError( "DESCRIBE Failed" );
return NULL;
}
hResult = mysql_store_result( poDS->GetConn() );
if( hResult == NULL )
{
poDS->ReportError( "mysql_store_result() failed on DESCRIBE result." );
return NULL;
}
/* -------------------------------------------------------------------- */
/* Parse the returned table information. */
/* -------------------------------------------------------------------- */
OGRFeatureDefn *poDefn = new OGRFeatureDefn( pszTable );
char **papszRow;
OGRwkbGeometryType eForcedGeomType = wkbUnknown;
int bGeomColumnNotNullable = FALSE;
poDefn->Reference();
while( (papszRow = mysql_fetch_row( hResult )) != NULL )
{
const char *pszType;
OGRFieldDefn oField( papszRow[0], OFTString);
int nLenType;
pszType = papszRow[1];
if( pszType == NULL )
continue;
nLenType = (int)strlen(pszType);
if( EQUAL(pszType,"varbinary")
|| (nLenType>=4 && EQUAL(pszType+nLenType-4,"blob")))
{
oField.SetType( OFTBinary );
}
else if( EQUAL(pszType,"varchar")
|| (nLenType>=4 && EQUAL(pszType+nLenType-4,"enum"))
|| (nLenType>=3 && EQUAL(pszType+nLenType-3,"set")) )
{
oField.SetType( OFTString );
}
else if( STARTS_WITH_CI(pszType, "char") )
{
oField.SetType( OFTString );
char ** papszTokens;
papszTokens = CSLTokenizeString2(pszType,"(),",0);
if (CSLCount(papszTokens) >= 2)
{
/* width is the second */
oField.SetWidth(atoi(papszTokens[1]));
}
CSLDestroy( papszTokens );
oField.SetType( OFTString );
}
if(nLenType>=4 && EQUAL(pszType+nLenType-4,"text"))
{
oField.SetType( OFTString );
}
else if( STARTS_WITH_CI(pszType,"varchar") )
{
/*
pszType is usually in the form "varchar(15)"
so we'll split it up and get the width and precision
*/
oField.SetType( OFTString );
char ** papszTokens;
papszTokens = CSLTokenizeString2(pszType,"(),",0);
if (CSLCount(papszTokens) >= 2)
{
/* width is the second */
oField.SetWidth(atoi(papszTokens[1]));
}
CSLDestroy( papszTokens );
oField.SetType( OFTString );
}
//.........这里部分代码省略.........