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

AO+VB:怎样实现特征的选择

楼主#
更多 发布于:2004-05-20 12:31
<P>我在用VB做AO,需要实现以下功能:点击工具栏中的按钮,在mapcontrol1控件中的地图上画矩形,可以选中矩形中的特征。</P>
<P>我在develeper help 中找到了area select task 的代码,但好象是什么.cls的,我不会用,谁能帮我改一下代码(如下),谢谢。</P><PRE><CODE>Option Explicit

Implements</CODE> IEditTask

<CODE>Private</CODE> m_pEditor <CODE>As</CODE> IEditor
<CODE>Private</CODE> m_pEditSketch <CODE>As</CODE> IEditSketch
<CODE>Private</CODE> m_pArcMapDoc <CODE>As</CODE> IMxDocument
<CODE>Private</CODE> m_pApp <CODE>As</CODE> IMxApplication
<CODE>Private</CODE> m_pMXApp <CODE>As</CODE> IMxApplication
            
<CODE>Private Sub</CODE> IEditTask_Activate(<CODE>ByVal</CODE> Editor <CODE>As</CODE> IEditor, <CODE>ByVal</CODE> oldTask <CODE>As</CODE> IEditTask)
  <CODE>Set</CODE> m_pEditor = Editor
  <CODE>Set</CODE> m_pEditSketch = Editor
  m_pEditSketch.GeometryType = esriGeometryPolygon
  <CODE>Set</CODE> m_pApp = Editor.Parent
  <CODE>Set</CODE> m_pMXApp = m_pApp <CODE>'QI</CODE>
<CODE>End Sub

Private Sub</CODE> IEditTask_Deactivate()

<CODE>End Sub

Private Property Get</CODE> IEditTask_Name() <CODE>As String</CODE>
  IEditTask_Name = "Custom Select Task"
<CODE>End Property

Private Sub</CODE> IEditTask_OnDeleteSketch()

<CODE>End Sub

Private Sub</CODE> IEditTask_OnFinishSketch()
  <CODE>Dim</CODE> pMap <CODE>As</CODE> IMap
  <CODE>Dim</CODE> pActiveView <CODE>As</CODE> IActiveView
  <CODE>Dim</CODE> pSelectionEnv <CODE>As</CODE> ISelectionEnvironment
  <CODE>Dim</CODE> pSearchGeo <CODE>As</CODE> IGeometry
  <CODE>Dim</CODE> pTopoOp <CODE>As</CODE> ITopologicalOperator
  
  <CODE>Set</CODE> pMap = m_pEditor.Map
  <CODE>Set</CODE> pActiveView = pMap <CODE>'QI</CODE>
  <CODE>Set</CODE> pSelectionEnv = m_pMXApp.SelectionEnvironment
  <CODE>Set</CODE> pSearchGeo = m_pEditSketch.Geometry
  <CODE>'Refresh old selection</CODE>
  pActiveView.PartialRefresh esriViewGeoSelection, <CODE>Nothing</CODE>, <CODE>Nothing
  Set</CODE> pTopoOp = pSearchGeo <CODE>'QI</CODE>
  pTopoOp.Simplify <CODE>'Close polygons</CODE>
  <CODE>'Do the Selection - SelectByShape automatically fires the SelectionChanged event</CODE>
  <CODE>'so there is no need for use to call IEditEvents::OnSelectionChanged</CODE>
  pMap.SelectByShape pSearchGeo, pSelectionEnv, <CODE>False</CODE>
  <CODE>'Refresh the new selection</CODE>
  pActiveView.PartialRefresh esriViewGeoSelection, <CODE>Nothing</CODE>, <CODE>Nothing
End Sub</CODE>

</PRE>
喜欢0 评分0
lilysunny
路人甲
路人甲
  • 注册日期2003-08-18
  • 发帖数160
  • QQ
  • 铜币499枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2004-05-20 12:54
<P>给你点建议哦!</P><P>在例子中有个QueryCommand.vbp,其中有个用不同的shape来选择地物的功能,你只需要将它看懂,然后将被选中的地物的属性读取出来就可以了!呵呵,反正我是这样做的,搞定了!而且例子很简单,代码不是太复杂,我都看懂了,你应该也能!嘻嘻</P><img src="images/post/smile/dvbbs/em02.gif" />
黑夜给了你黑色的眼睛,你却拿它来翻白眼!
举报 回复(0) 喜欢(0)     评分
kisssy
卧底
卧底
  • 注册日期2004-04-18
  • 发帖数235
  • QQ
  • 铜币614枚
  • 威望2点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2004-05-20 16:12
<P>try this:</P><P>Option Explicit
Private selflag As Boolean        '选择标志
Private Sub Command1_Click()
selflag = True
End Sub</P><P>Private Sub Form_Load()
selflag = False</P><P>End Sub</P><P>Private Sub MapControl1_OnMouseDown(ByVal button As Long, ByVal shift As Long, ByVal x As Long, ByVal y As Long, ByVal mapX As Double, ByVal mapY As Double)
 If selflag = True Then
        Dim pSelEnv As ISelectionEnvironment
        Dim pRgbColor As IRgbColor
        Set pSelEnv = New SelectionEnvironment
        Set pRgbColor = New RgbColor
        pRgbColor.Red = 255
        pSelEnv.AreaSelectionMethod = esriSpatialRelIntersects
        Set pSelEnv.DefaultColor = pRgbColor
        
        Dim pEnv As IEnvelope
        Dim pRubber As IRubberBand
        Set pRubber = New RubberEnvelope
        
        Dim pActiveView As IActiveView
        Set pActiveView = MapControl1.ActiveView
        Set pEnv = pRubber.TrackNew(pActiveView.ScreenDisplay, Nothing)
        
        pActiveView.PartialRefresh esriViewGeoSelection, Nothing, Nothing
        MapControl1.Map.SelectByShape pEnv, pSelEnv, False
        pActiveView.PartialRefresh esriViewGeoSelection, Nothing, Nothing
        selflag = False
    End If
End Sub   </P><P>Goodluck!</P>
个人专栏: https://zhuanlan.zhihu.com/c_165676639
举报 回复(0) 喜欢(0)     评分
best_lilin
  • 注册日期
  • 发帖数
  • QQ
  • 铜币
  • 威望
  • 贡献值
  • 银元
3楼#
发布于:2004-05-20 16:40
感谢 我试试
举报 回复(0) 喜欢(0)     评分
best_lilin
  • 注册日期
  • 发帖数
  • QQ
  • 铜币
  • 威望
  • 贡献值
  • 银元
4楼#
发布于:2004-05-20 16:56
<P>可以运行 !!!</P><P>太谢谢了</P>
举报 回复(0) 喜欢(0)     评分
liboje
路人甲
路人甲
  • 注册日期2004-01-07
  • 发帖数27
  • QQ
  • 铜币246枚
  • 威望0点
  • 贡献值0点
  • 银元0个
5楼#
发布于:2004-10-28 20:13
<img src="images/post/smile/dvbbs/em03.gif" />
举报 回复(0) 喜欢(0)     评分
nkjoyboy
路人甲
路人甲
  • 注册日期2004-06-06
  • 发帖数114
  • QQ
  • 铜币447枚
  • 威望0点
  • 贡献值0点
  • 银元0个
6楼#
发布于:2004-10-29 16:10
<P>看得我好费劲啊。</P><P><img src="images/post/smile/dvbbs/em05.gif" /></P><img src="images/post/smile/dvbbs/em05.gif" />
做人要厚道
举报 回复(0) 喜欢(0)     评分
gaonall
路人甲
路人甲
  • 注册日期2004-10-26
  • 发帖数15
  • QQ
  • 铜币157枚
  • 威望0点
  • 贡献值0点
  • 银元0个
7楼#
发布于:2004-11-06 10:23
请问你这个是不是在arcview下的程序,如果在arcengine里面怎么编写呢?
举报 回复(0) 喜欢(0)     评分
wrbwf
路人甲
路人甲
  • 注册日期2003-12-01
  • 发帖数944
  • QQ
  • 铜币2516枚
  • 威望0点
  • 贡献值0点
  • 银元0个
8楼#
发布于:2004-11-07 15:59
<img src="images/post/smile/dvbbs/em02.gif" />
举报 回复(0) 喜欢(0)     评分
ahshegis
路人甲
路人甲
  • 注册日期2004-10-22
  • 发帖数181
  • QQ
  • 铜币847枚
  • 威望0点
  • 贡献值0点
  • 银元0个
9楼#
发布于:2004-11-10 20:40
<img src="images/post/smile/dvbbs/em05.gif" />
举报 回复(0) 喜欢(0)     评分
上一页
游客

返回顶部