【ArcGIS】ArcSDE SDK For Java二次开发介绍、示例

在一个工作中,遇到了需要java后台来查询ArcGIS 中用到的Oracle数据库空间数据,由于对ArcGIS空间数据首次接触,只知道Oracle可以使用ST_GEOMETRY字段存储,如下图

但是查询时会发现这个ST_GEOMETRY字段会在结果中出现个多个子的字段,对于arcgis地理知识了解甚少,不知道单独查询一个坐标怎么弄了,有些朋友说需要配置监听文件。

不管怎么说,至少参考了一个大牛的文章,http://blog.csdn.net/linghe301/article/details/8058806 根据 ArcSDE For Java的API中,可以对其进行增删改查等操作。

对于ArcSDE for Java的介绍请参考大牛文章,就不重复写了。下面的示例代码中,经过修改,加了一些注释,还是不错的

首先把jsde_sdk.jar、jpe_sdk.jar、concurrent.jar、icu4j_3_2.jar包下载下来导入java工程中即可。四个jar包的下载地址如下:

http://download.csdn.net/detail/xiaokui_wingfly/8032329

具体在查询时实用的常量含义及方法参考官方API解释 

http://help.arcgis.com/en/geodatabase/10.0/sdk/arcsde/api/japi/docs/index.html

package cn.sde.test;  
  
import java.text.SimpleDateFormat;  
import java.util.Date;  
  
import com.esri.sde.sdk.client.SDEPoint;  
import com.esri.sde.sdk.client.SeColumnDefinition;  
import com.esri.sde.sdk.client.SeConnection;  
import com.esri.sde.sdk.client.SeCoordinateReference;  
import com.esri.sde.sdk.client.SeException;  
import com.esri.sde.sdk.client.SeFilter;  
import com.esri.sde.sdk.client.SeInstance;  
import com.esri.sde.sdk.client.SeLayer;  
import com.esri.sde.sdk.client.SeQuery;  
import com.esri.sde.sdk.client.SeQueryInfo;  
import com.esri.sde.sdk.client.SeRelease;  
import com.esri.sde.sdk.client.SeRow;  
import com.esri.sde.sdk.client.SeShape;  
import com.esri.sde.sdk.client.SeShapeFilter;  
import com.esri.sde.sdk.client.SeSqlConstruct;  
import com.esri.sde.sdk.client.SeTable;  
  
public class T {  
  
    private static SeConnection conn = null;  
    private static String server = "172.25.0.253"; // sde服务器  
    private static String instance = "5151"; // sde端口  
    private static String database = "orcl"; // sde数据库  
    private static String username = "sde"; // sde用户名  
    private static String password = "sde"; // sde密码  
  
    // 获得ArcSDE连接  
    private static SeConnection getConn() {  
        if (conn == null) {  
            try {  
                conn = new SeConnection(server, instance, database, username, password);  
            } catch (SeException ex) {  
                ex.printStackTrace();  
            }  
        }  
        return conn;  
    }  
  
    /** 
     * ArcSDE管理 
     */  
    public static void GetArcSDEInfo() {  
        try {  
            SeInstance instance = new SeInstance(server, "5151");  
            SeInstance.SeInstanceStatus status = instance.getStatus();  
            System.out.println("连接数:" + status.getNumConnections());  
            System.out.println("可以连接:" + status.isAccepting());  
  
            System.out.println("------------------------------------------------");  
  
            SeInstance.SeInstanceConfiguration config = instance.getConfiguration();  
            System.out.println("最大连接数:" + config.getMaxConnections());  
  
            System.out.println("------------------------------------------------");  
  
            SeInstance.SeInstanceStats[] stats = instance.getStats();  
            for (int i = 0; i < stats.length; i++) {  
                System.out.println("操作数:" + stats[i].getOperationCount());  
            }  
  
            System.out.println("------------------------------------------------");  
  
            SeInstance.SeInstanceUsers[] users = instance.getUsers();  
            for (int j = 0; j < users.length; j++) {  
                System.out.println("用户名:" + users[j].getUserName());  
                System.out.println("系统名:" + users[j].getSysName());  
                System.out.println("服务器开始时间:" + users[j].getServerStartTime());  
                System.out.println("服务器PID:" + users[j].getServerPid());  
                System.out.println("*****************************");  
            }  
  
            System.out.println("------------------------------------------------");  
            System.out.println("系统名:" + instance.getServerName());  
            System.out.println("------------------------------------------------");  
  
            System.out.println("------------------------------------------------");  
            SeInstance.SeInstanceTableLocks[] tablelocks = instance.getTableLocks();  
            for (int i = 0; i < tablelocks.length; i++) {  
                System.out.println("表级别锁类型:" + tablelocks[i].getLockType());  
                System.out.println("表级别锁PID:" + tablelocks[i].getPid());  
                System.out.println("表级别锁注册ID:" + tablelocks[i].getRegistrationId());  
                System.out.println("*****************************");  
            }  
            System.out.println("------------------------------------------------");  
        } catch (SeException e) {  
            e.printStackTrace();  
        }  
    }  
  
    /** 
     * 空间条件查询 X,Y坐标参数传值 
     */  
    public static void SpatialQuery_Hz(double x, double y) {  
        try {  
            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SS");  
            long startTime = System.currentTimeMillis();  
            Date startDate = new Date(startTime);  
            System.out.println("开始时间:" + formatter.format(startDate));  
  
            String tbname = "EZGISDATA.DCQWG_HB";  
            String[] cols = new String[7];  
            cols[0] = "JDNAME";  
            cols[1] = "JDCODE";  
            cols[2] = "SQNAME";  
            cols[3] = "SQCODE";  
            cols[4] = "WGNAME";  
            cols[5] = "WGCODE";  
            cols[6] = "TYPE";  
            SeConnection conn = getConn();  
            SeLayer layer = new SeLayer(conn, tbname, "SHAPE");  
  
            SeCoordinateReference cr = layer.getCoordRef();  
            SeFilter[] filters = new SeFilter[1];  
            SeShape shape = new SeShape(cr);  
            SDEPoint pt = new SDEPoint(x, y);  
            shape.generatePoint(1, new SDEPoint[] { pt });  
  
            // METHOD_ET_OR_AI, METHOD_ET_OR_II, METHOD_II_OR_ET, METHOD_AI,  
            // METHOD_II, METHOD_AI_NO_ET, METHOD_II_NO_ET,  
            // METHOD_PC, METHOD_PC_NO_ET, METHOD_PIP,  
            SeFilter filter = new SeShapeFilter(tbname, layer.getSpatialColumn(), shape, SeShapeFilter.METHOD_PIP);  
            filters[0] = filter;  
  
            SeSqlConstruct sqlCons = new SeSqlConstruct(tbname);  
            SeQuery query = new SeQuery(conn, cols, sqlCons);  
            query.prepareQuery();  
            query.setSpatialConstraints(SeQuery.SE_ATTRIBUTE_FIRST, false, filters);  
            query.execute();  
            SeRow row = query.fetch();  
            while (row != null) {  
                System.out.println(row.getObject(0).toString() + ", " + row.getObject(2).toString() + ", " + row.getObject(3).toString() + ", " + row.getObject(6).toString());  
                row = query.fetch();  
            }  
  
            long endTime = System.currentTimeMillis();  
            Date endDate = new Date(endTime);  
            System.out.println("结束时间:" + formatter.format(endDate));  
            System.out.println("相差: " + ((endTime - startTime) / 1000) + "秒\n");  
        } catch (Exception ex) {  
            ex.printStackTrace();  
        }  
    }  
  
    /** 
     * 普通查询 
     */  
    public static void CommonQuery() {  
        try {  
            SeConnection conn = getConn();  
            SeTable table = new SeTable(conn, "EZGISDATA.DCQWG_PY");  
            SeColumnDefinition[] tableDef = table.describe();  
            String[] cols = new String[tableDef.length];  
            for (int j = 0; j < cols.length; j++) {  
                cols[j] = tableDef[j].getName();  
            }  
            SeSqlConstruct sqlCons = new SeSqlConstruct("EZGISDATA.DCQWG_PY");  
            SeQuery query = new SeQuery(conn, cols, sqlCons);  
  
            SeQueryInfo queryInfo = new SeQueryInfo();  
            queryInfo.setQueryType(SeQueryInfo.SE_QUERYTYPE_ATTRIBUTE_FIRST);  
            queryInfo.setColumns(cols);  
            queryInfo.setConstruct(sqlCons);  
            query.prepareQueryInfo(queryInfo);  
            query.execute();  
            SeRow row = query.fetch();  
            while (row != null) {  
                System.out.println(row.getObject(0).toString() + " : " + row.getObject(1).toString() + " : " + row.getObject(3).toString() + " : " + row.getObject(4).toString() + " : "  
                        + row.getObject(5).toString() + " : " + row.getObject(6).toString() + " : " + row.getObject(7).toString() + " : " + row.getObject(8).toString());  
                row = query.fetch();  
            }  
        } catch (Exception ex) {  
            ex.printStackTrace();  
        }  
    }  
  
    /** 
     * 属性条件查询 
     */  
    public static void AttributeQuery() {  
        try {  
            String tbname = "EZGISDATA.DCQWG_PY";  
            String[] cols = new String[4];  
            cols[0] = "NEWSQMC";  
            cols[1] = "NEWSQBM";  
            cols[2] = "NEWWGMC";  
            cols[3] = "NEWWGBM";  
            SeConnection conn = getConn();  
            SeSqlConstruct sqlCons = new SeSqlConstruct(tbname);  
            sqlCons.setWhere("JDNAME='和平里'");  
            SeQuery query = new SeQuery(conn, cols, sqlCons);  
  
            query.prepareQuery(cols, sqlCons);  
            query.execute();  
            SeRow row = query.fetch();  
            int reccount = 0;  
            while (row != null) {  
                reccount = reccount + 1;  
                System.out.println(Integer.toString(reccount) + " : " + row.getObject(0).toString() + " : " + row.getObject(1).toString() + " : " + row.getObject(2).toString() + " : "  
                        + row.getObject(3).toString());  
                row = query.fetch();  
            }  
        } catch (Exception ex) {  
            ex.printStackTrace();  
        }  
    }  
  
    /** 
     * 获得ArcSDE版本信息 
     */  
    public static void GetVersion() {  
        SeConnection conn = getConn();  
        SeRelease release = conn.getRelease();  
        System.out.println(release.getBugFix());  
        System.out.println(release.getDesc());  
        System.out.println(release.getRelease());  
        System.out.println(release.getMajor());  
        System.out.println(release.getMinor());  
    }  
  
    public static void main(String[] args) {  
        GetArcSDEInfo();  
        CommonQuery();  
        AttributeQuery();  
        GetVersion();  
        SpatialQuery_Hz(506019.02883, 302758.03546);  
    }  
  
}

结果:打印内容过多,省略内容XXXX字

------------------------------------------------

表级别锁PID:526084

表级别锁注册ID:1966

*****************************

    ....   

1 : JDNAME:东花市 : JDCODE:13 : SQNAME:忠实里社区 : SQCODE:1303 : WGNAME:忠实里社区3号网格 : WGCODE:13033-0152 : TYPE:SG

    .....


未经允许请勿转载:程序喵 » 【ArcGIS】ArcSDE SDK For Java二次开发介绍、示例

点  赞 (0) 打  赏
分享到: