Flex离线地图和在线谷歌地图实现
发布时间:2020-12-15 03:49:39 所属栏目:百科 来源:网络整理
导读:? 下面代码是使用arggis的免费库“agslib-3.4-2013-06-30.swc”开发的在线谷歌地图和离线地图类。 实现理论:在线模式是根据谷歌地图提供的文件服务调用地图资源;离线模式估计本地文件访问离线文件。 当然你也可以将离线文件发布在内网文件服务器直接调用,
? 下面代码是使用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,spatialReference); } override public function get initialExtent():Extent { return new Extent(-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,col)); } private function fmtURL(level: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) ]; } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |