您的位置:首页 > 编程语言 > Java开发

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

2017-07-31 14:11 435 查看
本文主要讲解一下怎么使用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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java oracle arcgis