阅读:2262回复:1
如何判断一个ILayer(IGroupLayer)是否按照比例显示?
<P>ArcMap能够设置一个ILayer(或者说是IGroupLayer)是否按给定比例尺条件显示图形。但是我在ArcEngine里面始终没有找到对应查询接口,有知道的,请指点指点。</P>
|
|
|
1楼#
发布于:2008-09-03 18:54
<P>可以吧,至少我知道的在arcgis desktop里可以直接编码实现的。</P>
<P>转载那本经典例程上的例子:</P> <H3 0cm 0cm 0pt; TEXT-INDENT: 0cm"><A><FONT size=3>如何实现在ArcMap中放大缩小地图</FONT></A><p></p></H3> <P 0cm 0cm 0pt; TEXT-INDENT: 17.95pt; mso-char-indent-count: 1.71">用户点击按钮后,可以在地图上进行点击或者拖放矩形框来放大缩小地图<p></p></P> <P 0cm 0cm 0pt 39pt; TEXT-INDENT: -39pt; mso-list: l0 level2 lfo4; tab-stops: 0cm 9.0pt list 39.0pt">l 要点<p></p></P> <P 0cm 0cm 0pt; TEXT-INDENT: 17.95pt; tab-stops: list 0cm; mso-char-indent-count: 1.71">因为考虑到用户可以单击放大缩小,也可以拖放矩形框来放大缩小,所以不可以直接使用IRubberBand接口,而是采用INewEnvelopeFeedback接口<p></p></P> <P 0cm 0cm 0pt 39pt; TEXT-INDENT: -39pt; mso-list: l1 level1 lfo3; tab-stops: 9.0pt list 39.0pt">l 程序说明<p></p></P> <P 0cm 0cm 0pt; TEXT-INDENT: 17.95pt; tab-stops: list 0cm left 27.0pt; mso-char-indent-count: 1.71">主要通过InewEnvelopeFeedback.StartPoint 和MoveTo方法来绘制矩形框,然后赋值给IActiveView.Extend属性,达到地图的放大缩小<p></p></P> <P 0cm 0cm 0pt 39pt; TEXT-INDENT: -39pt; mso-list: l2 level1 lfo2; tab-stops: 9.0pt list 39.0pt">l 代码<p></p></P> <P> <TABLE #cccccc; MARGIN: auto auto auto 9.05pt; BORDER-COLLAPSE: collapse; mso-padding-alt: 0cm 4.95pt 0cm 4.95pt" cellSpacing=0 cellPadding=0 border=0> <TR 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes"> <TD #f4f8fc; PADDING-RIGHT: 4.95pt; BORDER-TOP: #f4f8fc; PADDING-LEFT: 4.95pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f4f8fc; WIDTH: 354.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #f4f8fc; BACKGROUND-COLOR: transparent" vAlign=top width=473> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly">Private m_pFeedbackEnv As INewEnvelopeFeedback<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly">Private m_pPoint As IPoint<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly">Private m_bIsMouseDown As Boolean<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly">Private m_pActiveView As IActiveView<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly"><p> </p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly">Private Sub UIToolControl1_MouseDown(ByVal button As Long, ByVal shift As Long, ByVal x As Long, _<p></p></P> <P 0cm 0cm 0pt; TEXT-INDENT: 152pt; LINE-HEIGHT: 10pt; mso-char-indent-count: 19.0; mso-line-height-rule: exactly">ByVal y As Long)<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly"> Dim pMxDocument As IMxDocument<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly">On Error GoTo ErrorHandler:<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly"> 'Left Button Check<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly"> If button <> 1 Then Exit Sub<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly"> If m_pActiveView Is Nothing Then<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly"> Set pMxDocument = ThisDocument<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly"> Set m_pActiveView = pMxDocument.ActivatedView<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly"> End If<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly"> '得到起始点<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly"> Set m_pPoint = m_pActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(x, y)<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly"> m_bIsMouseDown = True<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly"> Exit Sub<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly">ErrorHandler:<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly"> MsgBox Err.Description<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly">End Sub<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly"><p> </p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly">Private Sub UIToolControl1_MouseMove(ByVal button As Long, ByVal shift As Long, ByVal x As Long, _<p></p></P> <P 0cm 0cm 0pt; TEXT-INDENT: 152pt; LINE-HEIGHT: 10pt; mso-char-indent-count: 19.0; mso-line-height-rule: exactly">ByVal y As Long)<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly">On Error GoTo ErrorHandler:<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly"> If Not m_bIsMouseDown Then Exit Sub<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly"> If m_pFeedbackEnv Is Nothing Then<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly"> Set m_pFeedbackEnv = New NewEnvelopeFeedback<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly"> Set m_pFeedbackEnv.Display = m_pActiveView.ScreenDisplay<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly"> m_pFeedbackEnv.Start m_pPoint<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly"> End If<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly"> Set m_pPoint = m_pActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(x, y)<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly"> 'Draw Envelope<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly"> m_pFeedbackEnv.MoveTo m_pPoint<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly"> Exit Sub<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly">ErrorHandler:<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly"> MsgBox Err.Description<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly">End Sub<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly"><p> </p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly">Private Sub UIToolControl1_MouseUp(ByVal button As Long, ByVal shift As Long, ByVal x As Long, _<p></p></P> <P 0cm 0cm 0pt; TEXT-INDENT: 144pt; LINE-HEIGHT: 10pt; mso-char-indent-count: 18.0; mso-line-height-rule: exactly">ByVal y As Long)<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly"> Dim pEnv As IEnvelope<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly">On Error GoTo ErrorHandler:<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly"> 'Left Button Check<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly"> If button <> 1 Then Exit Sub<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly"> If (m_pFeedbackEnv Is Nothing) Then<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly"> 'User Only Click Map with left button<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly"> Set pEnv = m_pActiveView.Extent<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly"> '如果是缩小的话,将这里的两个0.5都改成1.5<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly"> pEnv.Expand 0.5, 0.5, True<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly"> Else<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly"> 'User Draw a Envelope<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly"> Set pEnv = m_pFeedbackEnv.Stop<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly"> End If<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly"> m_pActiveView.Extent = pEnv<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly"> m_bIsMouseDown = False<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly"> Set m_pPoint = Nothing<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly"> Set m_pFeedbackEnv = Nothing<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly"> m_pActiveView.Refresh<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly"> Exit Sub<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly">ErrorHandler:<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly"> MsgBox Err.Description<p></p></P> <P 0cm 0cm 0pt; LINE-HEIGHT: 10pt; mso-line-height-rule: exactly">End Sub<p></p></P></TD></TR></TABLE></P> |
|