best_lilin
  • 注册日期
  • 发帖数
  • QQ
  • 铜币
  • 威望
  • 贡献值
  • 银元
阅读:1567回复:5

VB+AO:如何实现特征合并

楼主#
更多 发布于:2004-05-22 15:40
<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编辑过]
喜欢0 评分0
best_lilin
  • 注册日期
  • 发帖数
  • QQ
  • 铜币
  • 威望
  • 贡献值
  • 银元
1楼#
发布于:2004-05-24 12:39
<P>有没有人帮我呀</P><P>kisssy 来看看</P>
举报 回复(0) 喜欢(0)     评分
destnity
路人甲
路人甲
  • 注册日期2004-03-25
  • 发帖数341
  • QQ
  • 铜币272枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于: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>
签 名: 不能超过 250 个字符 文字将出现在您发表的文章的结尾处。
举报 回复(0) 喜欢(0)     评分
best_lilin
  • 注册日期
  • 发帖数
  • QQ
  • 铜币
  • 威望
  • 贡献值
  • 银元
3楼#
发布于:2004-05-24 21:10
<P>destnity ,你的意思是不是说:调用函数QuerySelectedFeatures,就找到了多边形的名字,再调用函数UnionFeatureCursor,就可以合并多边形?</P><P>还有,我运行到Debug.Print pFeature.Value(pFeature.Fields.FindField("Name")) 出错,name要换成一个路径?怎么换呀?
      </P>
举报 回复(0) 喜欢(0)     评分
destnity
路人甲
路人甲
  • 注册日期2004-03-25
  • 发帖数341
  • QQ
  • 铜币272枚
  • 威望0点
  • 贡献值0点
  • 银元0个
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>
签 名: 不能超过 250 个字符 文字将出现在您发表的文章的结尾处。
举报 回复(0) 喜欢(0)     评分
destnity
路人甲
路人甲
  • 注册日期2004-03-25
  • 发帖数341
  • QQ
  • 铜币272枚
  • 威望0点
  • 贡献值0点
  • 银元0个
5楼#
发布于:2004-05-25 09:33
<P>在线帮助里找:</P><P>IMap FeatureSelection Example</P><P>有三个遍历选取要素的例子,其中包括我借过来的。稍加修改就可以和你的函数结合到一起。</P>
签 名: 不能超过 250 个字符 文字将出现在您发表的文章的结尾处。
举报 回复(0) 喜欢(0)     评分
pGisempire
路人甲
路人甲
  • 注册日期2004-06-10
  • 发帖数11
  • QQ
  • 铜币141枚
  • 威望0点
  • 贡献值0点
  • 银元0个
6楼#
发布于:2004-06-20 09:03
hao !
举报 回复(0) 喜欢(0)     评分
pearlstar
路人甲
路人甲
  • 注册日期2004-07-11
  • 发帖数92
  • QQ
  • 铜币160枚
  • 威望0点
  • 贡献值0点
  • 银元0个
7楼#
发布于:2004-07-17 20:07
<P>关注,学习</P>
举报 回复(0) 喜欢(0)     评分
游客

返回顶部