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

来源:互联网 发布:caffe windows github 编辑:程序博客网 时间:2024/06/06 04:38

本文主要讲解一下怎么使用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