擴充套件OGR格式驅動 一 無需外部依賴庫

2022-09-02 07:33:10 字數 2563 閱讀 5607

gdal/ogr官方**中給了編寫柵格和向量資料新格式的教程,ogr driver implementation tutorial,但是沒有給出具體的編譯過程,這篇博文記錄如何將新建的格式編入gdal/ogr。

(1) 實現部分參考ogr driver implementation tutorial,這個教程很詳細,另外也可以閱讀ogr某些格式的原始碼了解這一過程。下面這個是乙個更為簡單的open方法實現:

1

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 }

(2) 這一部分實現後應該形成ogr_spf.h、ogrspfdatasource.cpp、ogrspfdriver.cpp、ogrspflayer.cpp四個原始檔,其中標頭檔案ogr_spf.h中最好加上巨集定義:

1

#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 */

ogrspfdriver.cpp檔案中則需要新增驅動註冊函式定義:

1

void

registerogrspf()

2

(3) 修改完成後在ogr\ogrsf_frmts資料夾下建立spf資料夾,將這四個原始檔放入其中。

(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

#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

(2)修改ogrsf_frmts.h和ogrregisterall.cpp檔案

在ogrregisterall.cpp中void ogrregisterall()函式中新增下面的**:

1

#ifdef spf_enabled

2registerogrspf();

3#endif

在ogrsf_frmts.h中新增:

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...