Show
Ignore:
Timestamp:
12/06/07 12:36:29 (13 months ago)
Author:
gyuque
Message:

lang/actionscript/swfgmap: zoom

Location:
lang/actionscript/swfgmap/trunk/gyuque/gmap
Files:
8 modified

Legend:

Unmodified
Added
Removed
  • lang/actionscript/swfgmap/trunk/gyuque/gmap/GMapView.as

    r2496 r2528  
    5858                } 
    5959                 
    60                 protected function fireViewportChange():void 
     60                protected function fireViewportChange(dx:Number = 0, dy:Number = 0, dzm:int = 0):void 
    6161                { 
    6262                        var e:GMapViewEvent = new GMapViewEvent(mCurrentViewport, GMapViewEvent.VIEWPORT_CHANGED); 
     63                        e.screenDX = dx; 
     64                        e.screenDY = dy; 
     65                        e.dZoom = dzm; 
    6366                        dispatchEvent(e); 
    6467                } 
     
    9194                protected function hookStdEvents():void 
    9295                { 
    93                          addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove); 
    94                          addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown); 
    95                          addEventListener(MouseEvent.MOUSE_UP  , onMouseUp); 
    96                          addEventListener(MouseEvent.MOUSE_OUT , onMouseOut); 
    97                 } 
    98                  
     96                         addEventListener(MouseEvent.MOUSE_MOVE , onMouseMove); 
     97                         addEventListener(MouseEvent.MOUSE_DOWN , onMouseDown); 
     98                         addEventListener(MouseEvent.MOUSE_UP   , onMouseUp); 
     99                         addEventListener(MouseEvent.MOUSE_OUT  , onMouseOut); 
     100                         addEventListener(MouseEvent.MOUSE_WHEEL, onMouseWheel); 
     101                } 
     102 
     103                protected function onMouseWheel(e:MouseEvent):void 
     104                { 
     105                        zoom((e.delta > 0) ? 1 : -1); 
     106                } 
     107                 
     108                protected function zoom(d:int):void 
     109                { 
     110                        var z:int = mCurrentViewport.zoom; 
     111                        var oldz:int = z; 
     112                        z += d; 
     113                        if (z < 0)  z = 0; 
     114                        if (z > 16) z = 16; 
     115                         
     116                        mCurrentViewport.zoom = z; 
     117                        fireViewportChange(0,0,z - oldz); 
     118                } 
     119 
    99120                protected function onMouseOut(e:MouseEvent):void 
    100121                { 
     
    111132                                 
    112133                                cls(); 
    113                                 moveByPixel(mDrag.dx, mDrag.dy); 
     134                                puts((mCurrentViewport.lat/0.0174533)+"  "+(mCurrentViewport.lng/0.0174533)); 
     135                                moveByPixel(-mDrag.dx, -mDrag.dy); 
    114136                                puts(e.stageX.toString()+","+e.stageY.toString()+"   "+mDrag.dx.toString()+","+mDrag.dy.toString()); 
    115137                        } 
     
    132154                        { 
    133155                                mCurrentViewport.moveByPixel(dx, dy); 
    134                                 fireViewportChange(); 
     156                                fireViewportChange(dx, dy); 
    135157                        } 
    136158                } 
  • lang/actionscript/swfgmap/trunk/gyuque/gmap/GMapViewEvent.as

    r2384 r2528  
    88 
    99                private var mViewport:GMapViewport; 
     10                private var mScrDX:Number; 
     11                private var mScrDY:Number; 
     12                private var mDZ:int; 
    1013                 
    1114                public function GMapViewEvent(vp:GMapViewport, t:String) 
     
    1922                        return mViewport; 
    2023                } 
     24                 
     25                public function set screenDX(d:Number):void 
     26                { 
     27                        mScrDX = d; 
     28                } 
     29                public function get screenDX():Number 
     30                { 
     31                        return mScrDX; 
     32                } 
     33 
     34                public function set screenDY(d:Number):void 
     35                { 
     36                        mScrDY = d; 
     37                } 
     38                public function get screenDY():Number 
     39                { 
     40                        return mScrDY; 
     41                } 
     42 
     43                public function get dZoom():int 
     44                { 
     45                        return mDZ; 
     46                } 
     47                public function set dZoom(d:int):void 
     48                { 
     49                        mDZ = d; 
     50                } 
    2151        } 
    2252} 
  • lang/actionscript/swfgmap/trunk/gyuque/gmap/GMapViewport.as

    r2485 r2528  
    88                private var mLatlng:LatLng  = new LatLng(); 
    99                private var mNrmXY:Point    = new Point(); 
    10                 private var mScreenXY:Point = new Point(); 
     10                //private var mScreenXY:Point = new Point(); 
    1111                private var mBitmapXY:Point = new Point(); 
    1212                private var mViewSize:Point = new Point(); 
     
    3636                         
    3737                        calcXY(); 
    38                         mScreenXY.x = 0; 
    39                         mScreenXY.y = 0; 
     38                        //mScreenXY.x = 0; 
     39                        //mScreenXY.y = 0; 
    4040                } 
    4141                 
     
    7474                        mZoom = z; 
    7575                        mMapSize = Number( GMapCalc.calcMapSize(z) ); 
     76 
     77                        calcXY(); 
     78//                      mScreenXY.x = 0; 
     79//                      mScreenXY.y = 0; 
    7680                } 
    7781                 
     
    8488                public function moveByPixel(dx:Number, dy:Number):void 
    8589                { 
    86                         mScreenXY.x += dx; 
    87                         mScreenXY.y += dy; 
    88                          
    8990                        var v:Point = new Point(); 
    9091                        transformVectorScreenToView(dx, dy, v); 
    9192                         
    92                         mBitmapXY.x += dx; 
    93                         mBitmapXY.y += dy; 
     93                        mBitmapXY.x += v.x; 
     94                        mBitmapXY.y += v.y; 
    9495                         
    9596                        mNrmXY.x = mBitmapXY.x / mMapSize; 
     
    117118                } 
    118119                 
     120                public function get lat():Number 
     121                { 
     122                        return mLatlng.lat; 
     123                } 
    119124                 
     125                public function get lng():Number 
     126                { 
     127                        return mLatlng.lng; 
     128                } 
     129                /* 
    120130                public function get screenX():Number 
    121131                { 
     
    127137                        return mScreenXY.y; 
    128138                } 
    129                  
     139                */ 
    130140                public function get to_screen_transform():Matrix 
    131141                { 
  • lang/actionscript/swfgmap/trunk/gyuque/gmap/Layer.as

    r2496 r2528  
    77        public class Layer extends Sprite 
    88        { 
    9                 private var prevScreenXY:Point; 
    109                protected var mViewport:GMapViewport; 
     10                protected var mIndex:int; 
    1111                 
    1212                protected var mLastDX:Number; 
    1313                protected var mLastDY:Number; 
    1414                protected var mParent:Layer; 
     15                protected var mEventSource:EventDispatcher; 
    1516                 
    1617                public function Layer(eventSrc:EventDispatcher, parent:Layer) 
    1718                { 
    1819                        eventSrc.addEventListener(GMapViewEvent.VIEWPORT_CHANGED, onViewportChanged); 
     20                        mEventSource = eventSrc; 
    1921                        mParent = parent; 
    2022                } 
    2123                 
    22                 protected function onViewportChanged(e:GMapViewEvent):void 
     24                public function get layerIndex():int 
    2325                { 
    24                         var v:GMapViewport = e.viewport; 
    25                         mViewport = v; 
    26                          
    27                         if (!prevScreenXY) 
    28                         { 
    29                                 prevScreenXY = new Point(v.screenX, v.screenY); 
    30                                 updateContent(true); 
    31                         } 
    32                         else 
    33                         { 
    34                                 mLastDX = v.screenX - prevScreenXY.x; 
    35                                 mLastDY = v.screenY - prevScreenXY.y; 
    36                                  
    37                                 prevScreenXY.x = v.screenX; 
    38                                 prevScreenXY.y = v.screenY; 
    39                                 updateContent(false); 
    40                         } 
     26                        return mIndex; 
    4127                } 
    4228                 
    43                 protected function updateContent(refreshAll:Boolean):void 
     29                public function set layerIndex(i:int):void 
    4430                { 
     31                        mIndex = i; 
    4532                } 
     33                 
     34                protected function onViewportChanged(e:GMapViewEvent):void 
     35                {} 
    4636        } 
    4737} 
  • lang/actionscript/swfgmap/trunk/gyuque/gmap/LayerManager.as

    r2496 r2528  
    1616                public function push(lyr:Layer):void 
    1717                { 
     18                        lyr.layerIndex = mLayers.length; 
    1819                        mLayers.push(lyr); 
    1920                        addChild(lyr); 
    2021                } 
    2122                 
    22                 protected override function updateContent(refreshAll:Boolean):void 
     23                protected override function onViewportChanged(e:GMapViewEvent):void 
     24                { 
     25                        var firstset:Boolean = false; 
     26                        if (!mViewport) 
     27                                firstset = true; 
     28                         
     29                        var v:GMapViewport = e.viewport; 
     30                        mViewport = v; 
     31                         
     32                        if (firstset || e.dZoom) 
     33                        { 
     34                                mLastDX = 0; 
     35                                mLastDY = 0; 
     36                                updateContent(true, e); 
     37                        } 
     38                        else 
     39                        { 
     40                                mLastDX = e.screenDX; 
     41                                mLastDY = e.screenDY; 
     42                                updateContent(false, e); 
     43                        } 
     44                }                
     45                 
     46                protected function updateContent(refreshAll:Boolean, e:GMapViewEvent):void 
    2347                { 
    2448                        var v:GMapViewport = mViewport; 
     
    3256                        if (refreshAll) 
    3357                        { 
    34                                  
    3558                                mPanPos.x = 0; 
    3659                                mPanPos.y = 0; 
     
    4164                                mPanPos.y += mLastDY; 
    4265                        } 
    43                         M.tx += mPanPos.x; 
    44                         M.ty += mPanPos.y; 
     66                        M.tx -= mPanPos.x; 
     67                        M.ty -= mPanPos.y; 
    4568                         
    4669                        transform.matrix = M; 
  • lang/actionscript/swfgmap/trunk/gyuque/gmap/ViewportUpdater.as

    r2496 r2528  
    2828                        mUpdateTimer.addEventListener(TimerEvent.TIMER, onTimer); 
    2929                        mUpdateTimer.start(); 
     30                } 
     31                 
     32                public function terminate():void 
     33                { 
     34                        mUpdateTimer.stop(); 
    3035                } 
    3136                 
     
    192197 
    193198                        mListener.getCurrentPanning(p); 
    194                         bx += p.x; 
    195                         by += p.y; 
     199                        bx -= p.x; 
     200                        by -= p.y; 
    196201 
    197202                        mCurViewport.transformVectorViewToScreen(bx, by, p); 
  • lang/actionscript/swfgmap/trunk/gyuque/gmap/googlemaps/GMapMapLayer.as

    r2496 r2528  
    11package gyuque.gmap.googlemaps 
    22{ 
    3         import flash.events.EventDispatcher; 
     3        import flash.events.*; 
    44        import flash.display.*; 
    55        import flash.geom.Point; 
     
    1313                protected var mCenterTY:int; 
    1414                protected var mLoadedTiles:GridHash = new GridHash(); 
     15                 
     16                protected static var I:int = 0; 
     17                protected var _I:int; 
    1518                 
    1619                public function set debug_out(d:IDebugOut):void 
     
    3437                        g.drawRect(-128, -128, 256, 256); 
    3538                        g.endFill(); 
     39                         
     40                        _I=I++; 
    3641                } 
    3742                 
    38                 protected override function updateContent(refreshAll:Boolean):void 
     43                protected override function onViewportChanged(e:GMapViewEvent):void 
    3944                { 
    40                         var v:GMapViewport = mViewport; 
     45                        var firstset:Boolean = false; 
     46                        if (!mViewport) 
     47                                firstset = true; 
     48                                 
     49                        if (e.dZoom) 
     50                        { 
     51                                e.dZoom = 0; 
     52                                relay(e); 
     53                                return; 
     54                        }                                
     55                         
     56                        var v:GMapViewport = e.viewport; 
     57                        mViewport = v;           
    4158                        mVPobs.currentViewport = mViewport; 
     59                } 
     60 
     61                protected function relay(e:GMapViewEvent):void 
     62                { 
     63                        if (mParent) 
     64                        { 
     65                                terminate(); 
     66                                var p:Layer = mParent; 
     67                                p.removeChildAt(layerIndex); 
     68                                 
     69                                var newLayer:GMapMapLayer = new GMapMapLayer(mEventSource, mParent); 
     70                                newLayer.layerIndex = layerIndex; 
     71                                newLayer.debug_out = mVPobs.dout; // 
     72                                p.addChildAt(newLayer, layerIndex); 
     73                                newLayer.onViewportChanged(e); 
     74                        } 
     75                } 
     76                 
     77                public function terminate():void 
     78                { 
     79                        mVPobs.terminate(); 
     80                        mEventSource.removeEventListener(GMapViewEvent.VIEWPORT_CHANGED, onViewportChanged); 
    4281                } 
    4382                 
     
    5291                { 
    5392                        var tile:GMapMapTile = new GMapMapTile(tx, ty, GMapCalc.calcMapsZoomIndex(mViewport.zoom)); 
     93                        tile.addEventListener(IOErrorEvent.IO_ERROR, onIOError); 
     94mVPobs.dout.puts(tile.url); 
     95 
    5496                        addChild(tile.loadTile()); 
    5597                                 
     
    63105                         
    64106                        mLoadedTiles.poke(tx, ty, tile); 
     107                } 
     108                 
     109                protected function onIOError(e:IOErrorEvent):void 
     110                { 
    65111                } 
    66112                 
     
    92138                        } 
    93139 
    94                         out.x += x; 
    95                         out.y += y; 
     140                        out.x -= x; 
     141                        out.y -= y; 
    96142                         
    97143                } 
  • lang/actionscript/swfgmap/trunk/gyuque/gmap/googlemaps/GMapMapTile.as

    r2456 r2528  
    22{ 
    33        import flash.display.*; 
     4        import flash.events.*; 
    45        import flash.net.URLRequest; 
    56         
     
    1314                } 
    1415                 
     16                public function get url():String 
     17                { 
     18                        return mTileURL; 
     19                } 
     20                 
    1521                public function loadTile():Loader 
    1622                {