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包下载下来导入javaproject中就可以。四个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
.....
ArcSDE SDK For Java二次开发介绍、演示样例的更多相关文章
- Java连接redis的使用演示样例
Java连接redis的使用演示样例 Redis是开源的key-value存储工具,redis通经常使用来存储结构化的数据,由于redis的key能够包括String.hash.listset和sor ...
- java文件夹相关操作 演示样例代码
java文件夹相关操作 演示样例代码 package org.rui.io; import java.io.File; import java.io.FilenameFilter; import ja ...
- Java 嵌套类和内部类演示样例<二>
嵌套类(nested class)是一个在还有一个类或接口内部声明的类. 嵌套类分为两种:静态内部类(static inner class)和非静态嵌套类(non-static nested clas ...
- Java 嵌套类和内部类演示样例<三>
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-s ...
- java 泛型深入之Set有用工具 各种集合泛型深入使用演示样例,匿名内部类、内部类应用于泛型探讨
java 泛型深入之Set有用工具 各种集合泛型深入使用演示样例,匿名内部类.内部类应用于泛型探讨 //Sets.java package org.rui.generics.set; import j ...
- java 又一次抛出异常 相关处理结果演示样例代码
java 又一次抛出异常 相关处理结果演示样例代码 package org.rui.ExceptionTest; /** * 又一次抛出异常 * 在某些情况下,我们想又一次掷出刚才产生过的违例,特别是 ...
- 【Unity 3D 游戏开发】Unity3D 入门 - 工作区域介绍 与 入门演示样例
一. 工作区域具体解释 1. Scence视图 (场景设计面板) scence视图简单介绍 : 展示创建的游戏对象, 能够对全部的游戏对象进行 移动, 操作 和 放置; -- 演示样例 : 创建一个球 ...
- HBase总结(十一)hbase Java API 介绍及使用演示样例
几个相关类与HBase数据模型之间的相应关系 java类 HBase数据模型 HBaseAdmin 数据库(DataBase) HBaseConfiguration HTable 表(Table) H ...
- [b0010] windows 下 eclipse 开发 hdfs程序样例 (二)
目的: 学习windows 开发hadoop程序的配置 相关: [b0007] windows 下 eclipse 开发 hdfs程序样例 环境: 基于以下环境配置好后. [b0008] Window ...
随机推荐
- iOS发展 ---- 至iPhone 6自适应布局设计 Auto Layout
Apple从iOS 6增加了Auto Layout后開始就比較委婉的開始鼓舞.建议开发人员使用自适应布局,可是到眼下为止,我感觉大多数开发人员一直在回避这个问题,无论是不是因为历史原因造成的,至少他们 ...
- [POJ 3735] Training little cats (结构矩阵、矩阵高速功率)
Training little cats Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 9613 Accepted: 2 ...
- TSL230选型
tsl230是一种可以直接将光强转化成频率值的器件.详细原理就不介绍了,数据手冊里写的都非常清楚,230系列包括非常多种,主要为下面四类:TSL230,TSL230A,TSL230B系列:TSL230 ...
- 2012Android开发热门资料(110个)
下载中心完整附件下载地址:http://down.51cto.com/data/412494 附件内容部分预览: 专题推荐: Android控:平板电脑HD精品游戏软件合集(共32个) http:// ...
- Tier和Layer
在实际开发工作中.我们经常听到"架构设计"和"架构师"这种名词,它并不新奇和神奇,可是却非常少有人对"架构"有全面的了解和认识.更谈不上掌握 ...
- 配置JVM内存 查看内存工具
一.配置JVM内存 1.配置JVM内存的參数有四个: -XmxJavaHeap最大值.默认值为物理内存的1/4.最佳设值应该视物理内存大小及计算机内其它内存开销而定. -XmsJavaHeap初始值, ...
- 抢车位中的排名bug(比較使用了无符号数)
昨天把这个发在了qzone,想来还是怪怪的,还是转过来不吧,纯当发现了一个虫子,玩笑一下.只是csdn如今不能贴图,挺郁闷的,原文在http://user.qzone.qq.com/110907073 ...
- 不用Root权限获取已经安装的Apk安装包
在安卓设备上安装的apk都会被保留一份在/data/app目录下,但是该目录对于普通用户来说只有可执行权限,是无法访问的. 但是其子文件具有可读权限. 意思也就说我们直接去查看/data/app这个目 ...
- 努比亚 Z5 mini刷机包 omni4.4.2改动V4.0 自用版 精简 MIUI特效
ROM介绍: 第一版: 1.基于lwang适配的omni4.4.2第二版改动,少量精简改动 2.设置加入"自启项管理",体验更快.更顺滑 3.替换特效为XUI特效 4.改动host ...
- hdu 4464 水
http://acm.hdu.edu.cn/showproblem.php?pid=4464 现场赛总会有水题,这就是最水的一道,预计也就是能当高校的上机题,保研用,呵呵~~~ #include &l ...