java sde_Java操作Oracle空间信息介绍(SDE)

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信息删除操作

/**

*

* 删除 通过列对应的值

* @param id    值

* @param column 列

* @param tbName 表名

* @throws SeException

*/

public void deletePointObject(String id, String column, String tbName) throws SeException {

SeConnection conn = null;

SeLayer layer = null;

SeDelete delete = null;

try {

conn = this.getConnection();

layer = new SeLayer(conn, tbName, "SHAPE"); // 得到对应图层

if (layer == null) {

throw new Exception("找不到空间表:" + tbName);

}

conn.startTransaction();

delete = new SeDelete(conn);

delete.fromTable(layer.getName(), column + "='" + id+"'");

conn.commitTransaction();

} catch (Exception ex) {

conn.rollbackTransaction();

} finally {

if (delete != null) {

try {

delete.close();

} catch (SeException e) {

e.printStackTrace();

throw e;

} finally {

if (conn != null) {

conn.close();

}

}

}

}

}

0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值