GDAL
GDAL文檔
GDAL下載
GDAL開發(fā)依賴下載
GDAL是一個用于柵格和矢量地理空間數(shù)據(jù)格式的轉(zhuǎn)換庫,采用MIT開源許可躬络,由開源地理空間基金會發(fā)布与柑。它為調(diào)用程序提供了柵格抽象數(shù)據(jù)模型和矢量抽象數(shù)據(jù)模型并包含所有支持的格式粮揉。它還提供了一些實用的命令行程序用于數(shù)據(jù)轉(zhuǎn)換和處理凛辣。
OGR
OGR是GDAL項目的一個分支,功能與GDAL類似驾窟,只不過它提供對矢量數(shù)據(jù)的讀寫支持舆床,包括ESRI Shapefiles,PostGIS等雅倒。
矢量數(shù)據(jù)模型(Vector Data Model)
OGR為矢量數(shù)據(jù)提供了矢量數(shù)據(jù)模型璃诀。
類概況
-
幾何圖形(ogr_geometry.h):幾何類(OGRGeometry等),封裝了OpenGIS模型矢量數(shù)據(jù)并提供一些幾何操作蔑匣,以及對WKB和WKT的轉(zhuǎn)換劣欢。幾何圖形包含了空間參考系。
geometry模型.png - 空間參考(ogr_spatialref.h):OGRSpatialRefence類裁良,封裝了投影和基準(zhǔn)的定義凿将。
- 要素(ogr_feature.h):OGRFeature類,封裝了feature的定義价脾,包括一個幾何和屬性牧抵。
- 要素類定義(ogr_feature.h):OGRFeatureDefn類,將一組相關(guān)要素(一個Layer)的概要數(shù)據(jù)進(jìn)行封裝侨把,包括了集合類型犀变、名稱、屬性域定義等秋柄。
- 圖層(ogrsf_frmts.h):OGRLayer類获枝,一個抽象基類,代表了GDALDataset中的一個要素圖層骇笔。
- 數(shù)據(jù)集(gdal_priv.h):GDALDataset類映琳,包含一個或多個OGRLayer對象的類,其通常代表一個文件或數(shù)據(jù)庫蜘拉。
- 驅(qū)動(gdal_priv.h):GDALDriver類萨西,為特定格式提供驅(qū)動,用以打開特定格式的數(shù)據(jù)得到GDALDataset旭旭,如ESRI Shapefile谎脯、PostGIS。所有的驅(qū)動都被GDALDriverManager管理持寄。
體系架構(gòu):
矢量驅(qū)動程序?qū)崿F(xiàn)
- 在程序中實現(xiàn)矢量驅(qū)動時源梭,程序版本需與gdal庫版本一致娱俺,如release版的gdal庫,編譯程序時也應(yīng)為release版废麻。
通過實現(xiàn)特定格式的驅(qū)動荠卷,來為OGR加入新的格式支持。這需要實例化GDALDriver類并實現(xiàn)GDALDataset和OGRLayer的子類烛愧。GDALDriver實例需要在運行時通過GDALDriverManager進(jìn)行注冊油宜。
1.實現(xiàn)GDALDriver
特定格式的驅(qū)動程序類是作為GDALDriver的實例實現(xiàn)的。通常會創(chuàng)建一個GDALDriver實例并通過GDALDeiverManager進(jìn)行注冊怜姿。而實例化過程由一個全局C函數(shù)進(jìn)行處理慎冤。該函數(shù)由自己實現(xiàn)并在內(nèi)部實例化一個GDALDriver對象。
void registerOGRSPF()
{
if( GDALGetDriverByName("SPF") != NULL )
return;
GDALDriver *poDriver = new GDALDriver();
poDriver->SetDescription("SPF");
poDriver->SetMetadataItem(GDAL_DCAP_VECTOR, "YES");
poDriver->SetMetadataItem(GDAL_DMD_LONGNAME, "Long name for SPF driver");
poDriver->SetMetadataItem(GDAL_DMD_EXTENSION, "spf");
poDriver->SetMetadataItem(GDAL_DMD_HELPTOPIC, "drv_spf.html");
// 為GDALDriver設(shè)置函數(shù)指針
poDriver->pfnOpen = OGRSPFDriverOpen;
poDriver->pfnIdentify = OGRSPFDriverIdentify;
poDriver->pfnCreate = OGRSPFDriverCreate;
poDriver->SetMetadataItem(GDAL_DCAP_VIRTUALIO, "YES");
GetGDALDriverManager()->RegisterDriver(poDriver);
}
SetDescription("SPF")
指定了驅(qū)動程序的名稱沧卢。
SetMetadataItem( const char * pszName, const char * pszValue)
設(shè)置驅(qū)動的元數(shù)據(jù)信息:
- GDAL_DCAP_VECTOR:設(shè)置為"YES"表示驅(qū)動程序?qū)⑻幚硎噶繑?shù)據(jù)蚁堤。
- GDAL_DCAP_VIRTUALIO:設(shè)置為"YES"表示驅(qū)動程序可以處理使用VSI*L GDAL API打開的文件。否則不應(yīng)定義此元數(shù)據(jù)項但狭。
- GDAL_DMD_LONGNAME:文件格式的詳細(xì)描述披诗,長度一般在50-60個字符。(手工設(shè)置)
- GDAL_DMD_HELPTOPIC:URL立磁,相對于http://gdal.ogr/如果有的話藤巢, 是關(guān)于這個驅(qū)動幫助文檔的名稱。(可選)
- GDAL_DMD_EXTENSION:該類型文件的擴(kuò)展名息罗。如果擴(kuò)展名多于一個掂咒,則最好選擇最通用的那個,或者直接為空迈喉。(可選)
- GDAL_DMD_MIMETYPE:該格式數(shù)據(jù)的標(biāo)準(zhǔn)用途類型绍刮,例如“image/png”。(可選)
- GDAL_DMD_CREATIONOPTIONLIST:用于描述創(chuàng)建時的選項挨摸『⒏铮可以參考geotiff驅(qū)動的實現(xiàn)代碼。(可選)
- GDAL_DMD_CREATIONDATATYPES:支持創(chuàng)建數(shù)據(jù)集的全部類型列表得运。如果存在Create()方法這些類型都將被支持膝蜈。如果存在CreateCopy()方法,該類型列表將是那些支持無損輸出的類型熔掺。比如饱搏,一個格式使用了CreateCopy()方法,如果可以寫為Float32類型置逻,那么Byte推沸、Int16和UInt16都應(yīng)該被支持(因為它們都可以用Float32表示)
將自定義的實現(xiàn)函數(shù)賦值給GDALDriver的函數(shù)指針,通過調(diào)用GDALDriver的函數(shù)指針,以下函數(shù)被具體執(zhí)行:
static GDALDataset* OGRSPFDriverOpen(GDALOpenInfo* poOpenInfo);
static int OGRSPFDriverIdentify(GDALOpenInfo* poOpenInfo);
static GDALDataset* OGRSPFDriverCreate(const char* pszName, int nXSize, int nYSize,
int nBands, GDALDataType eDT, char** papszOptions);
Open()方法用于打開數(shù)據(jù)源并返回一個GDALDataset實例鬓催,通常被委托給實際的GDALDataset子類肺素,即在內(nèi)部調(diào)用GDALDataset子類實例的Open()方法。
static GDALDataset *OGRSPFDriverOpen( GDALOpenInfo* poOpenInfo )
{
if( !OGRSPFDriverIdentify(poOpenInfo) )
return NULL;
OGRSPFDataSource *poDS = new OGRSPFDataSource();
if( !poDS->Open(poOpenInfo->pszFilename, poOpenInfo->eAccess == GA_Update) )
{
delete poDS;
return NULL;
}
return poDS;
}
Identify()方法可以對數(shù)據(jù)源進(jìn)行校驗宇驾,判斷是否是合格數(shù)據(jù)源倍靡。
static int OGRSPFDriverIdentify( GDALOpenInfo* poOpenInfo )
{
// Does this appear to be an .spf file?
return EQUAL(CPLGetExtension(poOpenInfo->pszFilename), "spf");
}
create()在用于創(chuàng)建數(shù)據(jù),如該驅(qū)動用于驅(qū)動文件類型的數(shù)據(jù)時课舍,則可在create()中實現(xiàn)文件的創(chuàng)建塌西。
2.實現(xiàn)GDALDataset子類
GDALDataset子類以一個vector保存多個Layer數(shù)據(jù)。
class OGRSPFDataSource : public GDALDataset
{
std::vector<OGRSPFLayer*> papoLayers;
int nLayers;
public:
OGRSPFDataSource();
~OGRSPFDataSource();
int Open( const char *pszFilename, int bUpdate );
int GetLayerCount() { return nLayers; }
OGRLayer *GetLayer( int );
int TestCapability( const char * ) { return FALSE; }
};
Open()方法將會訪問數(shù)據(jù)源信息并創(chuàng)建OGRLayer的子類對象布卡,在實現(xiàn)OGRLayer的子類時雨让,訪問數(shù)據(jù)源信息雇盖,并獲取要素數(shù)據(jù)忿等。
int OGRSPFDataSource::Open( const char *pszFilename, int bUpdate )
{
if( bUpdate )
{
CPLError(CE_Failure, CPLE_OpenFailed,
"Update access not supported by the SPF driver.");
return FALSE;
}
// Create a corresponding layer.s
nLayers = 1;
papoLayers.append(new OGRSPFLayer(pszFilename));
pszName = CPLStrdup(pszFilename);
return TRUE;
}
3.實現(xiàn)OGRLayer子類
自定義OGRSPFLayer類繼承自O(shè)GRLayer。在內(nèi)部擁有OGRFeatureDefn成員變量崔挖,以便訪問該圖層的元數(shù)據(jù)信息贸街。
OGRLayer中的純虛函數(shù)有:
virtual void ResetReading() = 0;
virtual OGRFeature *GetNextFeature() CPL_WARN_UNUSED_RESULT = 0;
virtual OGRFeatureDefn *GetLayerDefn() = 0;
virtual int TestCapability( const char * ) = 0;
class OGRSPFLayer : public OGRLayer
{
OGRFeatureDefn *poFeatureDefn;
FILE *fp;
int nNextFID;
public:
OGRSPFLayer( const char *pszFilename );
~OGRSPFLayer();
void ResetReading();
OGRFeature * GetNextFeature();
OGRFeatureDefn * GetLayerDefn() { return poFeatureDefn; }
int TestCapability( const char * ) { return FALSE; }
};
類內(nèi)部的OGRFeatureDefn將被多個OGRFeature引用,所有在該類的構(gòu)造函數(shù)和析構(gòu)函數(shù)中也應(yīng)通過OGRFeatureDefn::Reference()和OGRFeatureDefn::Release()對OGRFeatureDefn對象進(jìn)行引用計數(shù)的+1和-1
OGRSPFLayer::OGRSPFLayer( const char *pszFilename )
{
nNextFID = 0;
poFeatureDefn = new OGRFeatureDefn(CPLGetBasename(pszFilename));
SetDescription(poFeatureDefn->GetName());
poFeatureDefn->Reference();
poFeatureDefn->SetGeomType(wkbPoint);
OGRFieldDefn oFieldTemplate("Name", OFTString);
poFeatureDefn->AddFieldDefn(&oFieldTemplate);
fp = VSIFOpenL(pszFilename, "r");
if( fp == NULL )
return;
}
OGRSPFLayer::~OGRSPFLayer()
{
poFeatureDefn->Release();
if( fp != NULL )
VSIFCloseL(fp);
}
重寫GetNextFeature()狸相,在函數(shù)體內(nèi)訪問數(shù)據(jù)源獲取到每一個feature的信息薛匪,并創(chuàng)建OGRFeature對象后返回。
OGRFeature *OGRSPFLayer::GetNextFeature()
{
/* 從數(shù)據(jù)源獲取到下一個feature的數(shù)據(jù) */
......
{
OGRFeature *poFeature = new OGRFeature(poFeatureDefn);
poFeature->SetGeometryDirectly(new OGRPoint(dfX, dfY));
poFeature->SetField(0, pszName);
poFeature->SetFID(nNextFID++);
if(/*match*/)
{
return poFeature;
}
else
{
delete poFeature;
}
}
}
OGRLayer基類擁有成員變量:OGRLayer::m_poFilterGeom和OGRLayer::m_poAttrQuery分別對幾何和屬性進(jìn)行過濾脓鹃,以便篩選出符合要求的feature逸尖,可以在GetNextFeature()方法中進(jìn)行判斷:
if( (m_poFilterGeom == NULL ||
FilterGeometry(poFeature->GetGeometryRef())) &&
(m_poAttrQuery == NULL ||
m_poAttrQuery->Evaluate(poFeature)) )
return poFeature;
delete poFeature;
重寫OGRLayer::ResetReading(),在函數(shù)體內(nèi)重置feature的索引瘸右,代表重新獲取feature娇跟,與OGRLayer::GetNextFeature()聯(lián)動。
void OGRSPFLayer::ResetReading()
{
VSIFSeekL(fp, 0, SEEK_SET);
nNextFID = 0;
}
4.GDALDataset虛函數(shù)
重點實現(xiàn):
-
virtual int GetLayerCount();
獲取圖層數(shù)量太颤,默認(rèn)實現(xiàn)返回0苞俘。 -
virtual OGRLayer *GetLayer(int iLayer);
根據(jù)下標(biāo)獲取圖層,默認(rèn)實現(xiàn)返回nullptr
龄章。 -
virtual OGRLayer *GetLayerByName(const char *);
根據(jù)圖層名稱返回圖層吃谣,默認(rèn)實現(xiàn)會根據(jù)GetLayerCount()
、GetLayer()
遍歷所有圖層做裙,并比較圖層名后返回岗憋。其首先會大小寫敏感判斷圖層名,如果沒有符合的圖層锚贱,會用大小寫不敏感去匹配圖層名澜驮。 -
virtual OGRErr DeleteLayer(int iLayer);
根據(jù)下標(biāo)刪除指定圖層,默認(rèn)實現(xiàn)為空邏輯惋鸥。 -
virtual void ResetReading();
重置feature的讀取為從第一個feature開始杂穷,該函數(shù)會影響GetNextFeature()
悍缠。 -
virtual OGRFeature* GetNextFeature( OGRLayer** ppoBelongingLayer, double* pdfProgressPct, GDALProgressFunc pfnProgress, void* pProgressData );
通過循環(huán)圖層,獲取每個圖層的feature耐量,會調(diào)用圖層的GetNextFeature()
方法飞蚓。 -
virtual int TestCapability( const char * );
判斷該數(shù)據(jù)源是否有某一功能,默認(rèn)實現(xiàn)為返回false廊蜒。傳入的字符串有:
<ul>
<li> <b>ODsCCreateLayer</b>: True if this datasource can create new layers.<p>
<li> <b>ODsCDeleteLayer</b>: True if this datasource can delete existing
layers.<p>
<li> <b>ODsCCreateGeomFieldAfterCreateLayer</b>: True if the layers of this
datasource support CreateGeomField() just after layer creation.<p>
<li> <b>ODsCCurveGeometries</b>: True if this datasource supports curve
geometries.<p>
<li> <b>ODsCTransactions</b>: True if this datasource supports (efficient)
transactions.<p>
<li> <b>ODsCEmulatedTransactions</b>: True if this datasource supports
transactions through emulation.<p>
<li> <b>ODsCRandomLayerRead</b>: True if this datasource has a dedicated
GetNextFeature() implementation, potentially returning features from
layers in a non sequential way.<p>
<li> <b>ODsCRandomLayerWrite</b>: True if this datasource supports calling
CreateFeature() on layers in a non sequential way.<p>
</ul>o
-
virtual bool AddFieldDomain(std::unique_ptr<OGRFieldDomain>&& domain, std::string& failureReason);
向數(shù)據(jù)集添加字段域趴拧,默認(rèn)實現(xiàn)是空邏輯。 -
virtual bool DeleteFieldDomain(const std::string& name, std::string& failureReason);
根據(jù)名稱刪除指定的字段域山叮,默認(rèn)實現(xiàn)是空邏輯著榴。 -
virtual bool UpdateFieldDomain(std::unique_ptr<OGRFieldDomain>&& domain, std::string& failureReason);
通過替換定義更新一個已經(jīng)存在的字段域,將通過字段域的名稱去匹配屁倔,默認(rèn)實現(xiàn)是空邏輯脑又。 -
virtual OGRLayer *ICreateLayer( const char *pszName, OGRSpatialReference *poSpatialRef = nullptr, OGRwkbGeometryType eGType = wkbUnknown, char ** papszOptions = nullptr );
創(chuàng)建圖層,默認(rèn)實現(xiàn)是返回nullptr
锐借,該接口為protected问麸。
非重點實現(xiàn):
-
virtual void FlushCache(bool bAtClosing = false);
將所有緩存數(shù)據(jù)寫入硬盤,默認(rèn)實現(xiàn)是調(diào)用每個raster bands的FlushCache()
和每個Layer的SyncToDisk()
钞翔。 -
virtual const OGRSpatialReference* GetSpatialRef() const;
獲取數(shù)據(jù)集的空間參考系严卖,默認(rèn)實現(xiàn)是返回nullptr
。 -
virtual CPLErr SetSpatialRef(const OGRSpatialReference* poSRS);
為數(shù)據(jù)集設(shè)置空間參考系布轿,默認(rèn)實現(xiàn)為空邏輯哮笆。 virtual CPLErr GetGeoTransform( double * padfTransform );
virtual CPLErr SetGeoTransform( double * padfTransform );
-
virtual void *GetInternalHandle( const char * pszHandleName );
獲取內(nèi)部特定格式的有意義句柄,默認(rèn)實現(xiàn)返回nullptr
汰扭。 -
virtual GDALDriver *GetDriver(void);
有默認(rèn)實現(xiàn)稠肘。 -
virtual const char* GetDriverName();
有默認(rèn)實現(xiàn)。 virtual char **GetFileList(void);
-
virtual const OGRSpatialReference* GetGCPSpatialRef() const;
返回地理轉(zhuǎn)換控制點的坐標(biāo)系东且,默認(rèn)實現(xiàn)返回nullptr
-
virtual int GetGCPCount();
獲取地理轉(zhuǎn)換控制點數(shù)量启具,默認(rèn)實現(xiàn)返回0。 -
virtual const GDAL_GCP *GetGCPs();
默認(rèn)實現(xiàn)返回nullptr
珊泳。 virtual CPLErr SetGCPs( int nGCPCount, const GDAL_GCP *pasGCPList, const OGRSpatialReference * poGCP_SRS );
virtual CPLErr AdviseRead( int nXOff, int nYOff, int nXSize, int nYSize, int nBufXSize, int nBufYSize, GDALDataType eDT, int nBandCount, int *panBandList, char **papszOptions );
virtual CPLErr CreateMaskBand( int nFlagsIn );
virtual GDALAsyncReader* BeginAsyncReader(int nXOff, int nYOff, int nXSize, int nYSize, void *pBuf, int nBufXSize, int nBufYSize, GDALDataType eBufType, int nBandCount, int* panBandMap, int nPixelSpace, int nLineSpace, int nBandSpace, char **papszOptions);
virtual void EndAsyncReader(GDALAsyncReader *);
-
virtual bool GetRawBinaryLayout(RawBinaryLayout&);
獲取數(shù)據(jù)集中原始二進(jìn)制格式的圖層鲁冯,默認(rèn)實現(xiàn)為返回空。 virtual void ClearStatistics();
-
virtual bool IsLayerPrivate(int iLayer) const;
通過下標(biāo)判斷該圖層是否是私有圖層色查,默認(rèn)實現(xiàn)返回false
薯演。 -
virtual std::vector<std::string> GetFieldDomainNames(CSLConstList papszOptions = nullptr) const;
返回字段域的名稱列表,默認(rèn)實現(xiàn)是從成員變量m_oMapFieldDomains
中取出所有的key秧了。 -
virtual const OGRFieldDomain* GetFieldDomain(const std::string& name) const;
根據(jù)名稱獲取字段域跨扮,默認(rèn)實現(xiàn)是從成員變量m_oMapFieldDomains
中查找。 -
virtual OGRLayer *CreateLayer( const char *pszName, OGRSpatialReference *poSpatialRef = nullptr, OGRwkbGeometryType eGType = wkbUnknown, char ** papszOptions = nullptr );
創(chuàng)建新圖層,默認(rèn)實現(xiàn)是委托給ICreateLayer()
衡创,而ICreateLayer()
的默認(rèn)實現(xiàn)是空邏輯帝嗡。 -
virtual OGRLayer *CopyLayer( OGRLayer *poSrcLayer, const char *pszNewName, char **papszOptions = nullptr );
復(fù)制一個已存在的圖層,有默認(rèn)實現(xiàn)璃氢,新圖層的創(chuàng)建由ICreateLayer()
完成哟玷,之后將原圖層的各項數(shù)據(jù)復(fù)制給新圖層。 -
virtual OGRStyleTable *GetStyleTable();
獲取數(shù)據(jù)集的樣式表一也,默認(rèn)實現(xiàn)是返回成員變量m_poStyleTable
巢寡。 -
virtual void SetStyleTableDirectly( OGRStyleTable *poStyleTable );
直接設(shè)置樣式表,默認(rèn)實現(xiàn)是將形參直接賦值給成員變量m_poStyleTable
椰苟。 -
virtual void SetStyleTable(OGRStyleTable *poStyleTable);
設(shè)置樣式表抑月,默認(rèn)實現(xiàn)會先delete原指針,后執(zhí)行OGRStyleTable::Clone()
舆蝴。 -
virtual OGRLayer * ExecuteSQL( const char *pszStatement, OGRGeometry *poSpatialFilter, const char *pszDialect );
對數(shù)據(jù)源執(zhí)行SQL語句谦絮,返回執(zhí)行后得到的圖層,有默認(rèn)實現(xiàn)须误。 -
virtual void ReleaseResultSet( OGRLayer * poResultsSet );
釋放ExecuteSQL()
后得到的結(jié)果挨稿,默認(rèn)實現(xiàn)是直接delete形參仇轻。 virtual OGRErr AbortSQL( );
virtual OGRErr StartTransaction(int bForce=FALSE);
virtual OGRErr CommitTransaction();
-
virtual OGRErr RollbackTransaction();
以上API提供數(shù)據(jù)集級別的事務(wù)機制京痢,可參考GDAL的RFC 54 -
virtual std::shared_ptr<GDALGroup> GetRootGroup() const;
默認(rèn)實現(xiàn)返回nullptr
5.OGRLayer虛函數(shù)
重點實現(xiàn):
-
virtual OGRErr ISetFeature( OGRFeature *poFeature ) CPL_WARN_UNUSED_RESULT;
默認(rèn)實現(xiàn)為空邏輯,該接口為protected篷店。 -
virtual OGRErr ICreateFeature( OGRFeature *poFeature ) CPL_WARN_UNUSED_RESULT;
創(chuàng)建要素祭椰,默認(rèn)實現(xiàn)為空邏輯,該接口為protected疲陕。 -
virtual void ResetReading() = 0;
重置feature的遍歷方淤。 -
virtual OGRFeature *GetNextFeature() CPL_WARN_UNUSED_RESULT = 0;
獲取下一個feature。 -
virtual OGRErr DeleteFeature( GIntBig nFID ) CPL_WARN_UNUSED_RESULT;
刪除feature蹄殃,默認(rèn)實現(xiàn)為空邏輯携茂。 -
virtual OGRFeatureDefn *GetLayerDefn() = 0;
獲取圖層定義,返回的是OGRFeatureDefn 對象诅岩。 -
virtual GIntBig GetFeatureCount( int bForce = TRUE );
獲取feature數(shù)量讳苦,默認(rèn)實現(xiàn)為遍歷所有feature進(jìn)行計數(shù),計數(shù)完畢后會并調(diào)用ResetReading();
-
virtual int TestCapability( const char * ) = 0;
驗證Layer是否具有某能力吩谦,如創(chuàng)建feature鸳谜、刪除feature等。 -
virtual OGRErr Rename( const char* pszNewName ) CPL_WARN_UNUSED_RESULT;
重命名圖層式廷,默認(rèn)實現(xiàn)為空邏輯咐扭,根據(jù)ogrlayer.cpp
中的描述,該方法的實現(xiàn)只存在于暴露了OLCRename能力的Layer和GDAL_DCAP_RENAME_LAYERS能力的驅(qū)動,如果數(shù)據(jù)集中已有同名Layer蝗肪,應(yīng)該返回False袜爪。 -
virtual OGRErr CreateField( OGRFieldDefn *poField, int bApproxOK = TRUE );
創(chuàng)建域,默認(rèn)實現(xiàn)為空邏輯薛闪。 -
virtual OGRErr DeleteField( int iField );
刪除域饿敲,默認(rèn)實現(xiàn)為空邏輯。 -
virtual OGRErr ReorderFields( int* panMap );
重排序域逛绵,默認(rèn)實現(xiàn)為空邏輯怀各。 -
virtual OGRErr AlterFieldDefn( int iField, OGRFieldDefn* poNewFieldDefn, int nFlagsIn );
修改域定義,默認(rèn)實現(xiàn)為空邏輯术浪。 -
virtual OGRErr CreateGeomField( OGRGeomFieldDefn *poField, int bApproxOK = TRUE );
創(chuàng)建幾何域瓢对,默認(rèn)實現(xiàn)為空邏輯。
非重點實現(xiàn):
-
virtual OGRGeometry *GetSpatialFilter();
獲取空間過濾幾何胰苏,默認(rèn)實現(xiàn)為返回成員變量m_poFilterGeom
硕蛹。 -
virtual void SetSpatialFilter( OGRGeometry * );
設(shè)置空間過濾,默認(rèn)實現(xiàn)會委托給InstallFilter()
硕并,并調(diào)用ResetReading()
法焰。 -
virtual void SetSpatialFilterRect( double dfMinX, double dfMinY, double dfMaxX, double dfMaxY );
設(shè)置空間過濾矩形,默認(rèn)實現(xiàn)會構(gòu)造一個矩形后倔毙,調(diào)用SetSpatialFilter()
埃仪。 -
virtual OGRErr SetAttributeFilter( const char * );
設(shè)置屬性過濾,有默認(rèn)實現(xiàn)陕赃。 -
virtual OGRErr SetNextByIndex( GIntBig nIndex );
通過下標(biāo)設(shè)置下一個返回的feature卵蛉,即GetNextFeature()
的返回值,有默認(rèn)實現(xiàn)么库。 -
virtual OGRFeature *GetFeature( GIntBig nFID ) CPL_WARN_UNUSED_RESULT;
根據(jù)nFID獲取feature對象傻丝。有默認(rèn)實現(xiàn)。 -
virtual const char *GetName();
獲取圖層名诉儒,默認(rèn)實現(xiàn)委托給GetLayerDefn()->GetName()
葡缰。 -
virtual OGRwkbGeometryType GetGeomType();
獲取幾何類型,默認(rèn)實現(xiàn)委托給GetLayerDefn()->GetGeomType()
忱反。 -
virtual int FindFieldIndex( const char *pszFieldName, int bExactMatch );
根據(jù)名稱獲取域下標(biāo)泛释,默認(rèn)實現(xiàn)委托給GetLayerDefn()->GetFieldIndex( pszFieldName )
。 -
virtual OGRSpatialReference *GetSpatialRef();
獲取空間參考系缭受,默認(rèn)實現(xiàn)委托給GetLayerDefn()->GetGeomFieldDefn(0)->GetSpatialRef()
胁澳。 -
virtual OGRErr GetExtent(OGREnvelope *psExtent, int bForce = TRUE) CPL_WARN_UNUSED_RESULT;
獲取范圍,默認(rèn)實現(xiàn)是委托給GetExtentInternal()
米者。GetExtentInternal()
會遍歷feature韭畸,并匯總feature的幾何后得出矩形范圍宇智,最后會調(diào)用`ResetReading()``。 -
virtual OGRErr SyncToDisk();
將緩存數(shù)據(jù)同步到硬盤胰丁,默認(rèn)實現(xiàn)為空邏輯随橘。 -
virtual OGRStyleTable *GetStyleTable();
獲取樣式表,默認(rèn)實現(xiàn)為返回成員變量m_poStyleTable
锦庸。 -
virtual void SetStyleTableDirectly( OGRStyleTable *poStyleTable );
直接設(shè)置樣式表机蔗,默認(rèn)實現(xiàn)為將形參賦值給成員變量m_poStyleTable
。 -
virtual void SetStyleTable(OGRStyleTable *poStyleTable);
設(shè)置樣式表甘萧,默認(rèn)實現(xiàn)為delete成員變量m_poStyleTable
萝嘁,之后調(diào)用OGRStyleTable::Clone()
。 -
virtual OGRErr StartTransaction() CPL_WARN_UNUSED_RESULT;
開啟事務(wù)扬卷,默認(rèn)實現(xiàn)為空邏輯牙言。 -
virtual OGRErr CommitTransaction() CPL_WARN_UNUSED_RESULT;
提交事務(wù),默認(rèn)實現(xiàn)為空邏輯怪得。 -
virtual OGRErr RollbackTransaction();
回滾咱枉,默認(rèn)實現(xiàn)為空邏輯。 -
virtual const char *GetFIDColumn();
獲取FID列名徒恋,默認(rèn)實現(xiàn)為返回空字符串蚕断。 -
virtual const char *GetGeometryColumn();
獲取幾何列,默認(rèn)實現(xiàn)委托給GetLayerDefn()->GetGeomFieldDefn(0)->GetNameRef()
入挣。 -
virtual OGRErr SetIgnoredFields( const char **papszFields );
設(shè)置忽略的域亿乳,有默認(rèn)實現(xiàn)。