- 浏览: 229974 次
- 性别:
- 来自: beijing
文章分类
API:http://edndoc.esri.com/arcsde/9.2/api/japi/docs/index.html
介绍
ArcSDE Java API提供了一个开放的、高层次的编程接口,以处理与分析空间信息。它包含了三个java包:Client包、Geometry包、以及Projection包。
Client包提供了实现ArcSDE服务器相关的功能的类。利用这个包建立的应用程序,能建立一个到ArcSDE实例的连接,查询一个层,或者与ArcSDE服务器进行通讯。
Geometry包提供了实现OGC(开源GIS)几何学功能接口的类。
Projection包提供了定义一个坐标系统与在不同坐标系统中转换的功能的类。
下面的主题对ArcSDE Java API的功能进行了大体的介绍。
设置API
在ArcSDE客户端安装的时候安装了下列文件:
1. jsde90_sdk.jar- 包含了ArcSDE客户端, 几何学功能以及SG Java API的类文件。
2. jpe90_sdk.jar – 包含了ArcSDE Projection Engine Java API的类文件。
3. concurrent.jar – 这个文件在使用PeCSTransformationX()时必须要用到, PeCSTransformationX()的功能是转换坐标系统。
4. sdejavautil.dll (Windows平台下) - contains the native code portion of the com.esri.sde.sdk.client.SeInstance start function.
5. libsdejavautil.so (Unix platforms only, libsdejavautil.sl on HP-UX) - contains the native code portion of the com.esri.sde.sdk.client.SeInstance start function.
Java Doc(HTML格式的API功能参考文档)可以在ArcSDE Developer Help中链接到,这个文档可以在ArcSDE客户端安装的CD上以及ESRI的技术支持网站中找到。
要建立一个使用ArcSDE java API的应用程序,你必须要在系统中安装Java 2 Standard Edition SDK,1.4.0版本以上。你还必须在你的CLASSPATH环境变量中加上jsde90_sdk.jar, jpe90_sdk.jar and concurrent.jar的文件路径。如果你还要使用到com.esri.sde.sdk.client.SeInstance的Start 函数,你还要往你的系统路径(Windows平台 system path;所有的Unix平台system library path)中添加sdejavautil library。
连接到ArcSDE
使用ArcSDE软件的第一步是建立一个ArcSDE服务器连接。SeConnection类就是用来建立一个连接的。下面是一个建立连接的例子:
public static void main (String args[])throws Exception {
SeConnection conn = null;
String server = “sdeserver”;
int instance = 5151;
String database = “sdedb”;
String user = “user”;
String password = “passwd”;
try {
conn = new SeConnection(server, instance, database, user, password);
}catch (SeException e) {
e.printStackTrace();
}
}
注意:instance参数是ArcSDE服务器的端口号。例如:5151,而不是esri_sde。
连接与数据库信息
SeConnection类还提供了取得ArcSDE服务器信息的方法,这些信息包括:服务器的版本以及连接的信息。使用SeConnection类还可以取得存储在RDBMS上的数据的相关信息。下面的例子展示了如何取得存储与ArcSDE数据库内的的图层列表信息(假设连接已经建立)。
Vector layerList = conn.getLayers();
for( int index = 0 ; index < layerList.size() ; index++ ) {
SeLayer layer = (SeLayer)layerList.elementAt(index);
// Displays the layer’s name
System.out.println( layer.getName() );
// Displays the layer’s ID
System.out.println( layer.getID().longValue() );
// Displays the layer’s spatial column name
System.out.println( layer.getSpatialColumn() );
}
SeLayer对象包含了图层的所有相关信息ArcSDE Java API函数参考中还列出了其他的取得ArcSDE layer的属性的方法.
Fetching data
数据从一张表或者一个layer中查询得出。SeQuery对象则是用于准备并执行一个查询操作,建立并执行一个查询的步骤如下:
1.建立一个SeSqlConstruct对象,这个对象中有想要查询的table/layer的名字。你也可以在SeSqlConstruct的构造函数中指定一个where查询语句。
SeLayer layer = new SeLayer( conn, layerName, spatialColumn );
SeSqlConstruct sqlConstruct = new SeSqlConstruct( layer.getName() );
2.创建一个String数组以存储要查询的表的列名。
String[] cols = new String[2];
cols[0] = new String("ColumnOneName");
cols[1] = layer.getSpatialColumn();
3.定义,准备并执行查询。
// Create a query stream between the client and server
SeQuery query = new SeQuery( conn, cols, sqlConstruct );
query.prepareQuery();
query.execute();
4.取查询结果的第一行存入SeRow对象中。
SeRow row = query.fetch();
5.取得SeRow的列结构。
// Get the definitions of all the columns retrieved
SeColumnDefinition[] colDefs = SeRow.getColumns();
6.先获取第一列的数据类型,然后获取该单元上的数据。
//获取第一列的数据类型。
int colNum = 0;
int dataType = colDefs[colNum].getType;
//假定数据类型只有String和Shape两种。
//可以自己添加一些语句以支持ArcSDE列的所有数据类型。
// ( See Working with Layers Example )
switch( dataType ) {
case SeColumnDefinition.TYPE_STRING:
System.out.println(colDef.getName()+ row.getString(colNum));
break;
case SeColumnDefinition.TYPE_SHAPE:
System.out.println(colDef.getName() );
SeShape shape = row.getShape(colNum);
//调用一个函数以获取Shape的属性。
break;
}
7.关闭查询。
query.close();
注意:为了取出查询结果所有的行,可以反复的调用query.fetch直至SeRow对象返回为空值为止。
插入数据
可以使用SeInsert类来往一张表或者图层中插入数据。插入数据的步骤如下:
1. 建立一个String对象,以存储要添加数据的表的列名。注意数组索引值;这些索引值将在SeRow.set*中使用到。String类型的列的索引值是0,而Shape类型的列的索引值是1.
String[] cols = new String[2];
cols[0] = new String("ColumnOneName");
cols[1] = layer.getSpatialColumn();
2.使用当前的连接句柄Connection conn,创建一个SeInsert对象.这将建立一个从客户端到服务器的Insert数据流(Stream)。然后根据表或图层的列名来插入数据,设置SeInsert对象为可写模式(setWriteMode)。
SeInsert insert = new SeInsert(conn);
insert.intoTable(layer.getName(),cols);
insert.setWriteMode(true);
3.获取SeInsert对象中将要添加的SeRow对象。然后设置要插入的数据,这一步用到SeRow.set*方法。利用第一步中确定的索引值来作为set*方法中的columnPosition参数。
SeRow row = insert.getRowToSet();
row.setString(0, "Shape Number One");
row.setShape(1,shape);
4.调用SeInsert对象的execute()方法,将前面设置好的SeRow对象插入到图层中。最后关闭Insert数据流(Stream)结束这次插入的操作。如果不再使用到连接句柄Connection conn,也顺便把连接关闭。
insert.execute();
insert.close();
注意:数据只能插入到由用户创建并维护的列中,如果某个列被注册为
SE_REGISTRATION_ROW_ID_COLUMN_TYPE_SDE
则这个列的值将有ArcSDE自动生成并插入,另外object id在ArcCatalog建立一张表或者Feature class的时候就生成了,由ArcSDE维护,用户不能插入,删除或者修改这一列中的值
发表评论
-
利用工具将shp文件导入到oracle spatial中
2012-05-21 14:20 43911 下载shp2sdo 工具,将工具放在 oracle按照目录 ... -
oracle s
2012-06-20 09:18 969<pre name="code" c ... -
oracle spatial 空间数据学习
2012-05-17 16:09 1785最近项目使用 空间数据库 oracle spatial ... -
树-Oracle用Start with...Connect By子句递归查询
2010-12-23 15:41 1181转 。。。。。。。。。。。。。。。。。。。。。。。。。 St ... -
无聊写的oracle 存储过程
2010-09-27 11:37 969create or replace procedure qin ... -
oracle中判断某个字段是否存在
2010-08-30 16:43 4382oracle中判断某个字段是否存在 docum ... -
Oracle 10g for Solaris 安装
2010-07-26 16:25 11191 .首先设置核心系统参数 # vi /etc/sy ... -
Oracle job 的写法
2010-04-29 14:22 1370写了一个job 很简单的,一分钟内 想一个表内插入 一 ... -
drop>; truncate >; delete
2010-03-09 20:40 833注意:这里说的delete是指 ... -
sys_guid()
2010-02-01 21:26 1026select sys_guid() from dual -
Oracle timestamp
2009-12-04 17:13 1956我们都知道date和timesta ... -
Oracle 数据双机热备
2009-09-11 13:48 1813XXX公司ORACLE双机热备份 ... -
Oracle 导出视图view中的数据
2009-09-11 13:33 8870众所周知 Oracle 中的view是不存储数据的,想导出视 ... -
Oracle中TO_DATE TO_CHAR格式
2009-03-26 11:05 1934TO_DATE格式(以时间:2007-11-02 13 ... -
安装Oracle 10g 出现的问题
2009-03-26 11:32 1052Oracle 10G 对Oracle 9i 来说是一个巨大的 ... -
Oracle10g EM 无法登录出现调试出现一系列问题的调试。
2009-03-27 22:52 2187实际操作成功过,真实有效。 友情提示:对于多网卡机器上安 ...
相关推荐
arcgis_SDE_for_Java样例
描述arcgis 连接sde的不同方式。直连式、服务式、连接文件式、连接字符串式
jsde_sdk.jar Contains the ArcSDE Client, and Geometry Java API class files. jpe_sdk.jar Contains the ArcSDE Projection Engine Java API class ...icu4j_3_2.jar ICU4J libraries required for globalization.
JSDE提供了一种方式,使得Java应用程序能够访问和操作ESRI的Spatial Database Engine (SDE),这是用于存储和管理地理空间数据的强大引擎。通过jsde92_sdk.jar,开发者可以执行复杂的空间查询、编辑地理数据以及进行...
2. **jsde_sdk.jar**:JavaScript for SDE (JSDE) SDK的Java版本,主要用于在Web应用程序中与ArcSDE进行交互。这个库提供了与jpe_sdk.jar类似的接口,但更偏向于Web环境下的使用,支持在JavaScript中调用,便于构建...
jsde_sdk.jar Contains the ArcSDE Client, and Geometry Java API class files. jpe_sdk.jar Contains the ArcSDE Projection Engine Java API class ...icu4j_3_2.jar ICU4J libraries required for globalization.
包含以下文件:ArcGIS_Desktop,ArcGIS_Engine,ArcGIS_for_Server_Windows,ArcGIS_License_Manager_Windows,ArcGIS_Server_Ent_Linux,Portal_for_ArcGIS_Windows,server+sde103.ecp(许可),Web_Adaptor_for_...
WebLogic是用于部署和管理ArcGIS服务的Java应用服务器。安装过程包括选择安装位置、配置管理服务器和集群,以及设置启动参数。 完成上述步骤后,您将拥有一个完整的GIS环境,包括ArcGIS 10.1、Oracle 11g数据库和...
ArcGIS是由Esri公司开发的一款强大的地理信息系统(GIS)软件,它包含了多个组件,如ArcGIS Desktop、ArcGIS Server和ArcGIS Server for the Java Platform等。以下是搭建ArcGIS环境的具体步骤和注意事项: **...
这份【ArcGIS93全套至2020年(含ae,ims,server,sde)】的资源包,不仅涵盖了GIS的基础应用,还包含了高级开发和企业级服务,对于GIS学习者和专业人士来说,是一个宝贵的资料库,可以深入理解GIS技术的发展历程,掌握...
本代码主要是,实现了arcgis for java 存后台使用连接sde库,导入shp文件,包含使用arcObject.jar包实现的数据导入功能
在使用ArcGIS Server for Java的REST接口时,URIEncoding的设置不当会导致字符集转换错误。默认情况下,Tomcat服务器使用UTF-8编码,但如果没有在`server.xml`文件中明确指定,可能会出现问题。在`conector`标签中...
3. **数据访问**:ArcObject提供了对多种GIS数据格式的支持,包括Shapefile、Geodatabase、SDE、CSV等。通过DataSources和Workspace接口,开发者可以读取、写入和管理这些数据源。 4. **地图渲染与符号系统**:...
***不仅支持桌面应用程序开发,还支持iOS、OSX、Android以及跨平台的开发,如Java SE、Qt、QML等。 在核心组件方面,***提供了丰富的GIS服务,包括映射和数据、三维地图展示、数据编辑、空间分析以及与ArcGIS ...
文章中提及了系统开发所使用的工具,包括ArcGIS API for JavaScript和空间数据库引擎(SDE)。ArcGIS是一个集成了多个模块和工具的产品族,其中ArcGIS Server提供REST API接口,使得GIS数据可以在Web应用中使用。...
此外,ArcSDE与ArcGIS Desktop、ArcGIS Server等Esri产品有紧密的集成,使得用户能够在熟悉的GIS界面下操作和管理Oracle中的空间数据。这极大地提升了地理数据的处理效率和应用范围。 总之,《ArcSDE 9.3 for ...
- 开发环境通常涉及安装ArcGIS SDK for .NET,Visual Studio(如VS2015),以及相关的开发工具,用于创建GIS应用程序。 - Oracle数据库是用于存储地理空间数据的常见选择,需要正确配置以支持GPS数据导入。 2. **...