java对sde操作,首先需要下载sde支持的jar包。jpe92_sdk.jar和jsde92_sdk.jar两个包,这两个包可以从安装的目录下找到。
sde是spatial database engine简写,中文全称:空间数据库引擎。
sde是一种客户/服务器软件,可使空间数据在工业标准的数据库管理系统中存储、管理和快速查询检索。把gis数据放在rdbms中,但是一般的rdbms都没有提供gis的数据类型(如点、线、多边形、以及这些feature之间的拓扑关系和投影坐标等相关信息),rdbms只提供了少量的数据类型支持:int,float,double,,blob,long ,char等,一般都是数字,字符串和二进制数据几种。并且rdbms不仅没有提取对gis数据类型的存储,也没有提供对这些基础类型的操作(如:判断包含关系,相邻、相交、求差、距离、最短路径等)
java对sde操作,首先需要下载sde支持的jar包。jpe92_sdk.jar和jsde92_sdk.jar两个包,这两个包可以从安装的目录下找到。
下面是java获的sde的链接代码:
/**
* 连接sde服务
* @return
*/
public seconnection getconnection () {
seconnection conn = null ;
try {
conn = new seconnection(sde_server_ip, sde_prot, sde_datebase_sid, sde_username, sde_password);
} catch (seexception e) {
return null;
}
return conn;
}
对sde数据进行添加,点线面的新增
/**
* 添加资源信息点到sde中
* @param pointbean 坐标点 pojo
* @param tbname 图层名称
* @param string typename 所画的类型 1 点 2 线 3 面
* @return long sde的id
* @throws exception
*/
public long addpointobject(pointbean pointbean, list columnlist, string tablename, string typename) throws exception {
selayer insertlayer = null;
seconnection conn = null;
long intsertrowid = null;
seinsert insert = null;
try {
conn = this.getconnection();
insertlayer = new selayer( conn, tablename, shape);
if (insertlayer == null) {
throw new exception(找不到空间表: + tablename);
}
conn.starttransaction();
int arraylength = columnlist.size() + 1 ;
string[] cols = new string[arraylength];
cols[0] = shape;
for (int i = 0 ;i columnbean columnbean = (columnbean)columnlist.get(i);
cols[i+1] = columnbean.getname();
}
insert = new seinsert(conn);
insert.intotable(insertlayer.getname(), cols);
insert.setwritemode(true);
secoordinatereference coordref = (secoordinatereference) insertlayer.getcoordref();
seshape shape = new seshape(coordref);
if (1.equals(typename)) {
this.addpoint(pointbean, shape);
} else if (2.equals(typename)) {
this.addline(pointbean, shape);
} else if (3.equals(typename)) {
this.addpolygon(pointbean, shape);
}
serow row = insert.getrowtoset();
row.setshape(0, shape);
for (int i = 0 ;i columnbean columnbean = (columnbean)columnlist.get(i);
if (columnbean.gettypeobject() == 1) {
row.setnstring(i+1, string.valueof(columnbean.getvalobject()));
} else if (columnbean.gettypeobject() == 2) {
row.setinteger(i+1, integer.parseint(columnbean.getvalobject().tostring()));
}else if (columnbean.gettypeobject() == 3) {
row.setdouble(i+1, double.parsedouble(columnbean.getvalobject().tostring()));
}
}
insert.execute();
intsertrowid = new long(insert.lastinsertedrowid().longvalue());
conn.committransaction();
} catch (exception ex) {
ex.printstacktrace();
conn.rollbacktransaction();
} finally {
if (insert != null) {
insert.close();
}
if (conn != null) {
conn.close();
}
}
return intsertrowid;
}
sde查询接口实现
/**
* 查询sde
* @param productid 产品id
* @throws seexception
*/
public sequery searchsde (long productid, string tablename) throws seexception {
seconnection conn = getconnection();
selayer layer = new selayer( conn, tablename, shape);
sesqlconstruct sqlconstruct = new sesqlconstruct(layer.getname());
if (productid != null) {
sqlconstruct.setwhere(yid=+productid.intvalue());
}
string[] cols = null;
if (tablename.equals(yu_an_point) || tablename.equals(fang_an_point)) {
cols = new string[4];
cols[0] = new string(objectid);
cols[1] = layer.getspatialcolumn();
cols[2] = new string(name);
cols[3] = new string(imagetype);
} else {
cols = new string[3];
cols[0] = new string(objectid);
cols[1] = layer.getspatialcolumn();
cols[2] = new string(name);
}
system.out.println(cols.length : + cols.length);
sequery query = new sequery(conn, cols, sqlconstruct );
query.preparequery();
query.execute();
return query;
}
sde信息删除操作
