gdal/ogr官方**中給了編寫柵格和向量資料新格式的教程,ogr driver implementation tutorial,但是沒有給出具體的編譯過程,這篇博文記錄如何將新建的格式編入gdal/ogr。
(1) 實現部分參考ogr driver implementation tutorial,這個教程很詳細,另外也可以閱讀ogr某些格式的原始碼了解這一過程。下面這個是乙個更為簡單的open方法實現:
1(2) 這一部分實現後應該形成ogr_spf.h、ogrspfdatasource.cpp、ogrspfdriver.cpp、ogrspflayer.cpp四個原始檔,其中標頭檔案ogr_spf.h中最好加上巨集定義:int ogrspfdatasource::open( const
char *pszfilename, int
bupdate )
214 std::cout <
ogrspfdatasource::open( const char *pszfilename, int bupdate )
"<<:endl>
15 std::cout <
trying to open the datasource
"<<:endl>
16return
true;
17 }
1ogrspfdriver.cpp檔案中則需要新增驅動註冊函式定義:#ifndef _ogr_spf_h_included
2#define _ogr_spf_h_included34
class ogrspfdriver : public
ogrsfdriver58
9class ogrspfdatasource : public
ogrdatasource
1013
14class ogrspflayer : public
ogrlayer
1518
#endif /* ndef _ogr_spf_h_included */
1(3) 修改完成後在ogr\ogrsf_frmts資料夾下建立spf資料夾,將這四個原始檔放入其中。void
registerogrspf()
2
(1) 從其他格式資料夾下拷貝makefile.vc和gunmakefile檔案到spf目錄下,使用vs或記事本開啟修改:
1#makefile.vc檔案
23 obj =ogrspfdatasource.obj ogrspfdriver.obj ogrspflayer.obj
4 extraflags = -i.. -i..\..
5 gdal_root =..\..\..
6 !include $(gdal_root)\nmake.opt
7default: $(obj)
8clean:
9 -del *.obj *.pdb
1(2)修改ogrsf_frmts.h和ogrregisterall.cpp檔案#gunmakefile檔案
2 include ../gdalmake.opt
3 obj =ogrspfdatasource.o ogrspfdriver.o ogrspflayer.o
4 cppflags := -i.. -i../.. $(gdal_include) $(cppflags)
5 default: $(o_obj:.o=.$(obj_ext))
6clean:
7rm -f *.o $(o_obj)
8 $(o_obj):ogr_spf.h
在ogrregisterall.cpp中void ogrregisterall()函式中新增下面的**:
1在ogrsf_frmts.h中新增:#ifdef spf_enabled
2registerogrspf();
3#endif
void cpl_dll registerogrspf();(3) 修改makefile.vc
開啟ogr\ogrsf_frmts\generic\makefile.vc,在baseformats中新增-dspf_enabled;
開啟\ogr\ogrsf_frmts\makefile.vc,在dirlist中新增spf,在lib /out:中新增spf\*.obj;
儲存所有修改重新編譯gdal/ogr庫,在bin下使用ogrinfo --formats命令檢視:
Thinkphp 框架擴充套件之驅動擴充套件例項分析
每個類庫都可以設計自己的驅動,因此3.2版本的驅動目錄沒有獨立出來,而是放到各個類庫的命名空間下面,例如 think log類的驅動放到 think log driver 命名空間下面,think db類的驅動放到了 think db driver 命名空間下面。當然,這只是建議的位置,你完全可以根...
TP的sessionDB 擴充套件驅動
tp提供了sessiondb的擴充套件驅動。發現以下問題 1 讀取session會呼叫sessiondb的write方法 讀取 session abc 首先會呼叫thinkphp common functions.php 的session函式,傳遞name是空陣列,value是 的引數。因此會執行s...
scanf的乙個擴充套件的輸入格式
上面的兩個scanf的格式比較特殊。第乙個表示輸入字串,直到遇到不在a z中的乙個字元則結束輸入。後者相反,輸入字串,直到遇到a z中的乙個字元則結束輸入。如,對於上面的程式執行 msdn的說明 reading undelimited strings note that a z and z a ar...