arcsde java_ArcSDE Java API

http://edndoc.esri.com/arcsde/9.3/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

上以及

中找到。

要建立一个使用

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

维护,用户不能插入,删除或者修改这一列中的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值