<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 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    ArcSDE Java API

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

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

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

    Client包提供了實現ArcSDE服務器相關的功能的類。利用這個包建立的應用程序,能建立一個到ArcSDE實例的連接,查詢一個層,或者與ArcSDE服務器進行通訊。

    Geometry包提供了實現OGC(開源GIS)幾何學功能接口的類。

    Projection包提供了定義一個坐標系統與在不同坐標系統中轉換的功能的類。

    下面的主題對ArcSDE Java API的功能進行了大體的介紹。

    設置API

    ArcSDE客戶端安裝的時候安裝了下列文件:

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

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

    3.       concurrent.jar – 這個文件在使用PeCSTransformationX()時必須要用到, PeCSTransformationX()的功能是轉換坐標系統。

    4.       sdejavautil.dll (Windows平臺下) - 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中鏈接到,這個文檔可以在ArcSDE客戶端安裝的CD上以及ESRI的技術支持網站中找到。

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

    連接到ArcSDE

    使用ArcSDE軟件的第一步是建立一個ArcSDE服務器連接。SeConnection類就是用來建立一個連接的。下面是一個建立連接的例子:

    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參數是ArcSDE服務器的端口號。例如:5151,而不是esri_sde。

     

     連接與數據庫信息

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

        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對象包含了圖層的所有相關信息ArcSDE Java API函數參考中還列出了其他的取得ArcSDE layer的屬性的方法.

    Fetching data

    數據從一張表或者一個layer中查詢得出。SeQuery對象則是用于準備并執行一個查詢操作,建立并執行一個查詢的步驟如下:

          1.建立一個SeSqlConstruct對象,這個對象中有想要查詢的table/layer的名字。你也可以在SeSqlConstruct的構造函數中指定一個where查詢語句。

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

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

          2.創建一個String數組以存儲要查詢的表的列名。

                String[] cols = new String[2];

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

                cols[1] = layer.getSpatialColumn();

          3.定義,準備并執行查詢。

                // Create a query stream between the client and server

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

                query.prepareQuery();

                query.execute();

          4.取查詢結果的第一行存入SeRow對象中。

                SeRow row = query.fetch();

          5.取得SeRow的列結構。

                 // Get the definitions of all the columns retrieved

                SeColumnDefinition[] colDefs = SeRow.getColumns();

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

                //獲取第一列的數據類型。

                int colNum = 0;

                int dataType = colDefs[colNum].getType;

                //假定數據類型只有StringShape兩種。

                //可以自己添加一些語句以支持ArcSDE列的所有數據類型。

                // ( 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);

                      //調用一個函數以獲取Shape的屬性。

                      break;

                }

         

          7.關閉查詢。

                query.close();

         

    注意:為了取出查詢結果所有的行,可以反復的調用query.fetch直至SeRow對象返回為空值為止。

    插入數據

    可以使用SeInsert類來往一張表或者圖層中插入數據。插入數據的步驟如下:

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

                   String[] cols = new String[2];

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

                   cols[1] = layer.getSpatialColumn();

          2.使用當前的連接句柄Connection conn,創建一個SeInsert對象.這將建立一個從客戶端到服務器的Insert數據流(Stream)。然后根據表或圖層的列名來插入數據,設置SeInsert對象為可寫模式(setWriteMode)

                   SeInsert insert = new SeInsert(conn);

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

                   insert.setWriteMode(true);

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

                   SeRow row = insert.getRowToSet();

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

                   row.setShape(1,shape);

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

                   insert.execute();

                   insert.close();

              

    注意:數據只能插入到由用戶創建并維護的列中,如果某個列被注冊為

    SE_REGISTRATION_ROW_ID_COLUMN_TYPE_SDE

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

    主站蜘蛛池模板: 在线观看日本亚洲一区| 久久受www免费人成_看片中文| 亚洲字幕AV一区二区三区四区| 国产∨亚洲V天堂无码久久久| 又粗又黄又猛又爽大片免费| 欧美a级在线现免费观看| 久久免费视频精品| 国产A∨免费精品视频| 国产成人亚洲精品播放器下载| 亚洲入口无毒网址你懂的| 久久亚洲sm情趣捆绑调教| 中文字幕亚洲乱码熟女一区二区| 国产免费看插插插视频| 在线观看无码的免费网站| 特级做A爰片毛片免费69| 国产成人yy免费视频| 一级毛片成人免费看免费不卡| 中文在线观看国语高清免费| 有色视频在线观看免费高清在线直播| 亚洲国产精品成人午夜在线观看| 亚洲人成免费电影| 亚洲av无码一区二区三区天堂古代| 久久亚洲私人国产精品| 亚洲AV永久无码精品一百度影院| 亚洲精品国产精品乱码在线观看 | 亚洲日本在线观看网址| 亚洲人成网址在线观看 | 中文字幕免费观看全部电影| 杨幂最新免费特级毛片| 水蜜桃视频在线观看免费| 无码毛片一区二区三区视频免费播放 | 亚洲jjzzjjzz在线播放| 亚洲中文久久精品无码1| 亚洲乱码卡一卡二卡三| 91在线亚洲综合在线| 亚洲精品亚洲人成在线| 国产产在线精品亚洲AAVV| 四虎影视在线看免费观看| sss在线观看免费高清| 中国一级毛片视频免费看| 免费无码av片在线观看|