zoukankan      html  css  js  c++  java
  • ADOBE FLASH BUILDER 4.6 IOS 开发之地图控件

    1.Flex 旧版本的一些地图控件列举

     Google Map, Map abc, Yaohoo map 等, 都提供了flash 版本的API。这些版本的API 在非移动平台上是可以使用的,但是在移动平台上,基本都是不支持的。我测试过Google Map 在移动设备上是根本不行的。

    2.移动设备的地图控件

    1)第一款强烈推荐的控件是 Arcgis ,下载地址http://help.arcgis.com/en/webapi/flex/index.html  Arcgis 是比较适合移动开发的,他的拓展性也比较强,默认支持的是arcgis server 的地图,但是可以拓展支持google 地图,bing地图,天地图等等。

    2mapquest,一下是下载地址http://developer.mapquest.com/web/products/featured/as3-flex-flash

    Mapquest 这个控件比较好的一点是,反应比较快,但是有一点是诟病吧,是这样的,和google 地图的操作有些出入,google 地图在加载下一层的时候刚才的层还会显示,就是有点模糊。但是了,Mapquest 显示直接是空白,很不好看。 

    3,控件使用

     Arcgis 的使用。

    新建flex 手机项目,添加 arcgis 类库,在主视图添加地图,以及添加切换地图类型的按钮,如图所示

     

     3.1 拓展的google 图层

      1 package google

       1 package google

      2 {
      3     import com.esri.ags.layers.TiledMapServiceLayer;
      4     import com.esri.ags.SpatialReference;
      5     import com.esri.ags.geometry.Extent;
      6     import com.esri.ags.geometry.MapPoint;
      7     import com.esri.ags.layers.supportClasses.LOD;
      8     import com.esri.ags.layers.supportClasses.TileInfo;
      9     
     10     import flash.net.URLRequest;
     11 
     12     /**
     13      * Google 地图 ,获取层得类
     14      * Google 地图层,路图
     15      */
     16     public class GoogleSatLayer extends TiledMapServiceLayer
     17     {
     18         public function GoogleSatLayer()
     19         {
     20             super();
     21             buildTileInfo();
     22             setLoaded(true);
     23         }
     24         private var _tileInfo:TileInfo=new TileInfo();
     25         private var _baseURL:String="";
     26         
     27         
     28         //--------------------------------------------------------------------------
     29         //
     30         //  重写父类方法
     31         //
     32         //--------------------------------------------------------------------------
     33         override public function get fullExtent():Extent
     34         {
     35             return new Extent(-20037508.342787, -20037508.342787, 20037508.342787, 20037508.342787, new SpatialReference(102113));
     36         }
     37         
     38         override public function get initialExtent():Extent
     39         {
     40             return new Extent(-20037508.342787, -20037508.342787, 20037508.342787, 20037508.342787, new SpatialReference(102113));
     41         }
     42         
     43         override public function get spatialReference():SpatialReference
     44         {
     45             return new SpatialReference(102113);
     46         }
     47         
     48         override public function get tileInfo():TileInfo
     49         {
     50             return _tileInfo;
     51         }
     52         
     53         
     54         private const secGoogleWord:String="Galileo";
     55         //get google secwords 
     56         private function GetSecGoogleWords(coord:Object):Array
     57         {
     58             var arr:Array = new Array();
     59             var sec1:String = "";
     60             var sec2:String = "";
     61             var seclen:int = (coord.row*3 + coord.column) % 8;
     62             sec2 = secGoogleWord.substr(0,seclen);
     63             if(coord.column >= 1000 && coord.column < 100000)
     64             {
     65                 sec1 = "&s=";
     66             }
     67             arr.push(sec1);
     68             arr.push(sec2);
     69             return arr;    
     70         }
     71         
     72         /**
     73          * 获取矢量地图
     74          */
     75         override protected function getTileURL(level:Number, row:Number, col:Number):URLRequest
     76         {
     77             //   http://khm0.google.com/kh/v=99&x=1672&y=893&z=11&s=Galil
     78             //http://mt1.google.cn/vt/lyrs=s@102&hl=zh-CN&gl=cn&x=1683&y=889&z=11&s=Ga
     79 
     80             // modest map 请求地址
     81             //http://khm.google.com/vt/lbw/lyrs=y&hl={0}&x={1}&y={2}&z={3}&s={4}
     82 
     83             
     84 //            var url:String="http://khm0.google.com/kh/v=99&" +
     85 //                "x=" + col + "&" +
     86 //                "y=" + row + "&" +
     87 //                "z=" + level+ "&s=Galil";
     88             
     89             //google 地图请求地址,卫星图, 是不准确的。
     90 //            var url:String="http://mt"+(col%4)+".google.cn/vt/lyrs=s@102&hl=zh-CN&gl=cn&" +
     91 //                "x=" + col + "&" +
     92 //                "y=" + row + "&" +
     93 //                "z=" + level+ "&s=Ga";
     94             
     95             
     96             var coord:Object = {};
     97             coord.row = row;
     98             coord.column = col;
     99             var arr:Array=GetSecGoogleWords(coord);
    100             var sec1:String=arr[0];
    101             var sec2:String=arr[1];
    102             
    103             // modest map google 卫星图请求
    104             var url:String = "http://khm.google.com/vt/lbw/lyrs=y&hl={0}&x={1}&y={2}&z={3}&s={4}"
    105             
    106             url = url.replace("{0}","zh-CN");
    107             url = url.replace("{1}",col);
    108             url = url.replace("{2}",row);
    109             url = url.replace("{3}",level);
    110             
    111             
    112             url = url.replace("{4}",sec2);
    113             //trace("GoogleSatLayer.as line 124 :"+url)            
    114             return new URLRequest(url);
    115         }
    116         
    117         
    118         
    119         private function buildTileInfo():void
    120         {
    121             _tileInfo.height=256;
    122             _tileInfo.width=256;
    123             _tileInfo.origin=new MapPoint(-20037508.342787, 20037508.342787);
    124             _tileInfo.spatialReference=new SpatialReference(102113);
    125             //_tileInfo.spatialReference=new SpatialReference(102100);
    126             //_tileInfo.spatialReference=new SpatialReference(4326);
    127             _tileInfo.lods = [
    128                 new LOD(0, 156543.033928, 591657527.591555), 
    129                 new LOD(1, 78271.5169639999, 295828763.795777), 
    130                 new LOD(2, 39135.7584820001, 147914381.897889), 
    131                 new LOD(3, 19567.8792409999, 73957190.948944), 
    132                 new LOD(4, 9783.93962049996, 36978595.474472), 
    133                 new LOD(5, 4891.96981024998, 18489297.737236), 
    134                 new LOD(6, 2445.98490512499, 9244648.868618), 
    135                 new LOD(7, 1222.99245256249, 4622324.434309), 
    136                 new LOD(8, 611.49622628138, 2311162.217155), 
    137                 new LOD(9, 305.748113140558, 1155581.108577), 
    138                 new LOD(10, 152.874056570411, 577790.554289), 
    139                 new LOD(11, 76.4370282850732, 288895.277144), 
    140                 new LOD(12, 38.2185141425366, 144447.638572), 
    141                 new LOD(13, 19.1092570712683, 72223.819286), 
    142                 new LOD(14, 9.55462853563415, 36111.909643), 
    143                 new LOD(15, 4.77731426794937, 18055.954822),
    144                 new LOD(16, 2.38865713397468, 9027.977411), 
    145                 new LOD(17, 1.19432856685505, 4513.988705), 
    146                 new LOD(18, 0.597164283559817, 2256.994353),
    147                 new LOD(19, 0.298582141647617, 1128.497176)
    148             ];
    149         }
    150     }
    151 }

     要拓展层 ,只需要继承 TiledMapServiceLayer 类,然后重写fullExtent,initialExtent,spatialReference,tileInfo,getTileURL 这些方法。关键的url getTileURL 这个方法中。根据传入的层,行,列来构造url

    其它层的类我都附加在了源代码中。

    3.2 MapQuest 的使用

    建立 MapQuestSample flex 手机项目,添加类库MQFlashMapsAPI_7.0.6_MQ_MOBILE.swc。在主视图中添加<mx:UIComponent id="uic" x="0" y="0" height="100%" width="100%"/> UIComponent 用于加载地图。 

     protected function initMap():void

                {
                    this.map = new TileMap(this.key,this.mapStartZoomLevel,new LatLng(38.134557, -98.4375),this.mapStartType);
                    this.map.size = new Size(this.width,this.height);
                    this.map.mapFriction = this.mapFriction;
                    this.map.name = "mainMap";
                    this.addMapListeners();
                    
                    
                    if (this.mapUseZoomControl) this.addZoomControl();
                    
                    //move the logo to the upper righthand corner
                    
                    this.map.setLogoPlacement(LogoType.LOGO_MQ_LOGO,new MapCornerPlacement(MapCorner.TOP_RIGHT, new Size(-5,5)));
                    
                    //remove the old layer ,add google layer
                    this.map.removeTileLayers();
                    
                    var googleLayer:GoogleMapLayer = new GoogleMapLayer(this.map);
                    
                    this.map.addTileLayer(googleLayer);
                    
                    this.uic.addChild(this.map);            
                }

     视图初始化之后就会添加到控件中。如下是程序运行截图:

     

     4.后续

    MapQuest类库本身比较小,而且反应很快。我将他反编译了一下,然后修改了下代码,编译成了自己类库。我也会把源代码附上的,供大家学习使用。但是最好还是申请key,毕竟是使用人家做好的东西吗。

    源码

     /Files/csharponworking/MapQuestAPI7.1.1反编译.rar

     /Files/csharponworking/MapQuestSample25April2012.rar

     /Files/csharponworking/ArcGisSample25April2012.rar

  • 相关阅读:
    服务器的Redis连接不上解决方案
    给大家推荐一个很好的自学网站
    简单说下HashMap的实现原理
    LinkedList源码解析
    你要了解的jvm
    单例设计
    百度编辑器删除旧的图片
    Ueditor 单图、多图、视频、附件的上传及在线管理总结
    上传新图片删除旧图片
    webapi发布IIS时出现500.19错误:不能在此路径中使用此配置节。如果在父级别上锁定了该节,便会出现这种情况。锁定是默认设置的(overrideModeDefault="Deny")或者是通过包含overrideModeDefault="Deny"....
  • 原文地址:https://www.cnblogs.com/csharponworking/p/2473375.html
Copyright © 2011-2022 走看看