ArcEngine中shp中先加入要素然后删除一部分要素后,放大图形后不显示的问题解决方法

时间:2022-05-30 14:58:36

ArcEngine中shp中先加入要素然后删除一部分要素后,放大图形后不显示的问题解决方法

(一)问题描述如下:

shp中先加入要素然后删除一部分要素后,图形为什么显示不正常了
//------------------
我遇到这个问题,请问大家是怎么解决的?
我的操作是:
往shp文件加入要素,
然后,再删除一部分要素,
显示就不正常了:
现象如下所示:
"这种情况全图显示时能看到所有图形,放大到某个范围后,某些图形就看不到了",

其加入要素代码如下所示:

操作加入要素的代码如下所示:
IFeatureCursor InsertCursor = null;
InsertCursor = Polygonfc.Insert(true);
IGeometry newgeo = null;
ComUnionOperator cuOp = new ComUnionOperator();
newgeo = cuOp.Union(FeatList.ToArray()); //
if (newgeo != null)
{
(newgeo as ITopologicalOperator).Simplify();
newgeo.SpatialReference = sr;
//创建一个新图斑
IFeatureBuffer featBuf = Polygonfc.CreateFeatureBuffer();
featBuf.Shape = newgeo; //设置几何对象
zhfeat = new ZHFeaturePolygon(p_feat);
zhfeat.CopyField(ref featBuf); //设置属性值
ZhFeatureBuffer zhfeatBuf = new ZhFeatureBuffer(featBuf);
zhfeatBuf.setFieldValue("xp_bh", ""); //设为空以防被删除
//插入新图斑到空间数据库中
InsertCursor.InsertFeature(featBuf);
//记录要删除的原地物
del_xp_bh_List.Add(xp_bh_str);
del_xp_bh_List.Add(xp_bh_s_str);
//
}
//保存到空间库中
if (InsertCursor != null)
{
InsertCursor.Flush();
TokayWorkspace.ComRelease(InsertCursor);
InsertCursor = null;
}

操作删除要素的代码如下所示:
#region//删除碎小地物操作
string t_del_wc = "";
for (int i = 0; i < del_xp_bh_List.Count; i++)
{
if (t_del_wc.Trim() == "")
{
t_del_wc = "'" + del_xp_bh_List[i] + "'";
}
else
{
t_del_wc += ",'" + del_xp_bh_List[i] + "'";
}
}
if (t_del_wc.Trim() != "") //???
{
IQueryFilter t_del_qf = new QueryFilterClass();
t_del_qf.WhereClause = "xp_bh in(" + t_del_wc + ")";
IFeatureCursor del_featcur = Polygonfc.Update(t_del_qf, false);
IFeature del_feat = del_featcur.NextFeature();
while (del_feat != null)
{
del_featcur.DeleteFeature();
del_feat = del_featcur.NextFeature();
}
del_featcur.Flush();
TokayWorkspace.ComRelease(del_featcur);
del_featcur = null;
//
//TokayWorkspace.DeleteFeatures(Polygonfc, t_del_qf);
}
#endregion

经测试,加入要素没有问题,不删除操作,显示是正常的,
问题出在当执行删除操作时,显示就不正常了,
但另存为shp或其他格式的数据显示就正常;

搜索网上的解决办法的url地址:
http://hi.baidu.com/supu_beauty/ ... 98ff54242df26f.html
http://www.cnblogs.com/sxw_cug/archive/2010/08/27/1810345.html
ARCMAP中数据放大不显示问题
2010-07-19 21:08
     最近发现在ARCMAP中矢量数据放大不显示问题,暴露问题状况为:全屏状态下数据正常显示,放大后反而数据不显示了,但是可以选择的到。一般用如下三种方法解决问题:

     1、用ArcToolbox中的Datamanagement工具下的Features中的Repair Geometry修复数据。

     2、修改文件名,尽量用英文,同时修改路径,尽量使其短,而且尽量使用英文。

     3、如果上面两种方法无效的情况下,在ARCMAP中打开数据,然后Editor菜单下Start Editing,然后再Stop Editing,这样放大就可显示,至于原因正在查找中,原理也不是太明白,待以后更新补充。
//-------------------------------------------------------
我使用第三种方法这样放大就可显示了!原因我也不清楚!

如果是自定义编写的应用软件的话,需要重启应用软件,再开始编辑然后停止编辑,显示就可以了!

执行完先加入要素,然后删除一部分要素后
再执行下面的代码:显示问题依然存在!
//开始编辑然后再停止编辑
            IWorkspace ws = (this.Polygonfc as IDataset).Workspace;
            IWorkspaceEdit wsEdit = ws as IWorkspaceEdit;
            if (wsEdit.IsBeingEdited() == true)
            {
                wsEdit.StopEditing(true);
            }
            wsEdit.StartEditing(false);
            wsEdit.StopEditing(true);
            //
需要重启应用软件,再开始编辑然后停止编辑,显示就可以了!

各位兄弟姐妹们,这个问题已经解决了。
解决方法如下代码所示:
问题是删除要素的时候出现的放大显示现象,
我对删除要素的代码作如下形式的修改,这个现象就没有了:
#region//删除碎小地物操作
                        string t_del_wc = "";
                        for (int i = 0; i < del_xp_bh_List.Count; i++)
                        {
                            if (t_del_wc.Trim() == "")
                            {
                                t_del_wc = "'" + del_xp_bh_List[i] + "'";
                            }
                            else
                            {
                                t_del_wc += ",'" + del_xp_bh_List[i] + "'";
                            }
                        }
                        if (t_del_wc.Trim() != "")  
                        {
                            //开始编辑然后再停止编辑以处理放大不能显示的问题
                            IWorkspace ws = (this.Polygonfc as IDataset).Workspace;
                            IWorkspaceEdit wsEdit = ws as IWorkspaceEdit;
                            if (wsEdit.IsBeingEdited() == true)
                            {
                                wsEdit.StopEditing(true);
                            }
                            wsEdit.StartEditing(false);
                            wsEdit.StartEditOperation();
                            //----

                            IQueryFilter t_del_qf = new QueryFilterClass();
                            t_del_qf.WhereClause = "xp_bh in(" + t_del_wc + ")";
                            IFeatureCursor del_featcur = Polygonfc.Update(t_del_qf, false);
                            IFeature del_feat = del_featcur.NextFeature();
                            while (del_feat != null)
                            {
                                del_featcur.DeleteFeature();
                                del_feat = del_featcur.NextFeature();
                            }
                            del_featcur.Flush();
                            TokayWorkspace.ComRelease(del_featcur);
                            del_featcur = null;
                            //----
                            wsEdit.StopEditOperation();
                            wsEdit.StopEditing(true);
                            //TokayWorkspace.DeleteFeatures(Polygonfc, t_del_qf);
                        }
                        #endregion

----the----end-----

vp:hsg

create date:2012-03-07  10:57