加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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)  
			];
		}
	}
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读