您的位置:首页 > 数据库 > Oracle

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

2013-07-05 09:36 357 查看
de是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的链接代码:

 

[java] 

/**

     * 连接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服务

  * @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数据进行添加,点线面的新增

[java] 

/**

     * 添加资源信息点到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<columnList.size() ; 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<columnList.size() ; 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中

  * @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<columnList.size() ; 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<columnList.size() ; 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查询接口实现

[java]

/**

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

[java]

/**

     * 

     * 删除 通过列对应的值

     * @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(); 

                    } 

                } 

            } 

        } 

    } 

/**

  *

  * 删除 通过列对应的值

  * @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();

     }

    }

   }

  }

 }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java