亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

        2010-11-13 07:44:54張卓然
        湖南科技學(xué)院學(xué)報 2010年4期
        關(guān)鍵詞:空間數(shù)據(jù)數(shù)據(jù)流對象

        張卓然

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

        ArcSDE提供了空間數(shù)據(jù)在商用關(guān)系數(shù)據(jù)庫管理系統(tǒng)中進行存儲、訪問、編輯的通道。ArcSDE的面向?qū)ο蟮臄?shù)據(jù)存儲模型使得開發(fā)人員將更多的精力應(yīng)用在空間數(shù)據(jù)的應(yīng)用層,而數(shù)據(jù)的存儲、表達等比較底層的應(yīng)用由ArcSDE所定義的規(guī)則去完成。

        圖3.4ArcSDE空間數(shù)據(jù)訪問流

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

        1)空間數(shù)據(jù)庫連接

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

        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;

        //創(chuàng)建數(shù)據(jù)庫連接

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

        passwd,Connect_error,&Connection);

        //進行錯誤檢驗,查看創(chuàng)建數(shù)據(jù)庫連接是否成功

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

        SE_connection_free(Connection);

        2)數(shù)據(jù)流對象的創(chuàng)建

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

        LONG SE_stream_create (SE_CONNECTION Connection,SE_STREAM *Stream);

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

        LONG SE_stream_free (SE_STREAMstream);

        創(chuàng)建數(shù)據(jù)流對象代碼如下:

        LONG rc;

        SE_STREAMStream;//創(chuàng)建數(shù)據(jù)流對象

        rc = SE_stream_create (Connection, &Stream);

        //進行錯誤檢驗,查看創(chuàng)建數(shù)據(jù)流對象是否成功checke_error (Connection, NULL, rc,

        "SE_stream_create");

        //進行數(shù)據(jù)訪問操作,訪問的結(jié)果存放在SE_STREAM對象中

        ……

        //釋放數(shù)據(jù)流對象

        rc = SE_stream_free (Stream);

        3)空間數(shù)據(jù)查詢

        ArcSDE對標準SQL進行了空間擴展,使得其可以進行空間數(shù)據(jù)查詢,而這樣的擴展是通過SE_SQL_CONSTRUCT數(shù)據(jù)結(jié)構(gòu)來完成的。

        typedef struct {

        LONGnum_tables;//表的數(shù)目CHAR**tables;//表名數(shù)組

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

        } SE_SQL_CONSTRUCT;

        在使用SE_SQL_CONSTRUCT對象之前,首先要調(diào)用SE_sql_construct_alloc來為其分配內(nèi)存空間,參數(shù)意義同上。

        LONG SE_sql_construct_alloc(LONG num_tables,

        SE_SQL_CONSTRUCT

        **constructor);

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

        SE_stream_set_spatial_constraints,函數(shù)原型如下:

        LONG SE_stream_query(SE_STREAM stream,SHORT

        num_columns,

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

        函數(shù)功能:設(shè)置空間數(shù)據(jù)查詢的屬性條件,參數(shù)意義如下:

        construct屬性查詢數(shù)據(jù)結(jié)構(gòu)

        LONG SE_stream_set_spatial_constraints(SE_STREAM stream,SHORT search_order,

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

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

        具體使用方法如下:

        SE_FILTERfilter;

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

        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");

        //設(shè)置屬性查詢條件

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

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

        //屬性結(jié)果就是返回所有的記錄數(shù)據(jù)

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

        //設(shè)置空間過濾關(guān)系

        strcpy(filter.table,strlyrName);

        strcpy(filter.column, "Shape");

        filter.filter_type = SE_SHAPE_FILTER;

        filter.filter.shape = clipShp;

        filter.truth = TRUE;

        //SM_SC表示待查找的幾何目標包含在結(jié)構(gòu)體的shape幾何對象中

        filter.method = SM_SC ;

        /

        /設(shè)置空間幾何過濾條件

        rc=SE_stream_set_spatial_constraints(stream,

        SE_SPATIAL_FIRST, FALSE, 1,&filter);

        //執(zhí)行查詢,查詢結(jié)果存儲在stream對象里面

        rc = SE_stream_execute(stream);

        //處理獲取的數(shù)據(jù)

        ……

        //關(guān)閉、釋放數(shù)據(jù)流對象

        rc = SE_stream_close(stream,TRUE);

        rc = SE_stream_free(stream);

        //釋放屬性查詢條件結(jié)構(gòu)對象

        free(SQL->where);

        SE_sql_construct_free(SQL);

        4)數(shù)據(jù)對象的訪問

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

        LONG SE_stream_fetch (SE_STREAM stream);

        數(shù)據(jù)集的訪問偽代碼如下:

        while (RC == SE_SUCCESS)

        {

        //獲取查詢結(jié)果,循環(huán)逐一獲取

        RC = SE_stream_fetch(stream);

        If (RC != SE_SUCCESS)

        //錯誤處理

        else

        {

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

        if (rc !=SE_SUCCESS)

        //錯誤處理

        }

        }

        5)處理對象數(shù)據(jù)的釋放

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

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

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

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

        猜你喜歡
        空間數(shù)據(jù)數(shù)據(jù)流對象
        神秘來電
        睿士(2023年2期)2023-03-02 02:01:09
        汽車維修數(shù)據(jù)流基礎(chǔ)(下)
        一種提高TCP與UDP數(shù)據(jù)流公平性的擁塞控制機制
        攻略對象的心思好難猜
        意林(2018年3期)2018-03-02 15:17:24
        基于熵的快速掃描法的FNEA初始對象的生成方法
        元數(shù)據(jù)驅(qū)動的多中心空間數(shù)據(jù)同步方法研究
        區(qū)間對象族的可鎮(zhèn)定性分析
        基于數(shù)據(jù)流聚類的多目標跟蹤算法
        北醫(yī)三院 數(shù)據(jù)流疏通就診量
        基于文件系統(tǒng)的分布式海量空間數(shù)據(jù)高效存儲與組織研究
        人妻仑乱a级毛片免费看| 国产一区二区内射最近人| 亚洲最大视频一区二区三区| 人妻中文字幕在线中文字幕| 国色天香精品一卡2卡3卡4| 丰满多毛少妇做爰视频| 无码一区二区丝袜| 熟妇人妻精品一区二区视频免费的| 中国午夜伦理片| 九九九精品成人免费视频小说| 欧美亚洲h在线一区二区| 亚洲三级香港三级久久| 成人爽a毛片免费视频| 午夜福利电影| 日本嗯啊在线观看| 人妻少妇av中文字幕乱码| 国产精品天堂avav在线| 国产乱子伦精品无码码专区| 亚洲国产高清在线视频| av手机在线观看不卡| 无码国产69精品久久久久孕妇 | 精品视频一区二区三区在线观看 | 性刺激的大陆三级视频| 亚洲成人小说| 日本肥老熟妇在线观看| 蜜桃91精品一区二区三区| 中文www新版资源在线| 亚洲AV永久无码精品导航| 中文字幕一区二区三区亚洲 | 白丝美女扒开内露出内裤视频| 亚洲av无码国产精品色午夜软件| 无遮挡又黄又刺激又爽的视频| 娇柔白嫩呻吟人妻尤物| 成人免费播放视频影院| 亚洲av综合av成人小说| 欧美日韩亚洲成人| 国内激情一区二区视频| 波多野结衣在线播放| 国内精品久久久久久久影视麻豆| 青青草免费高清视频在线观看| 亚洲综合精品亚洲国产成人|