【ArcGIS/Java】利用ArcGIS的java API連接SDE庫、sql操作

本文主要講解一下怎麼使用ArcGIS的Java API來連接SDE數據庫,以及怎麼實現空間數據的查詢。
前提:
ArcGIS的空間數據庫SDE連接到Oracle的空間數據庫中。
java API使用 arcgis

9.2版:http://edndoc.esri.com/arcsde/9.2/api/japi/docs/overview-summary.html
10.0版:http://help.arcgis.com/en/geodatabase/10.0/sdk/arcsde/api/japi/docs/index.html

1,對於取值的問題
row = query.fetch();//只是取一行數據,因此需要循環取值
while(row!=null) {
//other codes
row = query.fetch()
}

2,對於取哪一列
row.getShape(1);
row.getShape(int rownum)//rownum是指第幾列

3,整個步驟流程

package test;
import java.net.MalformedURLException;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.esri.sde.sdk.client.SeConnection;
import com.esri.sde.sdk.client.SeException;
import com.esri.sde.sdk.client.SeLayer;
import com.esri.sde.sdk.client.SeQuery;
import com.esri.sde.sdk.client.SeRow;
import com.esri.sde.sdk.client.SeShape;
import com.esri.sde.sdk.client.SeSqlConstruct;
import com.esri.sde.sdk.geom.Point;
import db.DBConnectionCreater;
import net.sf.json.JSONArray;
import util.PropertiesUtil;
import entity.TaxiInfoBean;
public class sdetest {

     public JSONArray getLocation(){
           String server=PropertiesUtil.getProperties("Database", "SDEserver");
           String instance=PropertiesUtil.getProperties("Database", "SDEinstance");
           String database=PropertiesUtil.getProperties("Database", "SDEdatabase");
           String user=PropertiesUtil.getProperties("Database", "SDEuser");
           String password=PropertiesUtil.getProperties("Database", "SDEpassword");
           SeConnection seconn=null;
           SeQuery query=null;
           SeRow row=null;
           try {
                seconn=new SeConnection(server,instance,database,user,password);//第一步,連接數據庫
                SeLayer layerzrq = new SeLayer(seconn, "ZDDX_TAXI", "SHAPE");
                String layernamezrq = layerzrq.getName();
                SeSqlConstruct sqlConstruct = new SeSqlConstruct(layernamezrq);//第二步,生成sql
                sqlConstruct.setWhere("class=5 or class=7");//第三步,設置條件
                String[] cols = new String[2];
                cols[0] = new String("NAME");
//            cols[1] = layerzrq.getSpatialColumn();
                cols[1] = new String("SHAPE");
                query = new SeQuery(seconn,cols,sqlConstruct);//第四步,查詢

                query.prepareQuery();
                query.execute();
                row = query.fetch();//第五步,取值
                SeShape shape=null;
                double x,y;
                while (row!=null) {
//                   shape = row.getShape(1).
//                   double x = row.getShape(1).asPoint().generateLabelPoint().getX();//取點座標
//                   double y = row.getShape(1).asPoint().generateLabelPoint().getY();
                     double[][][] coor = row.getShape(1).getAllCoords();//對於任意形狀(點,線,面)三種數據,取座標
                     x = coor[0][0][0];
                     x = coor[0][0][1];
                     String name = row.getString(0);
                     row = query.fetch();
//                   System.out.println(x+","+y);
                }
           } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
           } finally{
                try {
                     query.close();//關閉查詢
                     seconn.close();//關閉連接
                } catch (SeException e) {
                     // TODO Auto-generated catch block
                     e.printStackTrace();
                }
           }
           return null;

     }
}

其中上面的:

       String server=PropertiesUtil.getProperties("Database", "SDEserver");
       String instance=PropertiesUtil.getProperties("Database", "SDEinstance");
       String database=PropertiesUtil.getProperties("Database", "SDEdatabase");
       String user=PropertiesUtil.getProperties("Database", "SDEuser");
       String password=PropertiesUtil.getProperties("Database", "SDEpassword");

這裏的PropertiesUtil.getProperties()方法是筆者自己寫的,讀者也可以自己寫一部分。
這幾個參數配置格式示例如下:

SDEserver=192.168.106.109
SDEinstance=5151
SDEdatabase=orcl
SDEuser=sde
SDEpassword=password

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章