arcgis api for flex 高级主题(二) 自定义控件的开发

上一篇 / 下一篇  2008-10-19 08:27:23 / 个人分类:mushup

3sNews.Net——3S社区&资讯平台2^UJ&hm0x)|2s

h_*j#VM3Ie6188arcgis api for flex 本身只提供了Navigation和ScaleBar两个控件,并且api中

对如何开发自定义的控件做详细的描述(也可能有,是我没找到)、
3c/d*YO@6188下面就介绍一下我的方法。以实现一个能在地图上动态显示当前鼠标经纬度的控

件。
Qkt$\:a,b61881 定义控件类,集成UIComponent ,实现IMapAware接口
o2P4s^|'b)n61882 重载createChildren函数3sNews.Net——3S社区&资讯平台pIB$p;n P9v
3 实现public function set map(map:Map) : void 函数3sNews.Net——3S社区&资讯平台4z:[B~^\.Su0C
4 添加自己的功能代码3sNews.Net——3S社区&资讯平台RI$T \ctz LP%xW
直接放代码

Flash:demo3sNews.Net——3S社区&资讯平台.xT m(h'aBVcNy'a

R;vp7R8Y(}?D!Wl6188package com.esri
9UQUD+C6188{3sNews.Net——3S社区&资讯平台^-K4~)}XC
  import com.esri.ags.*;
-Y7| p&Hl?3Db6188     import com.esri.ags.events.*;3sNews.Net——3S社区&资讯平台SeWss]:ga
     import com.esri.ags.geometry.MapPoint;
K)r7}XO~6188     import com.esri.ags.utils.*;3sNews.Net——3S社区&资讯平台m4IE_9z|oSa
  import flash.display.*;
"]-@^iSx8d*s x6188  import flash.events.MouseEvent;
1w}+ia&J}6188  import flash.filters.*;3sNews.Net——3S社区&资讯平台H6g-?a*Ov~%WX,{
  import flash.text.*;3sNews.Net——3S社区&资讯平台o?vN KOvA
  import flash.geom.Point;
)eqm8Dw6188  import mx.core.*;3sNews.Net——3S社区&资讯平台E"s%XdXR`G7t
  import mx.events.*;
A&Rl e%Xk&N [ ?f6188 public class ESRIStatusBar extends UIComponent implements

IMapAware
6C3uK?"Ni7V6188 {
/n$T@juq2o6u6188  private var m_map:Map;3sNews.Net——3S社区&资讯平台;m*W^+nUdj,r
   private var m_stateLabel:TextField;
$C b CCs6188  public function ESRIStatusBar()3sNews.Net——3S社区&资讯平台s3s0l4` E K F
  {3sNews.Net——3S社区&资讯平台'aW`&JTx-o
   m_stateLabel = new TextField();3sNews.Net——3S社区&资讯平台lD"X&i+_ T4]
   m_stateLabel.width = 152;
Zp_ {z1U*xQLe6188  }3sNews.Net——3S社区&资讯平台OM-O*Fy T M:R U
        override protected function updateDisplayList(log:Number,

pow:Number) : void
{!A$j zn6188        {3sNews.Net——3S社区&资讯平台 x.a"O,t.qFa#H1Y
           super.updateDisplayList(log, pow);3sNews.Net——3S社区&资讯平台|s$Dc V4y
            return;
$A6]H&|`9z6188        }// end function
,PuE4|/t6188  override protected function createChildren() : void3sNews.Net——3S社区&资讯平台:J_)`g4B'P
        {
Y3IF3Tp"Bc*D)Z-q.H6188            super.createChildren();
$b-]'Z}4p)u}(|/]8u6188     3sNews.Net——3S社区&资讯平台m%W0jK1\'[1Y8Q3M.L
        var pnt:Point  = new Point;3sNews.Net——3S社区&资讯平台:Y7Hp1Iow,N4v
        if(m_map.loaded)3sNews.Net——3S社区&资讯平台3\|^QP7j(p
        {3sNews.Net——3S社区&资讯平台S#h,v V)y
   var mapPnt:MapPoint = new MapPoint

(m_map.extent.xmax,m_map.extent.ymin);
4uc%RO@)Y't6188   pnt = m_map.toScreen(mapPnt);
U`7]q ]~*Z6188    m_stateLabel.x = pnt.x-150;3sNews.Net——3S社区&资讯平台'^c"{ln:D8bV
            m_stateLabel.y = pnt.y-16;
7Hs-a*At2g8M3I6188        }
8[2M3c3M-I`"hUW*D6188   
Z3EX"kY6188          
#i&NcsXygk+G6188 3sNews.Net——3S社区&资讯平台9C8Y8x;n/o8C
            addChild(m_stateLabel);

            return;3sNews.Net——3S社区&资讯平台*MGO+o8vUi
        }// end function3sNews.Net——3S社区&资讯平台!oYZ;CeZ
     private function mouseMoveHandler

(event:MouseEvent):void3sNews.Net——3S社区&资讯平台OQ&o o XF4lkwk _
     {
:@3q6Jk(Zf`^O j0Q6188      if(m_map)
{V~H'yW.J6188      {
$W6J^m2BL v6188       if(m_map.loaded)3sNews.Net——3S社区&资讯平台 F/oC&f&E
       {3sNews.Net——3S社区&资讯平台-Y$uN*u(rC_
        var mapPoint : MapPoint =

m_map.toMapFromStage(event.stageX, event.stageY);3sNews.Net——3S社区&资讯平台&R7d@/{)f t
        m_stateLabel.text =

"x="+mapPoint.x.toString()+" , y="+mapPoint.y.toString();
&o4h lU8R6188       }
L5uCyE*I6188      }3sNews.Net——3S社区&资讯平台3^/]+P2h0\4O wT
     }
5Y W_*Ea~A6188     private function extentChangeHandler

(event:ExtentEvent):void3sNews.Net——3S社区&资讯平台(OEH+x]9K!_2P
     {
bXf_'IG4R6188      var pnt:Point  = new Point;
'}.g1pXNfQ$cz4V6188   var mapPnt:MapPoint = new MapPoint

(m_map.extent.xmax,m_map.extent.ymin);
`8Q{g Vv\ o.P6188   pnt = m_map.toScreen(mapPnt);
Dxi!F b4j$j-|%G6188   
W%F0B7dy/g6188            m_stateLabel.x = pnt.x-150;3sNews.Net——3S社区&资讯平台,Q0RZAon6rbk1\2C
            m_stateLabel.y = pnt.y-16;3sNews.Net——3S社区&资讯平台(Zct+f2y.J(v]!\
     }3sNews.Net——3S社区&资讯平台){z@y D@
        public function set map(map:Map) : void
t8be!f$},[ sl6188        {3sNews.Net——3S社区&资讯平台(@!@lPux
            m_map = map;3sNews.Net——3S社区&资讯平台i5ic7i#tXe3_RE
            m_map.addEventListener

(MouseEvent.MOUSE_MOVE,mouseMoveHandler);
f/e3m7D _5WM6188            m_map.addEventListener(ExtentEvent.EXTENT_CHANGE,

extentChangeHandler);
)IF2r0^@6188        }// end function3sNews.Net——3S社区&资讯平台b1tu$O&|
 }
@3DT!R;V"~n6188}

把这个控件添加到map上3sNews.Net——3S社区&资讯平台 ` C2b&?~7qV&qh
var statusBar:ESRIStatusBar = new ESRIStatusBar();
k ~ ?Nb;X$\h6188             IMapAware(statusBar).map = EsriMap;3sNews.Net——3S社区&资讯平台`4^c|%x4Q0\5~-|
             EsriMap.addChild(statusBar);  
|L QVk1L6188放代码
S;L7UT${#|hf6188<?xml version="1.0" encoding="utf-8"?>3sNews.Net——3S社区&资讯平台G EBA!N+t.w$]
<mx:Application
6NK2@2KL+yBl|6188    xmlns:mx="http://www.adobe.com/2006/mxml"
g5l*D/n#`6188    xmlns:esri="http://www.esri.com/2008/ags"
Z2n*?;akE6188    styleName="plain" >
{"L+| _"Oh|'^%fa6188    <mx:Script>
,|z,O!x~vw&p6188     <![CDATA[
h R9Vsf6188       import com.esri.*;
O}d O)Ae6A i{6188   import com.esri.ags.*;3sNews.Net——3S社区&资讯平台7}bYTKI1}!B
      private function EsriMapCreateComplete():void
;u'}3x z1g w,wU6188      {
Q0u)eT:uh N'S pz-a6188       var statusBar:ESRIStatusBar = new

ESRIStatusBar();3sNews.Net——3S社区&资讯平台.m%N-?m0Z&?XO(l
             IMapAware(statusBar).map = EsriMap;
jw{&\A }2J)A B)f+C6188             EsriMap.addChild(statusBar);  
9~O-T#@Nt ha6188      }3sNews.Net——3S社区&资讯平台eH["I z$p*PC
     ]]>
aUrzG$D%H6188    </mx:Script>3sNews.Net——3S社区&资讯平台5x5I9eiLU-T ^
    <esri:Map crosshairVisible="true" id="EsriMap"

creationComplete="EsriMapCreateComplete()">
} R(Fo&{2f6188        <esri:ArcGISTiledMapServiceLayer
a|R:W%tR&v5k w6188           

url="http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_StreetMap

_World_2D/MapServer" />
;O cb8q*Vl*q1Vg M;M6188    </esri:Map>
v']mBI!_0KQl*}6188</mx:Application>


TAG:

引用 删除 Guest   /   2008-12-19 15:29:59
真的快想放弃了
 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

Open Toolbar