发表用户:LongRiver
收集整理:James.Liu
相关讨论:http://www.mygis.com.cn/forum/dispbbs.asp?BoardID=11&id=3696
信息原始来源:不祥

文章标题:MapXtreme for Java开发专题四:怎样对空间特征值对象编辑


可以通过addFeature,addFeatureSet,replaceFeature,removeFeature对图层数据进行编辑,图层必须是Annotation图层或通过JDBC表打开的图层。需要编辑的图层必须使用LocalDataProviderRef。可以可以使用FeatureFactory创建Feature或使用search方法获取FeatureSet。

1. 编辑Annotation图层

Annotationt图层的编辑只影响当前的MapJ,会改变地图图像的内容,与原始数据无关。

添加到Annotatin图层上的Feature必须有非空的PrimaryKey。添加到Annotation图层上的Feature必须和添加到该图层上的第一个Feature有相同的PrimaryKey结构,即相同的Attribute类型和数量。在使用FeatureFactory创建Feature的时候,应该使用MapJ的Numeric CoordSys。

 

2.编辑JDBC表图层

JDBC图层可以由数据库里的表定义或使用pass-througth查询定义。只有通过表定义的图层才可以编辑,图层上的修改被保存在数据库内。编辑图层时注意表结构,如字段是否非空,字段是否>0,字段长度等问题,同时必须有权限修改数据库的这个表。

MapXtreme Java使用单独的事务处理对象编辑请求,如果请求成功马上向数据库提交,否则rollback。如果使用addFeatureSet,则需要对Features集合中的每一个Feature进行提交。

在添加Feature或替换Feature时注意分配PrimaryKey值。下面是针对Oracle8i Spatial,IUS with SpatialWare DataBlade和 DB2 with Spatialware Extender的说明。

1) Oracle8i Spatial

可以使用自动分配或给定的值;

PrimaryKey的字段个数可以从1到n;

字段类型可以是整型或字符型;

添加Feature是必须给定PrimaryKey,替换时可选;

在更新Feature时如果给定了PrimaryKey,数据库将被更新,否则保持原值;

提供给Feature的PrimaryKey会正确地赋值给数据库中的相应字段;

使用addFeature时如果执行成功,将返回PrimaryKey。

2) IUS with SpatialWare DataBlade

IUS仅识别SW_MEMBER作为PrimaryKey;

PrimaryKey的字段个数可以从1到n;

字段类型只允许整型;

使用addFeature和replaceFeature时都不用指定PrimaryKey,即使指定了,也被忽略;

SW-MEMBER会自动取最大值加1,描述PrimaryKey的字段如果不是SW_MEMBER根本就不会被设置;

使用addFeature时不会返回PrimaryKey。

3) DB2 with Spatial Extender

PrimaryKey由Extender设置;

PrimaryKey的字段个数可以从1到n;

字段类型只允许整型;

使用addFeature和replaceFeature时都不用指定PrimaryKey,即使指定了,也被忽略;

如果没有指定PrimaryKey,就取Primary字段的最大值加一;

使用addFeature时如果执行成功,将返回PrimaryKey。

在向JDBC表图层添加Feature时,按照MapJ的Numeric 投影进行,MapXtreme可以进行相应的投影转换。在创建图层时,在TableDescHelper中如果指定了保存Feature Rendition 或 Label Rendition信息的字段,MapXtreme可以保存这些信息。另外,MapXtreme只能将Rendtion保存在RenditionType.mapxtreme格式中,而不是保存在RenditionType.mapbasic格式中,只能读。添加Feature(addFeature)时,如果Rendition字段的类型是RenditionType.mapbasic,保存时该字段将是null。若使用replaceFeature,上述字段将保留原值。