• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

图形组件及GIS应用开发

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

AE ShapeFile文件的读取和事务的控制对图层的插入

1、对shape file文件的读取,先窗口工作空间,然后从工作空间打开featureclass,最后创建图层置入featureclass,新建的图层就可以加入到map中了。

代码

/// <summary>
        /// 创建一个feature layer
        /// </summary>
        /// <param name="workspacePath"></param>
        /// <param name="className"></param>
        /// <returns></returns>
        public IFeatureLayer CreateShapeFileLayerForShapeFile(string workspacePath,string className)
        {
            IFeatureWorkspace featureWorkspace = OpenFeatureWorkspaceForShapeFile(workspacePath);
            if (featureWorkspace == null) return null;
            IFeatureClass featureClass = featureWorkspace.OpenFeatureClass(className);
            if (featureClass == null) return null;
            IFeatureLayer flayer = new FeatureLayerClass();
            flayer.Name = className;
            flayer.FeatureClass = featureClass;
            return flayer;
        }

        /// <summary>
        /// 打开一个feature workspace
        /// </summary>
        /// <param name="workspacePath"></param>
        /// <returns></returns>
        public IFeatureWorkspace OpenFeatureWorkspaceForShapeFile(string workspacePath)
        {
            IPropertySet properties = new PropertySetClass();
            properties.SetProperty("DATABASE", workspacePath);
            IWorkspaceFactory2 workspaceFactory = new ShapefileWorkspaceFactoryClass();
            IFeatureWorkspace featureWorkspace = workspaceFactory.Open(properties, 0) as IFeatureWorkspace;
            return featureWorkspace;
        }

2、 事务控制,使用iworkspaceedit,获取workspaceedit时需要注意,要保证和你编辑的图层的工作空间一致,一个map中会有多个工作空间,获取dataset时注意,不要使用fclass.featuredataset,因为不是所有图层都在数据集中,一般shape文件的featureclass获取不到featuredataset。

代码
if (flayer == null)
return null;
// 获取featureworkspace
IFeatureClass fclass = flayer.FeatureClass;
if (fclass == null)
return null;
IDataset dataset
= fclass as IDataset;
if (dataset == null)
return null;
IWorkspaceEdit wsEditor
= dataset.Workspace as IWorkspaceEdit;

wsEdit.StartEditing(
false);// true代表开启操作事务控制,允许使用redo和undo
// 判定必要先决条件,如果不满足则不插入
if(fclass==null || geometry==null)
return false;
if(fclass.ShapeType!=geometry.GeometryType)
return false;
// 创建feature
IFeature feature = fclass.CreateFeature();
IFields fields
= feature.Fields;
// 向feature插入图形
feature.Shape = geometry;
if (values != null)
{
// 如果传入值对,则对feature直接赋值
for (int i = 0; i < values.Count; i++)
{
int fieldIndex = fields.FindField(values.ElementAt(i).Key);
if (fieldIndex == -1)
continue;
// 验证后插入值
if(fields.get_Field(fieldIndex).CheckValue(values.ElementAt(i).Value))
feature.set_Value(fieldIndex, values.ElementAt(i).Value);
}
}
// 保存退出
feature.Store();
wsEdit.StopEditing(
true);//true代表保持操作

结束!!

posted on 2009-12-15 19:38  孙佐全  阅读(783)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3