|
可以通过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,上述字段将保留原值。
|