|
阅读:1567回复:5
VB+AO:如何实现特征合并
<P>VB+AO:我已经用矩形框选择了几个多边形,怎么把他们合并呀?我找了段代码,用的是ITopologicalOperator:Union,好象要替换pFeatureCursor,大家帮我改改。谢谢</P>
<P>所有的需要合并的Features放在pFeatureCursor 中:</P> <P>Public Function UnionFeatureCursor(As IFeatureCursor) As IGeometry Dim pFeature1 As IFeature, pFeature2 As IFeature Dim pTopo As ITopologicalOperator Dim pGeometry As IGeometry Set pFeature1 = pFeatureCursor.NextFeature Set pGeometry = pFeature1.Shape Set pFeature2 = pFeatureCursor.NextFeature While Not pFeature2 Is Nothing Set pTopo = pGeometry Set pGeometry = pTopo.Union(pFeature2.Shape) Set pFeature2 = pFeatureCursor.NextFeature Wend Set UnionFeatureCursor = pGeometry End Function</P> [此贴子已经被作者于2004-5-23 0:26:14编辑过]
|
|
|
1楼#
发布于:2004-07-17 20:07
<P>关注,学习</P>
|
|
|
2楼#
发布于:2004-06-20 09:03
hao !
|
|
|
3楼#
发布于:2004-05-25 09:33
<P>在线帮助里找:</P><P>IMap FeatureSelection Example</P><P>有三个遍历选取要素的例子,其中包括我借过来的。稍加修改就可以和你的函数结合到一起。</P>
|
|
|
|
4楼#
发布于:2004-05-25 09:29
<P>这是AO帮助里的一个例子,是将所有选取的要素遍历出来,结合你的过程,就可以实现。</P><P>将下面部份代码替换为:</P><P>Set pFeature = pFeatureCursor.NextFeature
Do While Not pFeature Is Nothing 'Do something with the feature Debug.Print pFeature.Value(pFeature.Fields.FindField("Name")) Set pFeature = pFeatureCursor.NextFeature Loop</P><P>Set pFeatureLayer = pEnumLayer.Next</P><P>替换为:</P><P>set pGeometry(i) =UnionFeatureCursor(pFeatureCursor)</P><P>其中 Pgeometry(i) 为单个矢量图层中选取要素UNION的结果,最后还需求对各个pgeometry(i) 合并.</P><P>我给的只是大体思路,没有测试。但改动起来也很简单。</P><P> </P> |
|
|
|
5楼#
发布于:2004-05-24 21:10
<P>destnity ,你的意思是不是说:调用函数QuerySelectedFeatures,就找到了多边形的名字,再调用函数UnionFeatureCursor,就可以合并多边形?</P><P>还有,我运行到Debug.Print pFeature.Value(pFeature.Fields.FindField("Name")) 出错,name要换成一个路径?怎么换呀?
</P> |
|
|
6楼#
发布于:2004-05-24 12:55
<P>Public Sub QuerySelectedFeatures()
Dim pMxDoc As IMxDocument Dim pEnumLayer As IEnumLayer Dim pFeature As IFeature Dim pFeatureCursor As IFeatureCursor Dim pFeatureLayer As IFeatureLayer Dim pFeatureSelection As IFeatureSelection Dim pMap As IMap Dim pSelectionSet As ISelectionSet Dim pUID As IUID Set pUID = New UID pUID = "{E156D7E5-22AF-11D3-9F99-00C04F6BC78E}" Set pMxDoc = Application.Document Set pMap = pMxDoc.FocusMap 'Loop through all feature layers in the map Set pEnumLayer = pMap.Layers(pUID, True) pEnumLayer.Reset Set pFeatureLayer = pEnumLayer.Next Do While Not pFeatureLayer Is Nothing 'Loop through the selected features per layer Set pFeatureSelection = pFeatureLayer 'QI Set pSelectionSet = pFeatureSelection.SelectionSet 'Can use Nothing keyword if you don't want to draw them, 'otherwise, the spatial reference might not match the Map's pSelectionSet.Search Nothing, False, pFeatureCursor Set pFeature = pFeatureCursor.NextFeature Do While Not pFeature Is Nothing 'Do something with the feature Debug.Print pFeature.Value(pFeature.Fields.FindField("Name")) Set pFeature = pFeatureCursor.NextFeature Loop Set pFeatureLayer = pEnumLayer.Next Loop End Sub </P><P>上面代码也许可以帮上忙。从选择集里取出选取的要素。稍改动一下就可以了。</P> |
|
|
|
7楼#
发布于:2004-05-24 12:39
<P>有没有人帮我呀</P><P>kisssy 来看看</P>
|
|