<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 310, comments - 6939, trackbacks - 0, articles - 3
      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    ArcSDE Java API

    Posted on 2009-05-07 11:39 詩(shī)特林 閱讀(2141) 評(píng)論(0)  編輯  收藏 所屬分類: GIS

    API:http://edndoc.esri.com/arcsde/9.2/api/japi/docs/index.html
    介紹

    ArcSDE Java API提供了一個(gè)開(kāi)放的、高層次的編程接口,以處理與分析空間信息。它包含了三個(gè)java包:Client包、Geometry包、以及Projection包。

    Client包提供了實(shí)現(xiàn)ArcSDE服務(wù)器相關(guān)的功能的類。利用這個(gè)包建立的應(yīng)用程序,能建立一個(gè)到ArcSDE實(shí)例的連接,查詢一個(gè)層,或者與ArcSDE服務(wù)器進(jìn)行通訊。

    Geometry包提供了實(shí)現(xiàn)OGC(開(kāi)源GIS)幾何學(xué)功能接口的類。

    Projection包提供了定義一個(gè)坐標(biāo)系統(tǒng)與在不同坐標(biāo)系統(tǒng)中轉(zhuǎn)換的功能的類。

    下面的主題對(duì)ArcSDE Java API的功能進(jìn)行了大體的介紹。

    設(shè)置API

    ArcSDE客戶端安裝的時(shí)候安裝了下列文件:

    1.      jsde90_sdk.jar- 包含了ArcSDE客戶端, 幾何學(xué)功能以及SG Java API的類文件。

    2.       jpe90_sdk.jar – 包含了ArcSDE Projection Engine Java API的類文件。

    3.       concurrent.jar – 這個(gè)文件在使用PeCSTransformationX()時(shí)必須要用到, PeCSTransformationX()的功能是轉(zhuǎn)換坐標(biāo)系統(tǒng)。

    4.       sdejavautil.dll (Windows平臺(tái)下) - contains the native code portion of the com.esri.sde.sdk.client.SeInstance start function.

    5.       libsdejavautil.so (Unix platforms only, libsdejavautil.sl on HP-UX) - contains the native code portion of the com.esri.sde.sdk.client.SeInstance start function.

    Java Doc(HTML格式的API功能參考文檔)可以在ArcSDE Developer Help中鏈接到,這個(gè)文檔可以在ArcSDE客戶端安裝的CD上以及ESRI的技術(shù)支持網(wǎng)站中找到。

    要建立一個(gè)使用ArcSDE java API的應(yīng)用程序,你必須要在系統(tǒng)中安裝Java 2 Standard Edition SDK,1.4.0版本以上。你還必須在你的CLASSPATH環(huán)境變量中加上jsde90_sdk.jar, jpe90_sdk.jar and concurrent.jar的文件路徑。如果你還要使用到com.esri.sde.sdk.client.SeInstanceStart 函數(shù),你還要往你的系統(tǒng)路徑(Windows平臺(tái) system path;所有的Unix平臺(tái)system library path)中添加sdejavautil library

    連接到ArcSDE

    使用ArcSDE軟件的第一步是建立一個(gè)ArcSDE服務(wù)器連接。SeConnection類就是用來(lái)建立一個(gè)連接的。下面是一個(gè)建立連接的例子:

    public static void main (String args[])throws Exception {
            SeConnection conn = null;
            String server     = “sdeserver”;
            int instance      = 5151;
            String database   = “sdedb”;
            String user       = “user”;
            String password   = “passwd”;
            try {
                conn = new SeConnection(server, instance, database, user, password); 
            }catch (SeException e) {
                e.printStackTrace();
            }
        }

    注意:instance參數(shù)是ArcSDE服務(wù)器的端口號(hào)。例如:5151,而不是esri_sde。

     

     連接與數(shù)據(jù)庫(kù)信息

    SeConnection類還提供了取得ArcSDE服務(wù)器信息的方法,這些信息包括:服務(wù)器的版本以及連接的信息。使用SeConnection類還可以取得存儲(chǔ)在RDBMS上的數(shù)據(jù)的相關(guān)信息。下面的例子展示了如何取得存儲(chǔ)與ArcSDE數(shù)據(jù)庫(kù)內(nèi)的的圖層列表信息(假設(shè)連接已經(jīng)建立)。

        Vector layerList = conn.getLayers();
        for( int index = 0 ; index < layerList.size() ; index++ ) {
            SeLayer layer = (SeLayer)layerList.elementAt(index);
            // Displays the layer’s name
            System.out.println( layer.getName() );
            // Displays the layer’s ID
            System.out.println( layer.getID().longValue() );
            // Displays the layer’s spatial column name
            System.out.println( layer.getSpatialColumn() );
        }

    SeLayer對(duì)象包含了圖層的所有相關(guān)信息ArcSDE Java API函數(shù)參考中還列出了其他的取得ArcSDE layer的屬性的方法.

    Fetching data

    數(shù)據(jù)從一張表或者一個(gè)layer中查詢得出。SeQuery對(duì)象則是用于準(zhǔn)備并執(zhí)行一個(gè)查詢操作,建立并執(zhí)行一個(gè)查詢的步驟如下:

          1.建立一個(gè)SeSqlConstruct對(duì)象,這個(gè)對(duì)象中有想要查詢的table/layer的名字。你也可以在SeSqlConstruct的構(gòu)造函數(shù)中指定一個(gè)where查詢語(yǔ)句。

                SeLayer layer = new SeLayer( conn, layerName, spatialColumn );

                SeSqlConstruct sqlConstruct = new SeSqlConstruct( layer.getName() );

          2.創(chuàng)建一個(gè)String數(shù)組以存儲(chǔ)要查詢的表的列名。

                String[] cols = new String[2];

                cols[0] = new String("ColumnOneName");

                cols[1] = layer.getSpatialColumn();

          3.定義,準(zhǔn)備并執(zhí)行查詢。

                // Create a query stream between the client and server

                SeQuery query = new SeQuery( conn, cols, sqlConstruct );

                query.prepareQuery();

                query.execute();

          4.取查詢結(jié)果的第一行存入SeRow對(duì)象中。

                SeRow row = query.fetch();

          5.取得SeRow的列結(jié)構(gòu)。

                 // Get the definitions of all the columns retrieved

                SeColumnDefinition[] colDefs = SeRow.getColumns();

          6.先獲取第一列的數(shù)據(jù)類型,然后獲取該單元上的數(shù)據(jù)。

                //獲取第一列的數(shù)據(jù)類型。

                int colNum = 0;

                int dataType = colDefs[colNum].getType;

                //假定數(shù)據(jù)類型只有StringShape兩種。

                //可以自己添加一些語(yǔ)句以支持ArcSDE列的所有數(shù)據(jù)類型。

                // ( See Working with Layers Example )

                switch( dataType ) {

                case SeColumnDefinition.TYPE_STRING:

                      System.out.println(colDef.getName()+ row.getString(colNum));

                      break;

                case SeColumnDefinition.TYPE_SHAPE:

                      System.out.println(colDef.getName() );

                      SeShape shape = row.getShape(colNum);

                      //調(diào)用一個(gè)函數(shù)以獲取Shape的屬性。

                      break;

                }

         

          7.關(guān)閉查詢。

                query.close();

         

    注意:為了取出查詢結(jié)果所有的行,可以反復(fù)的調(diào)用query.fetch直至SeRow對(duì)象返回為空值為止。

    插入數(shù)據(jù)

    可以使用SeInsert類來(lái)往一張表或者圖層中插入數(shù)據(jù)。插入數(shù)據(jù)的步驟如下:

          1. 建立一個(gè)String對(duì)象,以存儲(chǔ)要添加數(shù)據(jù)的表的列名。注意數(shù)組索引值;這些索引值將在SeRow.set*中使用到。String類型的列的索引值是0,而Shape類型的列的索引值是1.

                   String[] cols = new String[2];

                   cols[0] = new String("ColumnOneName");

                   cols[1] = layer.getSpatialColumn();

          2.使用當(dāng)前的連接句柄Connection conn,創(chuàng)建一個(gè)SeInsert對(duì)象.這將建立一個(gè)從客戶端到服務(wù)器的Insert數(shù)據(jù)流(Stream)。然后根據(jù)表或圖層的列名來(lái)插入數(shù)據(jù),設(shè)置SeInsert對(duì)象為可寫(xiě)模式(setWriteMode)

                   SeInsert insert = new SeInsert(conn);

                   insert.intoTable(layer.getName(),cols);

                   insert.setWriteMode(true);

          3.獲取SeInsert對(duì)象中將要添加的SeRow對(duì)象。然后設(shè)置要插入的數(shù)據(jù),這一步用到SeRow.set*方法。利用第一步中確定的索引值來(lái)作為set*方法中的columnPosition參數(shù)。

                   SeRow row = insert.getRowToSet();

                   row.setString(0, "Shape Number One");

                   row.setShape(1,shape);

          4.調(diào)用SeInsert對(duì)象的execute()方法,將前面設(shè)置好的SeRow對(duì)象插入到圖層中。最后關(guān)閉Insert數(shù)據(jù)流(Stream)結(jié)束這次插入的操作。如果不再使用到連接句柄Connection conn,也順便把連接關(guān)閉。

                   insert.execute();

                   insert.close();

              

    注意:數(shù)據(jù)只能插入到由用戶創(chuàng)建并維護(hù)的列中,如果某個(gè)列被注冊(cè)為

    SE_REGISTRATION_ROW_ID_COLUMN_TYPE_SDE

    則這個(gè)列的值將有ArcSDE自動(dòng)生成并插入,另外object idArcCatalog建立一張表或者Feature class的時(shí)候就生成了,由ArcSDE維護(hù),用戶不能插入,刪除或者修改這一列中的值。

    主站蜘蛛池模板: 在线播放免费播放av片| 老司机69精品成免费视频| 亚洲成在人线aⅴ免费毛片| 亚洲依依成人亚洲社区| 欧洲 亚洲 国产图片综合| 在线亚洲午夜片AV大片| 亚洲午夜精品一区二区麻豆| 亚洲深深色噜噜狠狠网站| 亚洲色偷偷综合亚洲av78| 亚洲精品无码久久久久APP| 国产AV无码专区亚洲AV麻豆丫| 亚洲AV成人片无码网站| 四虎成人精品国产永久免费无码| 免费精品国产自产拍在线观看 | 亚洲乱码日产一区三区| 国产V亚洲V天堂A无码| 亚洲av不卡一区二区三区| 亚洲成人福利在线| 亚洲精品无码av片| 日韩免费码中文在线观看| a级毛片无码免费真人久久| 84pao强力永久免费高清| 国产一精品一AV一免费孕妇| 国产黄色片在线免费观看| 亚洲中久无码不卡永久在线观看| 亚洲人成网亚洲欧洲无码久久| 亚洲精品成人av在线| 成人亚洲国产va天堂| 四虎成人精品国产永久免费无码| 久久精品免费观看| 美女视频黄的全免费视频| 免费a级黄色毛片| 亚洲大尺度无码专区尤物| 亚洲xxxxxx| 春意影院午夜爽爽爽免费| 日本亚洲欧洲免费天堂午夜看片女人员| 日本人的色道免费网站| 国产乱弄免费视频| 久久亚洲一区二区| 亚洲精品国产首次亮相| 97在线免费视频|