arcgis api for flex 高级主题(一) esri tilemap 四叉树索引研究

上一篇 / 下一篇  2008-10-18 19:21:35 / 个人分类:mushup

arcgis api for flex 高级主题(一) esri tilemap 四叉树索引研究3sNews.Net——3S社区&资讯平台-T3`c:d L/y
esri tilemap四叉树索引和google map 的四叉树索引是有区别的,区别在于

google map在第一次分幅的时候分为4片,但esri tilemap只分为2片,相当于在

第三和第四象限没有图。只有(0,0)(0,1)的时候才有图,这就造成了google

map和esri tilemap融合的时候比较复杂,不能使用相同的分幅方法。3sNews.Net——3S社区&资讯平台8z!QoUS8}pK
在下面的例子里,实现了根据nzoom,以及经纬度取esri服务器上对应的图片。3sNews.Net——3S社区&资讯平台?{9x]0e.Z-v ?"U
图片是512*512的。这个算法是用flex来实现的,也可以用其他语言去实现,然后

从服务器上裁图。(注意大家不要搞N个线程去下arcgisonline上的数据,不然会

把arcgisonline的服务搞挂的O(∩_∩)O哈哈~)


7Mqi1fix0Flash:demo3sNews.Net——3S社区&资讯平台0vnX ]D7Wt#}T[

j:k4Nu"E*O of5WY0什么都不多说了,直接放代码。

 

<?xml version="1.0" encoding="utf-8"?>
z/n.t&XZ0<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"3sNews.Net——3S社区&资讯平台5r|3L xl/?BQC
    xmlns:esri="http://www.esri.com/2008/ags"3sNews.Net——3S社区&资讯平台{"p%H i|]
    layout="absolute"3sNews.Net——3S社区&资讯平台,rY\tf(U0g:z
>3sNews.Net——3S社区&资讯平台mk"z"~N
    <mx:Script>3sNews.Net——3S社区&资讯平台zK7s k*K*j V&@(O
        <![CDATA[3sNews.Net——3S社区&资讯平台"D8XI7Cr#P
         import com.esri.ags.geometry.MapPoint;
_s.A ~!qj.qaJ U0            import mx.containers.HBox;
6G9M U/u1^v }\/jKS0         import mx.containers.VBox;
I&l\MdO9v$W0         import mx.controls.Image;3sNews.Net——3S社区&资讯平台K1T4ap(O8k {
         import mx.rpc.events.ResultEvent;3sNews.Net——3S社区&资讯平台H;\6_ i-j
         //导入flash的命名空间
Jch$U6e f$j/c0         import mx.collections.ArrayCollection;3sNews.Net——3S社区&资讯平台!J`5f {.BSK7I
            import mx.controls.Alert;  
~^MYz5d Y?8{,@fo0            import mx.controls.Button;3sNews.Net——3S社区&资讯平台 J E:n2` eT~ J2Nj
            import mx.rpc.AsyncResponder;
J{5\U2r0            import flash.geom.Point;
j-ij g#^9Q K)ge0            import mx.rpc.events.FaultEvent;
3t3w],a0CL [s0            import mx.printing.FlexPrintJobScaleType;3sNews.Net——3S社区&资讯平台*W5NA5^-KN4|;Ei
            import mx.printing.FlexPrintJob;
Q,M:V(|%U0            import mx.rpc.soap.mxml.Operation;
D.l PGBa5R$E0            import mx.containers.Canvas;3sNews.Net——3S社区&资讯平台*DY'CW+W;Xc
             import flash.text.*;3sNews.Net——3S社区&资讯平台~Ps$W:G)q"i
             import mx.controls.Text;3sNews.Net——3S社区&资讯平台#N \?!J;^~"y"p&l
           3sNews.Net——3S社区&资讯平台$B:R D:LB&Rbvg$_&f
            private function GetURL(nZoom:int,mp:Point):String3sNews.Net——3S社区&资讯平台!x yh(ULR5N {
            {
)^v?p;F9U0             varurl:String= new String();
/|+W7GSA~0             url = "";
S)[!Vg4o%I9e3\0             if(nZoom < 0 ||nZoom>15)
r;[Q#prh)O4tF0              return url;3sNews.Net——3S社区&资讯平台,G)r1`{1I_&cE
             if(mp.x >180||mp.x<-180 ||mp.y>90||mp.y<-90)3sNews.Net——3S社区&资讯平台+J6W}%zo;][ Q
                 return url;
T5g:}G%?U"cJj}+T0             var pnt:Point = GetTileXY(nZoom,mp);
6\(k^#Q+IdBV0Sf0             3sNews.Net——3S社区&资讯平台!M-|RG-Z9XzoC|,h_
             url = "http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_StreetMap_World_2D/MapServer/tile/"+nZoom.toString()+"/"+pnt.y.toString()+"/"+pnt.x.toString();
SST5z4E4e0             return url;3sNews.Net——3S社区&资讯平台OD/@)J5C#o
            }
9sj;Lc OJV0            private function GetTileXY(nZoom:int,mp:Point):Point
n5R1O6Km~#vi|-[0  {3sNews.Net——3S社区&资讯平台{G9?8E n*S L\#P
   var wx:Number;3sNews.Net——3S社区&资讯平台U hJW%CU3k
   var wy:Number;
+LNc| h6}Y+u0   var cx:Number;3sNews.Net——3S社区&资讯平台/o U [lXu
   var cy:Number;
|2fWrQ5]"[ qB0   var xArray:Array = new Array();3sNews.Net——3S社区&资讯平台 nW5e)V8oE/].}
   var yArray:Array = new Array();3sNews.Net——3S社区&资讯平台-q w8@0r'O
   3sNews.Net——3S社区&资讯平台Y?RG+Hu
   cx =  0;3sNews.Net——3S社区&资讯平台hky R9BSh5dCk
   cy = -90;
2^'kMtMMz Ka0   wx = wy = 180;
)o#RG X:mU0   var i:int = 0;3sNews.Net——3S社区&资讯平台Z'g^[I)S"O
   var x:int = 0;
G,\#gb Le ~4{+r0   var y:int = 0;3sNews.Net——3S社区&资讯平台 Z#a.s[LW#J[er)`
   for (i = 0; i <= nZoom; i++)3sNews.Net——3S社区&资讯平台0x3z@9?t}!a`,}y
   {3sNews.Net——3S社区&资讯平台)G-h+| KSYc r7`,t2t L
    if (mp.x >= cx)
TU#yz9E/O9u0    {
qRd4U rT0     if (mp.y >= cy)
:Y2?d7wKFX$E0     {
$l&dt/KlM:Nz0      xArray.push(1);3sNews.Net——3S社区&资讯平台 Md-Y-D2HwBy \
      yArray.push(0);
7i?tG#Xn0      cx += wx/2;3sNews.Net——3S社区&资讯平台 \.s6dbjc3S k
      cy += wy/2;3sNews.Net——3S社区&资讯平台 `De t)_C
     }3sNews.Net——3S社区&资讯平台-X"O!z}C:oa;D1P
     else
AqM,m,Pm3r0     {3sNews.Net——3S社区&资讯平台"H l P x`4U] T{
      xArray.push(1);3sNews.Net——3S社区&资讯平台e9O ~i7cpw"qGD
      yArray.push(1);
({i&|f8_;r M `0      cx += wx/2;
:|yL JK'k0      cy -= wy/2;3sNews.Net——3S社区&资讯平台v,YwIf0i+Q E
     }3sNews.Net——3S社区&资讯平台8f#P$N;V-yh,ay
    }3sNews.Net——3S社区&资讯平台C7aJ/e4HjkB
    else3sNews.Net——3S社区&资讯平台$k| BJ+S+Xh
    {3sNews.Net——3S社区&资讯平台 ag h?$c#\.?!}
     if (mp.y < cy)3sNews.Net——3S社区&资讯平台[0["o(]N T_~-^
     {
7i"c7[)K7YzW0      xArray.push(0);3sNews.Net——3S社区&资讯平台8zDF4YV Z#`(B
      yArray.push(1);3sNews.Net——3S社区&资讯平台6jjGnr+~Nd
      cx -= wx/2;
^8t)rmt!H0      cy -= wy/2;3sNews.Net——3S社区&资讯平台;g-bDL8A9b.Q
     }3sNews.Net——3S社区&资讯平台,T)t-aV.Xq;];a
     else
3J c(W#^YC.I{ m0     {
&XB5k^|0      xArray.push(0);3sNews.Net——3S社区&资讯平台%mKy%brM,h"ea
      yArray.push(0);3sNews.Net——3S社区&资讯平台`,W~Y[8OF
      cx -= wx/2;3sNews.Net——3S社区&资讯平台]oB DwK
      cy += wy/2;3sNews.Net——3S社区&资讯平台| T6q4wfr
     }
~l:Q6yJ'm1J*T\0    }3sNews.Net——3S社区&资讯平台Wx,~!Q%|rM
    wx = wx/2;3sNews.Net——3S社区&资讯平台J}"ihuheVi}
    wy = wy/2;3sNews.Net——3S社区&资讯平台"H"D3X`at8H&DQ
   } 3sNews.Net——3S社区&资讯平台q/`iT]P
   for(i = nZoom;i >=0;i--)3sNews.Net——3S社区&资讯平台,PS| O6F
   {
_(A~ e'_-_l~0    x = x+xArray[i]*Math.pow(2,nZoom-i);3sNews.Net——3S社区&资讯平台-R)yTT%hcTz+wb
    y = y+yArray[i]*Math.pow(2,nZoom-i);3sNews.Net——3S社区&资讯平台HK$@sQZ
   }3sNews.Net——3S社区&资讯平台 S+[TO'A{x~
   var pnt :Point = new Point(x,y);
2z B e W8C;d0   return pnt;
w Gf7i*Jcu}0  }
#M5{8jjB H~e&l0    private function OnClick():void3sNews.Net——3S社区&资讯平台0_*W/w`p ^ X*ME
    {3sNews.Net——3S社区&资讯平台K.E a!b uk\
     var zoom :int = new int(nZoom.text);
6hj"MJl l0     var x:Number = new Number(Lon.text) ;3sNews.Net——3S社区&资讯平台V*x at\5m f
     var y:Number = new Number(Lat.text);
6Le0D/{;Bg g2MD0     var pnt:Point = new Point(x,y);3sNews.Net——3S社区&资讯平台'h8O!B,A o"x$}L
     var url :String = GetURL(zoom,pnt);3sNews.Net——3S社区&资讯平台+D^/g'ks3UP8X\
   myImage.load(url);3sNews.Net——3S社区&资讯平台{+^mv_0h*o4Z#V
    }
D1D]c7e2ia U0        ]]>3sNews.Net——3S社区&资讯平台.Eo-P2c'Inr`9C
    </mx:Script>
y0d;uL+C0    <mx:VBox>
E.Wo s5R/`g0     <mx:Panel id = "myPanel" width="512" height="512">
ZC:NyVHTnp*h"Z}0   <mx:Image id = "myImage" width="100%" height="100%"/> 
;MP M$fg K_'X0   </mx:Panel>
c9MQ_Zpx u3v0   <mx:HBox>3sNews.Net——3S社区&资讯平台+L#@0f1Ph
    <mx:VBox>3sNews.Net——3S社区&资讯平台mFa)@'k'u
     <mx:HBox>3sNews.Net——3S社区&资讯平台 A z3c9B `fA
       <mx:Label text="级别"/>3sNews.Net——3S社区&资讯平台7Uw_@h1mU4t.{ yl$H@
      <mx:TextInput width="30%" id="nZoom" text="2" enter="OnClick()"/>
v8cy2U0z4S)cc0     </mx:HBox>3sNews.Net——3S社区&资讯平台#@n Z%GT/j
    <mx:HBox>
4w { azk6~+P0       <mx:Label text="纬度"/>3sNews.Net——3S社区&资讯平台p3s%q9u'i5@ M
      <mx:TextInput width="30%" id="Lat" text="40" enter="OnClick()"/>
qWB)}Y cx\9bSd0     </mx:HBox>
#i1qT [&O0     <mx:HBox>3sNews.Net——3S社区&资讯平台"@ T_,A2p4\YM#[
       <mx:Label text="经度"/>3sNews.Net——3S社区&资讯平台,o ]Q:JA'FD/[F9D
      <mx:TextInput width="30%" id="Lon" text="116"  enter="OnClick()"/>3sNews.Net——3S社区&资讯平台 m#U"f#ExB[i W
     </mx:HBox>
,ugx k U~ w\0   </mx:VBox>
cJcsh.B5W0   <mx:Button  label="GetImage"  click="OnClick()"/>3sNews.Net——3S社区&资讯平台.j EpkkQ+@
   </mx:HBox>3sNews.Net——3S社区&资讯平台3^o,q#Y wD/D
    </mx:VBox>


,_Zm-~GU$~il0</mx:Application>


TAG:

 

评分:0

我来说两句

显示全部

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

Open Toolbar