zoukankan      html  css  js  c++  java
  • java操作oracle空间信息介绍

    转自:http://www.cdtarena.com/javapx/201307/9088.html

    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的链接代码:

     

    [java] view plaincopyprint?
    01./** 
    02.     * 连接sde服务 
    03.     * @return 
    04.     */  
    05.    public  SeConnection getConnection () {  
    06.        SeConnection conn = null ;  
    07.        try {  
    08.            conn = new SeConnection(SDE_SERVER_IP, SDE_PROT, SDE_DATEBASE_SID, SDE_USERNAME, SDE_PASSWORD);   
    09.        } catch (SeException e) {  
    10.            return null;  
    11.        }  
    12.        return conn;  
    13.    }  

    对sde数据进行添加,点线面的新增 


    [java] view plaincopyprint?
    01./** 
    02.     * 添加资源信息点到sde中 
    03.     * @param pointBean 坐标点 POJO 
    04.     * @param tbName    图层名称 
    05.     * @param String typeName 所画的类型 1 点 2 线 3 面 
    06.     * @return   Long   sde的id 
    07.     * @throws Exception 
    08.     */  
    09.    public Long addPointObject(PointBean pointBean, List columnList, String tableName, String typeName) throws Exception {  
    10.        SeLayer insertLayer = null;  
    11.        SeConnection conn = null;  
    12.        Long intsertRowID = null;  
    13.        SeInsert insert = null;  
    14.        try {  
    15.            conn = this.getConnection();  
    16.            insertLayer = new SeLayer( conn,  tableName, "SHAPE");  
    17.            if (insertLayer == null) {  
    18.                throw new Exception("找不到空间表:" + tableName);  
    19.            }  
    20.            conn.startTransaction();  
    21.            int arrayLength = columnList.size() + 1 ;  
    22.            String[] cols = new String[arrayLength];  
    23.            cols[0] = "SHAPE";  
    24.            for (int i = 0 ;i<columnList.size() ; i++) {  
    25.                ColumnBean columnBean = (ColumnBean)columnList.get(i);  
    26.                cols[i+1] = columnBean.getName();  
    27.            }  
    28.            insert = new SeInsert(conn);  
    29.            insert.intoTable(insertLayer.getName(), cols);  
    30.            insert.setWriteMode(true);  
    31.            SeCoordinateReference coordref = (SeCoordinateReference) insertLayer.getCoordRef();  
    32.            SeShape shape = new SeShape(coordref);  
    33.              
    34.            if ("1".equals(typeName)) {  
    35.                this.addPoint(pointBean, shape);  
    36.            } else if ("2".equals(typeName)) {  
    37.                this.addLine(pointBean, shape);  
    38.            } else if ("3".equals(typeName)) {  
    39.                this.addPolygon(pointBean, shape);  
    40.            }  
    41.            SeRow row = insert.getRowToSet();  
    42.            row.setShape(0, shape);  
    43.            for (int i = 0 ;i<columnList.size() ; i++) {  
    44.                ColumnBean columnBean = (ColumnBean)columnList.get(i);  
    45.                if (columnBean.getTypeObject() == 1) {  
    46.                    row.setNString(i+1, String.valueOf(columnBean.getValObject()));  
    47.                } else if (columnBean.getTypeObject() == 2) {  
    48.                    row.setInteger(i+1, Integer.parseInt(columnBean.getValObject().toString()));  
    49.                }else if (columnBean.getTypeObject() == 3) {  
    50.                    row.setDouble(i+1, Double.parseDouble(columnBean.getValObject().toString()));  
    51.                }   
    52.            }  
    53.            insert.execute();  
    54.            intsertRowID = new Long(insert.lastInsertedRowId().longValue());  
    55.            conn.commitTransaction();  
    56.        } catch (Exception ex) {  
    57.            ex.printStackTrace();  
    58.            conn.rollbackTransaction();  
    59.        } finally {  
    60.            if (insert != null) {  
    61.                insert.close();  
    62.            }  
    63.            if (conn != null) {  
    64.                conn.close();  
    65.            }  
    66.        }  
    67.        return intsertRowID;  
    68.    }  

    sde查询接口实现 


    [java] view plaincopyprint?
    01./** 
    02.     * 查询sde 
    03.     * @param productId 产品id 
    04.     * @throws SeException 
    05.     */  www.cdtarena.com
    06.    public SeQuery searchSde (Long productId, String tableName) throws SeException {  
    07.        SeConnection conn = getConnection();  
    08.        SeLayer layer = new SeLayer( conn,  tableName, "SHAPE");  
    09.        SeSqlConstruct sqlConstruct = new SeSqlConstruct(layer.getName());  
    10.        if (productId != null) {  
    11.            sqlConstruct.setWhere("yid="+productId.intValue());  
    12.        }  
    13.        String[] cols = null;  
    14.        if (tableName.equals("YU_AN_POINT") || tableName.equals("FANG_AN_POINT")) {  
    15.            cols = new String[4];  
    16.            cols[0] = new String("OBJECTID");  
    17.            cols[1] = layer.getSpatialColumn();  
    18.            cols[2] = new String("NAME");  
    19.            cols[3] = new String("IMAGETYPE");  
    20.        } else {  
    21.            cols = new String[3];  
    22.            cols[0] = new String("OBJECTID");  
    23.            cols[1] = layer.getSpatialColumn();  
    24.            cols[2] = new String("NAME");  
    25.        }  
    26.        System.out.println("cols.length : " + cols.length);  
    27.        SeQuery query = new SeQuery(conn, cols, sqlConstruct );  
    28.        query.prepareQuery();  
    29.        query.execute();  
    30.        return query;  
    31.    }  

    SDE信息删除操作 


    [java] view plaincopyprint?
    01./** 
    02.     *  
    03.     * 删除 通过列对应的值 
    04.     * @param id     值 
    05.     * @param column 列  
    06.     * @param tbName 表名 
    07.     * @throws SeException 
    08.     */  
    09.     public void deletePointObject(String id, String column, String tbName) throws SeException {  
    10.        SeConnection conn = null;  
    11.        SeLayer layer = null;  
    12.        SeDelete delete = null;  
    13.        try {  
    14.            conn = this.getConnection();  
    15.            layer = new SeLayer(conn, tbName, "SHAPE"); // 得到对应图层   
    16.            if (layer == null) {  
    17.                throw new Exception("找不到空间表:" + tbName);  
    18.            }  
    19.            conn.startTransaction();  
    20.            delete = new SeDelete(conn);  
    21.            delete.fromTable(layer.getName(), column + "='" + id+"'");  
    22.            conn.commitTransaction();  
    23.        } catch (Exception ex) {  
    24.            conn.rollbackTransaction();  
    25.        } finally {  
    26.            if (delete != null) {  
    27.                try {  
    28.                    delete.close();  
    29.                } catch (SeException e) {  
    30.                    e.printStackTrace();  
    31.                    throw e;  
    32.                } finally {  
    33.                    if (conn != null) {  
    34.                        conn.close();  
    35.                    }  
    36.                }  
    37.            }  
    38.        }  
    39.    }  

     

     

  • 相关阅读:
    循序渐进学Python 1 安装与入门
    常用yum命令小结
    为CentOS配置网易163的yum源
    PHP合并数组+与array_merge的区别
    让Docker功能更强大的10个开源工具
    Docker入门系列8
    Docker入门系列7 动态映射端口port mapping
    e 的由来
    ROS教程5 使用串口
    1 ROS+ 使用ORB_SLAM2进行全场定位
  • 原文地址:https://www.cnblogs.com/cdtarena/p/3174047.html
Copyright © 2011-2022 走看看