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分 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |