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