阅读:2960回复:6
AO中怎么找到一个图层中重叠的面啊
<P>AO中怎么找到一个图层中重叠的面啊请问</P>
<P>可以用IRetionOperator中的overlap判断么</P> <P>下面是我写的大致的代码,把每一个面和其它的所有面比较,判断是否重叠</P> <P>感觉这样太复杂,不知是否有更简单的算法</P> <P>还有通过GetFeature得到要素,参数非得用objectid么,不能直接用序号么</P> <P><BR> Dim arrID As ArrayList = New ArrayList<BR> Dim pFeatCur As IFeatureCursor<BR> pFeatCur = pFeatCls.Search(Nothing, False)<BR> Dim pFeat As IFeature<BR> pFeat = pFeatCur.NextFeature()<BR> While Not pFeat Is Nothing<BR> m_lngFeatCount += 1<BR> arrID.Add(pFeat.Value(pFeat.Fields.FindField("objectid")))<BR> pFeat = pFeatCur.NextFeature()<BR> End While<BR> Dim pRelOp As IRelationalOperator<BR> Dim i As Integer = 0<BR> Dim j As Integer = 0<BR> Dim pFeat1 As IFeature<BR> Dim pFeat2 As IFeature<BR> For i = 0 To arrID.Count - 1<BR> pFeat1 = pFeatCls.GetFeature(arrID(i))<BR> pRelOp = pFeat1.Shape<BR> For j = i + 1 To arrID.Count - 1<BR> pFeat2 = pFeatCls.GetFeature(arrID(j))<BR> If pRelOp.Overlaps(pFeat2.Shape) Then</P> <P> MsgBox("重叠")<BR> End If<BR> Next<BR> m_intChkCount += 1 '完成了一个图形的检测<BR> Next</P> <P>请大侠指点,谢谢了</P> |
|
1楼#
发布于:2006-09-18 13:40
<P>就这方法了,没其他简单的</P>
|
|
|
2楼#
发布于:2006-09-18 17:37
有简单的方法。可惜我的机器不能上网。不能直接告诉你。遗憾。<img src="images/post/smile/dvbbs/em15.gif" />
|
|
3楼#
发布于:2006-09-18 18:40
<P>楼上的兄弟,什么时候方便告诉我一下,谢了我的信箱</P>
<P><a href="mailtboatdream@126.com" target="_blank" >boatdream@126.com</A></P> |
|
4楼#
发布于:2006-09-18 19:00
<P>还有,重叠是什么意思啊,是不是指一个面在另一个面里面啊,那要判断两个面相交呢,怎么判断啊,请指点</P>
|
|
5楼#
发布于:2006-09-18 23:39
<P>你的方法 虽然可以,但是速度太慢了。 </P>
<P>其实你只要 作 如下的修改就可以了。</P> <P>通过 指定ISpatialFilter 来设定要搜索的范围(overlap的 肯是是Intersect) ,然后再利用你的方法,判断是否 overlap,这样的话 ,先在空间上对 要素过滤的一下(只选中了和指定的要素 有交叉的feature),然后再 判断是否真正的 overlap. 就是把 要检查的范围缩小再一个比较小的范围内。:)</P> |
|
6楼#
发布于:2006-09-19 12:54
<P>楼上的所言极是,我也觉得太慢了, 你是说,先找到一个要素,用空间查询过滤找到和它相交的面,然后再来判断是否重叠啊, 接着同样的用到下一个要素是吧,</P>
<P>还有一事不明,重叠是指一个面在另一个面里面么,假如这两个面刚好吻合,算重叠么</P> <P>那相交呢,是不是只要两个面有公共的部分,就叫相交啊,再次谢了啊</P> |
|