阅读:3057回复:10
AO+VB:怎样实现特征的选择
<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> |
|
1楼#
发布于:2004-05-20 12:54
<P>给你点建议哦!</P><P>在例子中有个QueryCommand.vbp,其中有个用不同的shape来选择地物的功能,你只需要将它看懂,然后将被选中的地物的属性读取出来就可以了!呵呵,反正我是这样做的,搞定了!而且例子很简单,代码不是太复杂,我都看懂了,你应该也能!嘻嘻</P><img src="images/post/smile/dvbbs/em02.gif" />
|
|
|
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> |
|
|
4楼#
发布于:2004-05-20 16:56
<P>可以运行 !!!</P><P>太谢谢了</P>
|
|
5楼#
发布于:2004-10-28 20:13
<img src="images/post/smile/dvbbs/em03.gif" />
|
|
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" />
|
|
|
7楼#
发布于:2004-11-06 10:23
请问你这个是不是在arcview下的程序,如果在arcengine里面怎么编写呢?
|
|
8楼#
发布于:2004-11-07 15:59
<img src="images/post/smile/dvbbs/em02.gif" />
|
|
9楼#
发布于:2004-11-10 20:40
<img src="images/post/smile/dvbbs/em05.gif" />
|
|
上一页
下一页