999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

淺析ArcSDE C API入庫方法和原理

2010-11-13 07:44:54張卓然
湖南科技學院學報 2010年4期
關鍵詞:設置數據庫

張卓然

(湖南拓維軟件工程公司,湖南 長沙 410082)

ArcSDE提供了空間數據在商用關系數據庫管理系統中進行存儲、訪問、編輯的通道。ArcSDE的面向對象的數據存儲模型使得開發人員將更多的精力應用在空間數據的應用層,而數據的存儲、表達等比較底層的應用由ArcSDE所定義的規則去完成。

圖3.4ArcSDE空間數據訪問流

根據不同用戶的需求,ArcSDE除支持多種服務器系統平臺、多種數據庫系統以外,在客戶端,用戶同樣可以根據自己的需求來選擇客戶端應用軟件。ArcSDE C API是提供給開發人員定制客戶端定端軟件的應用程序開發接口,ArcSDE通過提供空間約束對標準SQL進行了擴展,從而實現了帶有空間約束條件的空間數據庫的查詢工作。其主要工作 流程如圖3.4所示,通過查詢(屬性、空間)以后獲取的結果存放在一個數據集中,用戶可以順序訪問數據集中的數據。數據的類型可以是字符型、也可以是shape幾何類型的數據。通過ArcSDE訪問幾何數據,一般要通過以下幾個步驟:

1)空間數據庫連接

不管是從ArcSDE中讀取數據還是存儲數據,都必須先建立與ArcSDE 服務器的連接。連接ArcSDE服務器的實質就是建立一個正確的 ArcSDE連接句柄,可以通過函數SE_connection_create來創建。其函數原型如下所示:

LONG SE_connection_create(const CHAR *server,const CHAR *instance,

const CHAR *database,const CHAR *username,const CHAR *password,

SE_ERROR *error,SE_CONNECTION *connection);

SE_CONNECTION Connection;

SE_ERROR Connect_error;

LONG rc;

CHAR*server, *instance, *database, *user, *passwd;

//創建數據庫連接

rc = SE_connection_create(server, instance, database, user,

passwd,Connect_error,&Connection);

//進行錯誤檢驗,查看創建數據庫連接是否成功

check_error (Connection, NULL, rc,"SE_connection_create");//進行數據庫操作……//數據庫連接釋放,這個是空間數據庫操作的最后一步,后文會描述

SE_connection_free(Connection);

2)數據流對象的創建

要實現數據庫查詢,首先要創建一個數據庫流(SE_STREAM)對象,數據流對象用于實現客戶端和服務器端的數據的訪問、傳輸。類似于DBMS的游標對象,數據流對象使得用戶可以循環的訪問數據集對象,SE_stream_create()可以用來創建一個數據流對象,其函數原型:

LONG SE_stream_create (SE_CONNECTION Connection,SE_STREAM *Stream);

創建了一個數據流對象以后,當不需要這個對象時,就需要調用函數 SE_stream_free()將其釋放,函數原型如下,參數含義同上:

LONG SE_stream_free (SE_STREAMstream);

創建數據流對象代碼如下:

LONG rc;

SE_STREAMStream;//創建數據流對象

rc = SE_stream_create (Connection, &Stream);

//進行錯誤檢驗,查看創建數據流對象是否成功checke_error (Connection, NULL, rc,

"SE_stream_create");

//進行數據訪問操作,訪問的結果存放在SE_STREAM對象中

……

//釋放數據流對象

rc = SE_stream_free (Stream);

3)空間數據查詢

ArcSDE對標準SQL進行了空間擴展,使得其可以進行空間數據查詢,而這樣的擴展是通過SE_SQL_CONSTRUCT數據結構來完成的。

typedef struct {

LONGnum_tables;//表的數目CHAR**tables;//表名數組

CHAR*where;//SQL查詢條件語句

} SE_SQL_CONSTRUCT;

在使用SE_SQL_CONSTRUCT對象之前,首先要調用SE_sql_construct_alloc來為其分配內存空間,參數意義同上。

LONG SE_sql_construct_alloc(LONG num_tables,

SE_SQL_CONSTRUCT

**constructor);

空間數據的查詢包括屬性條件查詢和空間幾何限制條件查詢兩個部分。屬性條件查詢條件通過SE_SQL_CONSTRUCT的where條件語句進行設置。而空間幾何條件查詢的條件通過SE_FILTER結構對象進行設置,主要用到了兩個方法:SE_stream_query和

SE_stream_set_spatial_constraints,函數原型如下:

LONG SE_stream_query(SE_STREAM stream,SHORT

num_columns,

const CHAR **columns,const SE_SQL_CONSTRUCT*construct);

函數功能:設置空間數據查詢的屬性條件,參數意義如下:

construct屬性查詢數據結構

LONG SE_stream_set_spatial_constraints(SE_STREAM stream,SHORT search_order,

BOOL calc_masks,SHORT num_filters,const SE_FILTER*filters);

函數功能:設置空間數據查詢的幾何限制條件,各參數意義如下:

具體使用方法如下:

SE_FILTERfilter;

SE_SQL_CONSTRUCT*SQL=NULL;//屬性查詢條件的設置

rc = SE_sql_construct_alloc(1, &SQL);

SQL->where = (char*)malloc(20);

SQL->num_tables = 1;

strcpy(SQL->tables[0], strlyrName);

strcpy(SQL->where,"ObjectID>=1");

//設置屬性查詢條件

attrs1[0] = "Shape";//檢索用圖形字段

attrs1[1] = "ObjectID"; //檢索用屬性字段

//屬性結果就是返回所有的記錄數據

rc = SE_stream_query(stream, 2, (const char **)attrs1,SQL);

//設置空間過濾關系

strcpy(filter.table,strlyrName);

strcpy(filter.column, "Shape");

filter.filter_type = SE_SHAPE_FILTER;

filter.filter.shape = clipShp;

filter.truth = TRUE;

//SM_SC表示待查找的幾何目標包含在結構體的shape幾何對象中

filter.method = SM_SC ;

/

/設置空間幾何過濾條件

rc=SE_stream_set_spatial_constraints(stream,

SE_SPATIAL_FIRST, FALSE, 1,&filter);

//執行查詢,查詢結果存儲在stream對象里面

rc = SE_stream_execute(stream);

//處理獲取的數據

……

//關閉、釋放數據流對象

rc = SE_stream_close(stream,TRUE);

rc = SE_stream_free(stream);

//釋放屬性查詢條件結構對象

free(SQL->where);

SE_sql_construct_free(SQL);

4)數據對象的訪問

通過擴展的空間SQL訪問數據庫中的數據,得到的結果被存儲在空間數據流對象(Stream)中,下面主要介紹對該數據流中的對象進行瀏覽、編輯、存儲的方法。數據的查詢返回的結果SE_STREAM,初始值是指向結果的第一個元素對象,SE_stream_fetch()函數主要用于數據集對象中數據的循環訪問,每次返回游標所指向的一條數據記錄,如果訪問成功返回SE_SUCCESS,如果到達數據集的末尾,則返回SE_FINISHED,函數原型為:

LONG SE_stream_fetch (SE_STREAM stream);

數據集的訪問偽代碼如下:

while (RC == SE_SUCCESS)

{

//獲取查詢結果,循環逐一獲取

RC = SE_stream_fetch(stream);

If (RC != SE_SUCCESS)

//錯誤處理

else

{

rc=SE_stream_get_integer(stream,2,&nObjectID);

if (rc !=SE_SUCCESS)

//錯誤處理

}

}

5)處理對象數據的釋放

在C++中要求分配的內存空間在程序結束的時候要解釋釋放,同樣ArcSDE C API要求開發人員在程序模塊結束,將不再使用的數據對象所占據的內存空間進行手工的釋放,在以上的事例代碼中,大家已經看到了,空間數據據庫連接對象在結束時通過SE_connection_free()釋放了,而數據流對象也在訪問之后被關閉,同時內存空間也得到了釋放。

通過以上五個步驟,我們實現了空間數據庫的訪問,同樣的道理,我們可以通過流程進行數據記錄對象增加、修改和刪除工作。

[3]劉恩林,石軍南,羅鵬,雷平.Geodatabase 模型的版本控制原理及應用[J]. 西安文理學院學報:自然科學版. 2007,(1).

[4]宋楊,萬幼川.一種新型空間數據模型Geodatabase[J] .測繪通報,2004,(11).

猜你喜歡
設置數據庫
中隊崗位該如何設置
少先隊活動(2021年4期)2021-07-23 01:46:22
7招教你手動設置參數
數據庫
財經(2017年15期)2017-07-03 22:40:49
數據庫
財經(2017年2期)2017-03-10 14:35:35
數據庫
財經(2016年15期)2016-06-03 07:38:02
數據庫
財經(2016年3期)2016-03-07 07:44:46
數據庫
財經(2016年6期)2016-02-24 07:41:51
本刊欄目設置說明
中俄臨床醫學專業課程設置的比較與思考
艦船人員編制的設置與控制
主站蜘蛛池模板: 色香蕉网站| 精品无码人妻一区二区| aaa国产一级毛片| AV老司机AV天堂| 97国产成人无码精品久久久| 精品久久久久成人码免费动漫| 国产成年女人特黄特色大片免费| 日韩视频福利| 久久亚洲国产视频| 88av在线播放| 亚洲视频三级| 日韩欧美中文字幕在线韩免费| 波多野吉衣一区二区三区av| 中文字幕日韩视频欧美一区| 最新国产午夜精品视频成人| 在线观看亚洲精品福利片| 人妻精品久久无码区| 亚洲国产日韩在线成人蜜芽| 手机精品福利在线观看| 国产9191精品免费观看| 欧美一区二区啪啪| 国产精品视频导航| 亚洲天堂2014| 亚洲人网站| 亚洲精品午夜天堂网页| 国产视频你懂得| 91久久性奴调教国产免费| 国产精品欧美激情| 亚洲婷婷在线视频| 人妻无码中文字幕第一区| 国产a v无码专区亚洲av| 天天做天天爱天天爽综合区| 免费人成网站在线观看欧美| 国产精品香蕉| 99色亚洲国产精品11p| 无套av在线| 国产永久在线视频| 97se亚洲综合| 99久久精品无码专区免费| 亚洲国产精品VA在线看黑人| 国产一区二区三区免费观看| 日韩欧美中文| 色婷婷国产精品视频| 亚欧美国产综合| 一级做a爰片久久免费| 欧美在线黄| 五月六月伊人狠狠丁香网| 久久国产精品无码hdav| 嫩草影院在线观看精品视频| 91精品视频播放| 国产男人天堂| 毛片免费视频| 国产成人精品亚洲77美色| 欧美色综合网站| 99人妻碰碰碰久久久久禁片| 欧美精品三级在线| 秋霞一区二区三区| 亚洲国产欧美中日韩成人综合视频| 国产日本欧美在线观看| 亚洲欧美另类中文字幕| 久青草免费在线视频| 久久精品中文字幕少妇| 中文字幕 日韩 欧美| 国产精品无码AⅤ在线观看播放| 自拍中文字幕| 日韩在线欧美在线| 亚洲日韩精品欧美中文字幕 | 韩日午夜在线资源一区二区| 国精品91人妻无码一区二区三区| 亚洲免费黄色网| 麻豆精品视频在线原创| 亚洲精品视频网| 中文字幕乱妇无码AV在线| 国产屁屁影院| 免费激情网址| 国产成人1024精品下载| 国产精品久线在线观看| 国产超碰一区二区三区| 亚洲国内精品自在自线官| 亚洲中文字幕23页在线| 91美女视频在线| 久久精品丝袜高跟鞋|