對乙個線狀圖層,相鄰要素的oid並不連續。需要將這些要素按照空間關係重新排序,並體現在字段order中,圖層示意圖如下
解決思路:先找出端點要素,端點要素即為位於圖層開頭或者末尾的要素,設為當前要素,再找出與當前端點要素相鄰且沒有處理過的要素。每找出乙個要素,對要素的order欄位賦值為乙個遞增的序號。
難點:ae中我沒有找到很好的遍歷要素的方法,只能使用ifeaturecursor的方式來進行遍歷,這增加了演算法實現的複雜度。
具體流程:新增字段→找出圖層端點要素→逐個找出與當前端點相鄰的要素
①新增字段:
addtextfield((ifeaturelayer)(map.get_layer(line_index)),"m_order
","順序
");
public②獲取字段序號以及要素數量等void addtextfield(ifeaturelayer featurelayer, string name, string
alias)
pschemalock.changeschemalock(esrischemalock.esriexclusiveschemalock);
}
int current_order = 1③找出端點要素,過程為兩層迴圈:;
int index_order = 999
;
int index_odevity = 999
; ifeature pfeature_tml=pfeaturelayer_pipe.featureclass.getfeature(1
); list
occupiesid = new list();
try
catch
string
where = ""
; iqueryfilter filter = new
queryfilterclass();
filter.whereclause = where
; ifeatureclass pfeaterclass =pfeaturelayer_pipe.featureclass;
int countfeature = pfeaturelayer_pipe.featureclass.featurecount(filter);
//第一輪找出端點
ifeaturecursor pfeatcursor = pfeaterclass.update(filter, false
); ifeature pfeature =pfeatcursor.nextfeature();
while (pfeature != null) //
遍歷所有要素找出端點
pfeature2 =pfeatcursor2.nextfeature();
}if (countneighber == 1
)
pfeature =pfeatcursor.nextfeature();
}
private④逐個找出所有相鄰要素,並給字段賦值bool
isneighbour(ifeature feature1, ifeature feature2)
if (d2 == 0
)
if (d3 == 0
)
if (d4 == 0
)
if (count_zero == 1
)
return
false
; }
catch
}
//⑤程式結果第二**迴圈
for (int i = 0; i < countfeature; i++)
//當前要素的oid
pfeature3 =pfeatcursor3.nextfeature();}}
作者初出茅廬,如有疑問或者可以改進之處,還請多多指教!
AE刪除要素
原文 executesql刪除 private void delete4 ifeatureclass pfeatureclass idataset pdataset pfeatureclass as idataset pdataset.workspace.executesql delete from...
線要素的節點提取
首先我並不清楚是不是還有比這種方法更好的方法,但是由於專案需要只能暫時使用這個了,而且感覺還不錯。上篇中提到已經將線要素在折點處斷開,是為了在空間分析中資料更加合理,但歸根到底我們最後需要檢索並分析的是節點資料,也就是管道的介面或閥門。所以接下來的工作就是提取節點。我用的方法是對斷開的 不斷開也可以...
AE中根據屬性提取要素的功能
昨天幫一位朋友實現乙個根據屬性提取要素的功能,現記錄如下,以備後用 先看看效果圖吧!要素提取前 要素提取後 以下實現這個功能的關鍵 主程式的路徑 這個是全域性變數 設定環境 geoprocessor gp new geoprocessor gp.overwriteoutput true 獲取要素圖層...