gzstyxb
路人甲
路人甲
  • 注册日期2004-09-22
  • 发帖数358
  • QQ
  • 铜币1045枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:2072回复:1

如何判断一个ILayer(IGroupLayer)是否按照比例显示?

楼主#
更多 发布于:2008-08-30 11:26
<P>ArcMap能够设置一个ILayer(或者说是IGroupLayer)是否按给定比例尺条件显示图形。但是我在ArcEngine里面始终没有找到对应查询接口,有知道的,请指点指点。</P>
喜欢0 评分0
由爱故生忧, 由爱故生怖. 若离于爱者, 无忧亦无怖.
hahahan
路人甲
路人甲
  • 注册日期2007-08-05
  • 发帖数60
  • QQ
  • 铜币251枚
  • 威望0点
  • 贡献值0点
  • 银元0个
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>
举报 回复(0) 喜欢(0)     评分
游客

返回顶部