Posted on 2007-03-08 16:39
帥子 閱讀(1097)
評論(2) 編輯 收藏 所屬分類:
J2EE技術(shù)專區(qū)
ArcEngine中拓?fù)涞氖褂?br />
拓?fù)?ITopology)的使用包括
1.建立拓?fù)?br />2.驗證拓?fù)?br />3.編輯過程中保證拓?fù)涞恼_
4.查詢系統(tǒng)中存在的拓?fù)?br />1.首先 來看看建立拓?fù)?br />????Topology實現(xiàn)了ITopology這個接口 但是給類是不能用來創(chuàng)建對象的。
??必須要通過調(diào)用 ITopologyContainer::CreateTopology這個方法來建立一個Topology
??FeatureDataset 實現(xiàn)了ITopologyContainer這個接口。那么 這就是說拓?fù)渲荒茉谝粋€
??FeatureDataset的范圍內(nèi)建立。而不能獨立存在于Workspace中。這樣做的原因是需要保證
??參與同一個拓?fù)涞腇eatureClass具有同一個投影坐標(biāo)系統(tǒng)。 建立拓?fù)浜笮枰獙bjectClass
??加入到拓?fù)渲腥ァ_@樣這個拓?fù)渚涂梢杂脕眚炞C這幾個ObjectClass 的對象之間的關(guān)系了。
?????驗證關(guān)系就要有規(guī)則,規(guī)則是由ITopologyRule來表達(dá)的。ITopologyRule必須要被
???加入到一個ITopologyRuleContainer中去。而Topology實現(xiàn)了這個接口。
???一個ITopologyRule用來表達(dá)兩個ObjectClass的對象之間的某個關(guān)系。
?????具體代碼參看接口就可以了。
?2.驗證拓?fù)?br />?????ITopology有一個方法 ValidateTopology 用來驗證指定區(qū)域內(nèi)的拓?fù)洹P枰⒁?沒有版本
???的拓?fù)淇梢栽?任何時候驗證。而有版本的拓?fù)浔仨氃诰庉嫽卦捴序炞C。
?3.拓?fù)渚庉?br />?? 1.移動共用點
??? 1.首先需要打開拓?fù)?建立拓?fù)鋱D(ITopologyGraph)
??? 代碼如下:
??? //topoLayer 是一個打開的拓?fù)鋱D層
??? ITopologyGraph pTG=topoLayer.Topology.Cache;
??pTG.Build(pA.Extent,false);
??2.然后 需要獲得當(dāng)前節(jié)點或者邊 這個操作要使用拓?fù)鋱D的點擊測試
??ITopologyElement topeEle
??pTG.HitTest(... ref topeEle);
??這個方法在點擊測試成功的時候返回true.而且會通過topeEle這個ref 參數(shù)將選中的元素(點或者邊)
??返回.
??3.還有一種獲取節(jié)點的方法
??? 首先調(diào)用拓?fù)鋱D的Select方法 選中點擊測試的元素(pTG.Select)
??? 然后可以查詢拓?fù)鋱D的選中節(jié)點集合 就可以找到該節(jié)點(pTG.NodeSelection)
??4.為該元素使用一個Feedback.
???//其中 pNode 就是當(dāng)前節(jié)點 sr 是參考坐標(biāo)系 可以使用null
???//還有給Feedback設(shè)置Display
??? m_pNodeFeedback =pTG.GetSplitMoveNodeFeedback(pNode,false,sr);
??? m_pNodeFeedback.Display= activeView.ScreenDisplay;
??5.在鼠標(biāo)移動的時候 調(diào)用Feedback的MoveTo 方法。
???if(m_pNodeFeedback!=null)
???{
????//activeView 是活動的試圖
????//首先要把將點坐標(biāo)轉(zhuǎn)換為地圖中的坐標(biāo)。
????//然后調(diào)用MoveTo 方法????
????IPoint pt=activeView.ScreenDisplay.DisplayTransformation.ToMapPoint(X,Y);
????m_pNodeFeedback.MoveTo(pt);
???}
??? 6.在鼠標(biāo)釋放的時候
??? ??//獲取拓?fù)鋱D
??????? ITopologyGraph pTG=topoLayer.Topology.Cache;
??????? //轉(zhuǎn)換坐標(biāo)???
????? IPoint pt=pA.ScreenDisplay.DisplayTransformation.ToMapPoint(X,Y);
????? //獲得正在做拓?fù)渚庉嫷脑??? ????
???? ITopologyNode pTN=(ITopologyNode)m_pTopoElement;
???? //實施拓?fù)渚庉?br />????pTG.SplitMoveNode(pTN,pt,false);
????//提交拓?fù)渚庉嫿Y(jié)果
????IEnvelope pE;
????pTG.Post(out pE);
?4.查詢系統(tǒng)中的拓?fù)?br />?? 還是ITopologyContainer 這個接口 這個接口有FeatureDataset這個唯一的實現(xiàn)。
?? CreateTopology 建立一個新的拓?fù)?
?? DefaultClusterTolerance The default cluster tolerance as per the topology engine.
?? MaximumClusterTolerance The maximal cluster tolerance as per the topology engine.
?? MinimumClusterTolerance The minimal cluster tolerance as per the topology engine.
?? Topology 通過索引打開拓?fù)?
?? TopologyByID 通過ID打開拓?fù)?
?? TopologyByName 通過名字打開拓?fù)?
?? TopologyCount? 拓?fù)涞臄?shù)目