Flex离线地图和在线谷歌地图实现

来源:互联网 发布:数据运营专员做什么的 编辑:程序博客网 时间:2024/05/16 17:22

  下面代码是使用arggis的免费库“agslib-3.4-2013-06-30.swc”开发的在线谷歌地图和离线地图类。

实现理论:在线模式是根据谷歌地图提供的文件服务调用地图资源;离线模式估计本地文件访问离线文件。

当然你也可以将离线文件发布在内网文件服务器直接调用,不需要存放本地。关键就是能根据level, row, col调用文件就行。

GoogleMapLayer代码如下:

package cn.showclear.modules.gis{import com.esri.ags.SpatialReference;import com.esri.ags.geometry.Extent;import com.esri.ags.geometry.MapPoint;import com.esri.ags.layers.TiledMapServiceLayer;import com.esri.ags.layers.supportClasses.LOD;import com.esri.ags.layers.supportClasses.TileInfo;import flash.net.URLRequest;import mx.events.PropertyChangeEvent;import mx.logging.ILogger;import cn.showclear.manager.Managers;import cn.showclear.utils.LoggerUtil;/** *  自定义MapLayer,实现了离线地图和在线谷歌地图的加载。  * @author LuLihong * @date 2013-10-24 *  */public class GoogleMapLayer extends TiledMapServiceLayer{private const log:ILogger = LoggerUtil.getLogger(GoogleMapLayer);private var _tileInfo:TileInfo=new TileInfo();/** * 离线地图路径  */private var _gisDir:String;/** * 是否离线模式  */private var isOffMode:Boolean = true;public function GoogleMapLayer() {super();buildTileInfo();setLoaded(true);_gisDir = GisHelper.gisDir;isOffMode = GisHelper.isOffLoadMode();log.debug("gisDir:" + _gisDir);//配置属性改变监听Managers.getAppConfigManager().addEventListener(PropertyChangeEvent.PROPERTY_CHANGE, onPropChanged);}private function onPropChanged(e:PropertyChangeEvent):void {if( e.property == GisHelper.KEY_MAP_DIR) {log.info("update gis map location:" + e.newValue);_gisDir = GisHelper.gisDir;refresh(); //重新刷新地图} else if (e.property == GisHelper.KEY_LOAD_MODE) {isOffMode = GisHelper.isOffLoadMode();refresh();}}override public function get fullExtent():Extent {return new Extent(-20037508.342787, -20037508.342787, 20037508.342787, 20037508.342787, spatialReference);}override public function get initialExtent():Extent {return new Extent(-20037508.342787, -20037508.342787, 20037508.342787, 20037508.342787, spatialReference);}override public function get spatialReference():SpatialReference {return new SpatialReference(102113);}override public function get tileInfo():TileInfo {return _tileInfo;}//获取矢量地图override protected function getTileURL(level:Number, row:Number, col:Number):URLRequest {return new URLRequest(fmtURL(level, row, col));}private function fmtURL(level:Number, row:Number, col:Number):String {if (isOffMode) {return _gisDir + "\\" + level + "\\" +  col + "\\" + row + ".png";} else {return "http://mt"+(col%4)+".google.cn/vt/v=w2.114&hl=zh-CN&gl=cn&" + "x=" + col + "&" + "y=" + row + "&" + "z=" + level+ "&s=";}}private function buildTileInfo():void {_tileInfo.height=256;  _tileInfo.width=256;  _tileInfo.origin=new MapPoint(-20037508.342787, 20037508.342787);  _tileInfo.spatialReference = spatialReference;  _tileInfo.lods = [  new LOD(0, 156543.033928, 591657527.591555),   new LOD(1, 78271.5169639999, 295828763.795777),   new LOD(2, 39135.7584820001, 147914381.897889),   new LOD(3, 19567.8792409999, 73957190.948944),   new LOD(4, 9783.93962049996, 36978595.474472),   new LOD(5, 4891.96981024998, 18489297.737236),   new LOD(6, 2445.98490512499, 9244648.868618),   new LOD(7, 1222.99245256249, 4622324.434309),   new LOD(8, 611.49622628138, 2311162.217155),   new LOD(9, 305.748113140558, 1155581.108577),   new LOD(10, 152.874056570411, 577790.554289),   new LOD(11, 76.4370282850732, 288895.277144),   new LOD(12, 38.2185141425366, 144447.638572),   new LOD(13, 19.1092570712683, 72223.819286),   new LOD(14, 9.55462853563415, 36111.909643),   new LOD(15, 4.77731426794937, 18055.954822),  new LOD(16, 2.38865713397468, 9027.977411),   new LOD(17, 1.19432856685505, 4513.988705),   new LOD(18, 0.597164283559817, 2256.994353),  new LOD(19, 0.298582141647617, 1128.497176)  ];}}}

0 0
原创粉丝点击