Flex4.6手机项目+arcgis api+瓦片地图
发布时间:2020-12-15 00:57:34 所属栏目:百科 来源:网络整理
导读:昨日看到一个牛人发的一篇博文,内容是利用arcgis api for flex读取自定义瓦片地图。我一想,能不能做Flex4.6手机项目读取本地地图缓存。经过两天的捣鼓,终于在我的爱机上显示预先切好的瓦片地图,欢喜。贴上代码: MyLayer.aspackage map{import com.esri.
昨日看到一个牛人发的一篇博文,内容是利用arcgis api for flex读取自定义瓦片地图。我一想,能不能做Flex4.6手机项目读取本地地图缓存。经过两天的捣鼓,终于在我的爱机上显示预先切好的瓦片地图,欢喜。贴上代码: MyLayer.as package map { 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.filesystem.File; import flash.net.URLRequest; public class MyLayer extends TiledMapServiceLayer { public function PortlandTiledMapServiceLayer() { super(); buildTileInfo(); // to create our hardcoded tileInfo setLoaded(true); // Map will only use loaded layers } private var _tileInfo:TileInfo = new TileInfo(); // see buildTileInfo() public var filePath:File=File.documentsDirectory; private var _baseURL:String =filePath.url+"/BaseMap2/Layers/_alllayers/";//filePath.url为地图瓦片地图目录 //-------------------------------------------------------------------------- // // Overridden properties // fullExtent() // initialExtent() // spatialReference() // tileInfo() // units() // //-------------------------------------------------------------------------- //---------------------------------- // fullExtent // - required to calculate the tiles to use //---------------------------------- override public function get fullExtent():Extent { return new Extent(106.83278544323,19.5628611240401,117.999305409068,26.6235368076667,new SpatialReference(4326)); } //---------------------------------- // initialExtent // - needed if Map doesn't have an extent //---------------------------------- override public function get initialExtent():Extent { return new Extent(112.511576567339,21.9382229904827,114.171488565007,23.0936892549139,new SpatialReference(4326)); } //---------------------------------- // spatialReference // - needed if Map doesn't have a spatialReference //---------------------------------- override public function get spatialReference():SpatialReference { return new SpatialReference(4326); } //---------------------------------- // tileInfo //---------------------------------- override public function get tileInfo():TileInfo { return _tileInfo; } //---------------------------------- // units // - needed if Map doesn't have it set //---------------------------------- override public function get units():String { return "esriDecimalDegrees"; } //-------------------------------------------------------------------------- // // Overridden methods // getTileURL(level:Number,row:Number,col:Number):URLRequest // //-------------------------------------------------------------------------- override protected function getTileURL(level:Number,col:Number):URLRequest { var url:String = _baseURL + "/L" + padString(String(level),2,"0") + "/R" + padString(row.toString(16),8,"0") + "/C" + padString(col.toString(16),"0") + ".png"; return new URLRequest(url); } //-------------------------------------------------------------------------- // // Private Methods // //-------------------------------------------------------------------------- private function buildTileInfo():void { _tileInfo.height = 256; _tileInfo.width = 256; _tileInfo.origin = new MapPoint(-400,400); _tileInfo.spatialReference = new SpatialReference(4326); _tileInfo.lods = [ new LOD(0,0.0020766205141791532,1000000),new LOD(1,0.00062298615425374602,300000) ]; } private function padString(text:String,size:int,ch:String):String { while (text.length < size) { text = ch + text; } return text; } } } offline.mxml <?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" applicationDPI="160" xmlns:ns="http://www.esri.com/2008/ags" xmlns:map="map.*"> <fx:Declarations> <!-- 将非可视元素(例如服务、值对象)放在此处 --> </fx:Declarations> <ns:Map id="map" scaleBarVisible="false"> <map:MyLayer id="virtualTiles" fadeInFrameCount="12"/> </ns:Map> </s:Application>这里需要注意一点的是在获取瓦片存放的目录这个地方。在调试的时候,用 public var filePath:File=File.documentsDirectory; private var _baseURL:String =filePath.nativePathl+"/BaseMap2/Layers/_alllayers/"; ?是可以访问到瓦片数据的,但是如果发布到android手机,地图就显示不出来了。但是如果把nativePath改成url就可以在android显示地图。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |