vcasp
路人甲
路人甲
  • 注册日期2006-07-03
  • 发帖数34
  • QQ
  • 铜币230枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:2961回复:6

AO中怎么找到一个图层中重叠的面啊

楼主#
更多 发布于:2006-09-17 17:33
<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>
喜欢0 评分0
vcasp
路人甲
路人甲
  • 注册日期2006-07-03
  • 发帖数34
  • QQ
  • 铜币230枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2006-09-19 12:54
<P>楼上的所言极是,我也觉得太慢了, 你是说,先找到一个要素,用空间查询过滤找到和它相交的面,然后再来判断是否重叠啊, 接着同样的用到下一个要素是吧,</P>
<P>还有一事不明,重叠是指一个面在另一个面里面么,假如这两个面刚好吻合,算重叠么</P>
<P>那相交呢,是不是只要两个面有公共的部分,就叫相交啊,再次谢了啊</P>
举报 回复(0) 喜欢(0)     评分
bluewood_cn
路人甲
路人甲
  • 注册日期2004-04-19
  • 发帖数118
  • QQ
  • 铜币551枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2006-09-18 23:39
<P>你的方法 虽然可以,但是速度太慢了。 </P>
<P>其实你只要 作 如下的修改就可以了。</P>
<P>通过 指定ISpatialFilter  来设定要搜索的范围(overlap的 肯是是Intersect) ,然后再利用你的方法,判断是否 overlap,这样的话 ,先在空间上对 要素过滤的一下(只选中了和指定的要素 有交叉的feature),然后再 判断是否真正的 overlap. 就是把 要检查的范围缩小再一个比较小的范围内。:)</P>
举报 回复(0) 喜欢(0)     评分
vcasp
路人甲
路人甲
  • 注册日期2006-07-03
  • 发帖数34
  • QQ
  • 铜币230枚
  • 威望0点
  • 贡献值0点
  • 银元0个
3楼#
发布于:2006-09-18 19:00
<P>还有,重叠是什么意思啊,是不是指一个面在另一个面里面啊,那要判断两个面相交呢,怎么判断啊,请指点</P>
举报 回复(0) 喜欢(0)     评分
vcasp
路人甲
路人甲
  • 注册日期2006-07-03
  • 发帖数34
  • QQ
  • 铜币230枚
  • 威望0点
  • 贡献值0点
  • 银元0个
4楼#
发布于:2006-09-18 18:40
<P>楼上的兄弟,什么时候方便告诉我一下,谢了我的信箱</P>
<P><a href="mailtboatdream@126.com" target="_blank" >boatdream@126.com</A></P>
举报 回复(0) 喜欢(0)     评分
hehui
路人甲
路人甲
  • 注册日期2003-09-26
  • 发帖数82
  • QQ
  • 铜币588枚
  • 威望0点
  • 贡献值0点
  • 银元0个
5楼#
发布于:2006-09-18 17:37
有简单的方法。可惜我的机器不能上网。不能直接告诉你。遗憾。<img src="images/post/smile/dvbbs/em15.gif" />
举报 回复(0) 喜欢(0)     评分
hsghxm
路人甲
路人甲
  • 注册日期2004-10-27
  • 发帖数517
  • QQ4604052
  • 铜币1枚
  • 威望0点
  • 贡献值0点
  • 银元0个
6楼#
发布于:2006-09-18 13:40
<P>就这方法了,没其他简单的</P>
MSN:hsghxm@163.com QQ:4604052 (很少用,最好别加) Email:hsghxm@163.com 我的BOLG:http://www.gisempire.com/blog/user1/864/index.htm
举报 回复(0) 喜欢(0)     评分
游客

返回顶部