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;
- }
操作加入要素的代碼如下所示:
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
操作刪除要素的代碼如下所示:
#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