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

Flex离线地图和在线谷歌地图实现<完整版>

发布时间:2020-12-15 03:49:27 所属栏目:百科 来源:网络整理
导读:在前面文章“Flex离线地图和在线谷歌地图实现” 中粗略的实现了基于arggis的离线和在线加载谷歌地图。 代码很多地方引用了内部的方法导致不能很好的运行,下面将呈现完整的实现。 GoogleMapLayer 代码 package cn.showclear.gis{import com.esri.ags.Spatial

在前面文章“Flex离线地图和在线谷歌地图实现” 中粗略的实现了基于arggis的离线和在线加载谷歌地图。

代码很多地方引用了内部的方法导致不能很好的运行,下面将呈现完整的实现。

GoogleMapLayer代码

package cn.showclear.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;
	
	/**
	 *  自定义MapLayer,实现了离线地图和在线谷歌地图的加载。 
	 * @author LuLihong
	 * @date 2013-10-24
	 * 
	 */
	public class GoogleMapLayer extends TiledMapServiceLayer	
	{
		private var _tileInfo:TileInfo=new TileInfo();
		/**
		 * 离线地图路径 
		 */
		private var _gisDir:String = "F:mapgooglemapsroadmap";
		/**
		 * 是否离线模式 
		 */
		private var isOffMode:Boolean = true;
		
		public function GoogleMapLayer() {
			super();
			buildTileInfo();
			setLoaded(true);
		}
		
		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,row,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)  
			];
		}
	}
}

MapDemo代码

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
			   xmlns:s="library://ns.adobe.com/flex/spark" 
			   xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" 
			   xmlns:esri="http://www.esri.com/2008/ags" 
			   xmlns:gis="cn.showclear.gis.*">
	<fx:Script>
		<![CDATA[
			import com.esri.ags.events.MapEvent;
			import com.esri.ags.geometry.MapPoint;
			import com.esri.ags.utils.WebMercatorUtil;
			
			private function maploadHandler(event:MapEvent):void 	{
				esriMap.centerAt(fmtMapPoint(120.1,30.2));  //设置中心点, 杭州西湖三塘映月岛
				esriMap.level = 12;	//设置级别
			}
			
			/**
			 * 将经纬度坐标转换为墨卡托坐标
			 */
			private static function fmtMapPoint(lng:Number,lat:Number) : MapPoint {
				return WebMercatorUtil.geographicToWebMercator(new MapPoint(lng,lat)) as MapPoint;
			}
			
		]]>
	</fx:Script>
	<fx:Declarations>
		<!-- 将非可视元素(例如服务、值对象)放在此处 -->
	</fx:Declarations>
	
	<esri:Map id="esriMap" logoVisible="false"  
		openHandCursorVisible="false"
		scaleBarVisible="true"
		zoomSliderVisible="false" 
		load="maploadHandler(event)" >
		<gis:GoogleMapLayer id="googleMapLayer"/>
	</esri:Map>
</s:Application>


离线地图文件格式:F:mapgooglemapsroadmap11.png

源代码:Flex离线地图和在线谷歌地图实现源代码,只要1点积分,我相信我提供的知识绝对不止1分

(编辑:李大同)

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

    推荐文章
      热点阅读