yudi7758
路人甲
路人甲
  • 注册日期2004-10-19
  • 发帖数57
  • QQ
  • 铜币329枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:4182回复:10

[讨论]谁能帮我该错,切割的问题。

楼主#
更多 发布于:2005-03-23 15:01
<P>谁能帮我该错?谢谢!</P>
<P>'//功能切割多边形</P>
<P>'//输入参数:被切割的面Feature,切割面的线
'=======================================</P>
<P>Sub TopIntesect(ByVal pFeature As IFeature, ByVal pPolyLine As IPolyline)
    Dim pTopOperator As ITopologicalOperator2
    Dim pGeom As IGeometry
    Dim pGeomReasult As IGeometry
    
    Set pGeom = pPolyLine
    Set pTopOperator = pFeature.Shape
    Set pGeomReasult = pTopOperator.IntersectMultidimension(pGeom )</P>
<P>End Sub</P>
<P>运行到Set pGeomReasult = pTopOperator.IntersectMultidimension(pGeom )时报错:操作不能在非简单实体中进行。可AO帮助中说:ITopologicalOperator2的<FONT size=2>IntersectMultidimension 方法可以实现多边形和线之间的操作啊-------When using this method to intersect a Polygon with a Polyline (or vice versa) the geometry returned will be a GeometryBag.请问我错在哪里呢?</FONT></P>
喜欢0 评分0
gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15951
  • QQ
  • 铜币25345枚
  • 威望15368点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
1楼#
发布于:2005-03-23 15:16
<P>没有你要的,找了个函数,大概有点关系,看看有没帮助</P><P>'‖=================================================
'‖功能:多边形联合形成新的多边形
'‖参数:pFromPolygon 原多边形
'‖     pToPolygon 加入的多边形
'‖输出:构成的多边形
'‖=================================================
Public Function UnionPolygon(ByVal pFromPolygon As IPolygon, ByVal pToPolygon As IPolygon) As IPolygon
  Dim pTopoOperator As ITopologicalOperator
  
  On Error GoTo ErrLabel
  
  Set UnionPolygon = Nothing
  If pToPolygon Is Nothing Then
    Set UnionPolygon = pFromPolygon
    Set pTopoOperator = UnionPolygon
    pTopoOperator.Simplify
    Exit Function
  ElseIf pToPolygon.IsEmpty Then
    Set UnionPolygon = pFromPolygon
    Set pTopoOperator = UnionPolygon
    pTopoOperator.Simplify
    Exit Function
  End If
  If pFromPolygon Is Nothing Then
    Set UnionPolygon = pToPolygon
    Set pTopoOperator = UnionPolygon
    pTopoOperator.Simplify
    Exit Function
  ElseIf pFromPolygon.IsEmpty Then
    Set UnionPolygon = pToPolygon
    Set pTopoOperator = UnionPolygon
    pTopoOperator.Simplify
    Exit Function
  End If
  
  Set pTopoOperator = pFromPolygon
  pTopoOperator.Simplify
  Set pTopoOperator = pToPolygon
  pTopoOperator.Simplify
  Set UnionPolygon = pTopoOperator.Union(pFromPolygon)
  Set pTopoOperator = UnionPolygon
  pTopoOperator.Simplify
ErrLabel:
    
End Function</P>
GIS麦田守望者,期待与您交流。
举报 回复(0) 喜欢(0)     评分
yudi7758
路人甲
路人甲
  • 注册日期2004-10-19
  • 发帖数57
  • QQ
  • 铜币329枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2005-03-23 15:50
感谢小谢斑竹的回答。
感谢小谢斑竹的回答。这个合并多边形的例子可能以后对我有帮助。可是现在让我焦头烂额的是 用线切割多边形的问题。我都搞了好几天了,还是没有结果。晕了。不过还是感谢<FONT color=#cc3333 size=5><b>小谢兄</b></FONT>的答复。<img src="images/post/smile/dvbbs/em12.gif" /><img src="images/post/smile/dvbbs/em12.gif" />
举报 回复(0) 喜欢(0)     评分
yudi7758
路人甲
路人甲
  • 注册日期2004-10-19
  • 发帖数57
  • QQ
  • 铜币329枚
  • 威望0点
  • 贡献值0点
  • 银元0个
3楼#
发布于:2005-03-23 16:02
<P>pPolyLine线应该已经是简单实体了。不能进行Simplify。难道AO不支持线和面的拓扑操作吗?没有道理不支持啊!?</P>
举报 回复(0) 喜欢(0)     评分
gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15951
  • QQ
  • 铜币25345枚
  • 威望15368点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
4楼#
发布于:2005-03-23 16:06
<P>看看这个有没用了</P><P>'‖=================================================
'‖功能:分割实体
'‖参数:pFeature 被分割的实体
'‖     pSplitPoints 分割点的集合
'‖输出:
'‖=================================================
Public Sub SplitFeature(pFeature As iFeature, pSplitPoints As IPointCollection)
  On Error GoTo ErrorHandler
  
  Dim pEnumVertex As IEnumVertex
  Dim pGeoColl As IGeometryCollection
  Dim pPolycurve As IPolycurve2
  Dim pEnumSplitPoint As IEnumSplitPoint
  Dim pNewFeature As iFeature
  Dim PartCount As Integer
  Dim pFClass As IFeatureClass
  
  Set pFClass = pFeature.Table
'  If m_pEditLayerType = 1 Then ModiSelFeature pfeature
  
  Set pEnumVertex = pSplitPoints.EnumVertices
  Set pPolycurve = pFeature.ShapeCopy
  Set pGeoColl = pPolycurve
  Set pEnumSplitPoint = pPolycurve.SplitAtPoints(pEnumVertex, True, True, -1)
  
  If Not pEnumSplitPoint.SplitHappened Then Exit Sub
  
  Set pGeoColl = pPolycurve
  For PartCount = 0 To pGeoColl.GeometryCount - 1
    Set pNewFeature = pFClass.CreateFeature
    Set pNewFeature.Shape = BuildPolyline(pGeoColl.Geometry(PartCount))
    CopyAttributes pFeature, pNewFeature
    AddTimeAttri pNewFeature
    pNewFeature.Store

    AddToUndoStack g_lngCurrentCode, m_pCurrentEditTime, pNewFeature

  Next PartCount
  
  
    UpdateTimeAttri pFeature
    pFeature.Store
    AddToUndoStack g_lngCurrentCode, m_pCurrentEditTime, pFeature

  Exit Sub</P><P>ErrorHandler:</P><P>End Sub</P>
GIS麦田守望者,期待与您交流。
举报 回复(0) 喜欢(0)     评分
xxwwdd
路人甲
路人甲
  • 注册日期2003-08-19
  • 发帖数88
  • QQ
  • 铜币230枚
  • 威望0点
  • 贡献值0点
  • 银元0个
5楼#
发布于:2005-03-23 18:49
<P> Dim pTopOperator1 As ITopologicalOperator2
    
    Set pTopOperator1 = pPolyLine</P><P>if(pTopOperator1.IsSimplify = false) pTopOperator1.Simplify
</P>
举报 回复(0) 喜欢(0)     评分
yudi7758
路人甲
路人甲
  • 注册日期2004-10-19
  • 发帖数57
  • QQ
  • 铜币329枚
  • 威望0点
  • 贡献值0点
  • 银元0个
6楼#
发布于:2005-03-24 12:58
<P>这个我试过了,如果是线割线的话,很成功,可以将一根线割成两段。但如果是用线割面的话,就不成功了,面没有任何变化,也就是说</P><P>Set pEnumSplitPoint = pPolycurve.SplitAtPoints(pEnumVertex, True, True, -1)
 Set pGeoColl = pPolycurve 后 pGeoColl.GeometryCount没有变化,还是1个。
</P>
举报 回复(0) 喜欢(0)     评分
kendomen
路人甲
路人甲
  • 注册日期2004-10-18
  • 发帖数13
  • QQ
  • 铜币163枚
  • 威望0点
  • 贡献值0点
  • 银元0个
7楼#
发布于:2005-03-24 15:25
返回GeometryBay类型,不是Geometry
举报 回复(0) 喜欢(0)     评分
kendomen
路人甲
路人甲
  • 注册日期2004-10-18
  • 发帖数13
  • QQ
  • 铜币163枚
  • 威望0点
  • 贡献值0点
  • 银元0个
8楼#
发布于:2005-03-24 15:26
<P>帮助中说:</P><P>When using this method to intersect a Polygon with a Polyline (or vice versa) the geometry returned will be a GeometryBag.</P><P>When using this method to intersect a Multipoint with a Polygon (or vice versa) or Multipoint with a Polyline (or vice versa) the geometry returned will be a Multipoint. </P>
举报 回复(0) 喜欢(0)     评分
yudi7758
路人甲
路人甲
  • 注册日期2004-10-19
  • 发帖数57
  • QQ
  • 铜币329枚
  • 威望0点
  • 贡献值0点
  • 银元0个
9楼#
发布于:2005-03-25 11:07
<P>你们说的没错。我试过了。可是结果令人意外,返回的结果GeometryBag中的Geometry的类型居然是Multipoint,我再将Multipoint赋给一个PointCollection,发现点集里面只有两个点,就是线和面外轮廓的两个交点。而不是我想要的线的左右两个polygon。唉,郁闷,切割又失败。</P>
举报 回复(0) 喜欢(0)     评分
上一页
游客

返回顶部