AE 線要素排序

2022-09-12 12:24:17 字數 2386 閱讀 2530

對乙個線狀圖層,相鄰要素的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 獲取要素圖層...