Arcgis for Flex 笔记
发布时间:2020-12-15 03:56:34 所属栏目:百科 来源:网络整理
导读:读取自定义切片 public byte[] getServiceConf(string ServiceName) { string ConfDir = MapPath + "" + ServiceName + "Layersconf.xml"; FileStream conf = new FileStream(ConfDir,FileMode.Open,FileAccess.Read); byte[] buffer = new byte[conf.
|
读取自定义切片 public byte[] getServiceConf(string ServiceName)
{
string ConfDir = MapPath + "" + ServiceName + "Layersconf.xml";
FileStream conf = new FileStream(ConfDir,FileMode.Open,FileAccess.Read);
byte[] buffer = new byte[conf.Length];
conf.Read(buffer,(int)conf.Length);
return buffer;
}
public byte[] getServiceCdi(string ServiceName)
{
string ConfDir = MapPath + "" + ServiceName + "Layersconf.cdi";
FileStream conf = new FileStream(ConfDir,(int)conf.Length);
return buffer;
}
public byte[] getTile(string ServiceName,int level,int row,int col)
{
int size = 128;
byte[] result = null;
FileStream isBundle = null;
FileStream isBundlx = null;
try
{
string bundlesDir = MapPath + "" + ServiceName + "Layers_alllayers";
string l = "0" + level;
int lLength = l.Length;
if (lLength > 2)
{
l = l.Substring(lLength - 2);
}
l = "L" + l;
int rGroup = size * (row / size);
string r = "000" + rGroup.ToString("X");
int rLength = r.Length;
if (rLength > 4)
{
r = r.Substring(rLength - 4);
}
r = "R" + r;
int cGroup = size * (col / size);
string c = "000" + cGroup.ToString("X");
int cLength = c.Length;
if (cLength > 4)
{
c = c.Substring(cLength - 4);
}
c = "C" + c;
string bundleBase = bundlesDir + "//" + l + "//" + r + c;
string bundlxFileName = bundleBase + ".bundlx";
string bundleFileName = bundleBase + ".bundle";
int index = size * (col - cGroup) + (row - rGroup);
isBundlx = new FileStream(bundlxFileName,FileAccess.Read);
isBundlx.Seek(16 + 5 * index,SeekOrigin.Begin);
byte[] buffer = new byte[5];
isBundlx.Read(buffer,5);
long offset = (long)(buffer[0] & 0xff) + (long)(buffer[1] & 0xff)
* 256 + (long)(buffer[2] & 0xff) * 65536
+ (long)(buffer[3] & 0xff) * 16777216
+ (long)(buffer[4] & 0xff) * 4294967296L;
isBundle = new FileStream(bundleFileName,FileAccess.Read);
isBundle.Seek(offset,SeekOrigin.Begin);
byte[] lengthBytes = new byte[4];
isBundle.Read(lengthBytes,4);
int length = (int)(lengthBytes[0] & 0xff)
+ (int)(lengthBytes[1] & 0xff) * 256
+ (int)(lengthBytes[2] & 0xff) * 65536
+ (int)(lengthBytes[3] & 0xff) * 16777216;
result = new byte[length];
isBundle.Read(result,length);
}
catch (Exception ex)
{
return NoImage;
}
finally
{
if (isBundle != null)
{
isBundle.Close();
isBundlx.Close();
}
}
return result;
}
package overrides
{
import com.esri.ags.SpatialReference;
import com.esri.ags.Units;
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.display.Bitmap;
import flash.display.BitmapData;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.external.ExternalInterface;
import flash.net.URLLoader;
import flash.net.URLRequest;
import mx.controls.Alert;
import mx.controls.Image;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.rpc.http.HTTPService;
public class LocalTiledMapServiceLayer extends TiledMapServiceLayer
{
private var _fullExtent:Extent;
private var _initialExtent:Extent;
private var _spatialReference:SpatialReference;
private var _tileInfo:TileInfo;
private var _tileServers:Array;
private var _tileServersChanged:Boolean=true;
private var _url:String="";
public function RadioTiledMapServiceLayer(url:String=null)
{
super();
this._fullExtent = new Extent(-180,-90,180,90,new SpatialReference(4326));
this._initialExtent = new Extent(-180,new SpatialReference(4326));
this._tileInfo = new TileInfo();
this.Url=url;
return;
}
public function get Url():String
{
return _url;
}
public function set Url(value:String):void
{
if(this.Url!=value)
{
if (value)
{
this._url=value;
var mUrlRequest:URLRequest=new URLRequest(value+"&action=info");
var load:URLLoader=new URLLoader();
load.addEventListener(Event.COMPLETE,complete);
load.addEventListener(IOErrorEvent.IO_ERROR,onError);
load.load(mUrlRequest);
}
}
}
private function onError(event:IOErrorEvent):void
{
Alert.show(event.text);
}
private function completecdi(event:Event):void
{
var cdi:XML=new XML(event.target.data);
var XMin:Number=Number(cdi.XMin);
var XMax:Number=Number(cdi.XMax);
var YMin:Number=Number(cdi.YMin);
var YMax:Number=Number(cdi.YMax);
this._fullExtent = new Extent(XMin,YMin,XMax,YMax,this.spatialReference);
this._initialExtent = new Extent(XMin,this.spatialReference);
setLoaded(true);
}
private function complete(event:Event):void
{
var conf:XML=new XML(event.target.data);
var CacheInfo:XMLList=conf..TileCacheInfo;
_tileInfo.lods=new Array();
_tileInfo.dpi=CacheInfo.DPI;
_tileInfo.height=CacheInfo.TileRows;
_tileInfo.width=CacheInfo.TileCols;
_tileInfo.origin=new MapPoint(CacheInfo.TileOrigin.X,CacheInfo.TileOrigin.Y);
var LodInfos:XMLList=CacheInfo.LODInfos.LODInfo;
for(var i:int=0;i<LodInfos.length();i++)
{
var LevelID:int=LodInfos[i].LevelID;
var Scale:Number=LodInfos[i].Scale;
var Resolution:Number=LodInfos[i].Resolution;
_tileInfo.lods.push(new LOD(LevelID,Resolution,Scale));
}
this._spatialReference = new SpatialReference(CacheInfo.SpatialReference.WKID);
///获取cdi信息,即地图范围信息
var mUrlRequestCdi:URLRequest=new URLRequest(this.Url+"&action=cdi");
var loadcdi:URLLoader=new URLLoader();
loadcdi.addEventListener(Event.COMPLETE,completecdi);
loadcdi.addEventListener(IOErrorEvent.IO_ERROR,onError);
loadcdi.load(mUrlRequestCdi);
}
override public function get fullExtent() : Extent
{
return this._fullExtent;
}// end function
override public function get initialExtent() : Extent
{
return this._initialExtent;
}// end function
override public function get spatialReference() : SpatialReference
{
return this._spatialReference;
}// end function
override public function get tileInfo() : TileInfo
{
return this._tileInfo;
}// end function
override public function get units() : String
{
return Units.METERS;
}// end function
override protected function getTileURL(level:Number,row:Number,col:Number):URLRequest
{
var _baseURL:String=Url;
var url:String=_baseURL+"&action=img&l=" + level.toString() + "&r=" + row.toString() + "&c="+col.toString();
return new URLRequest(url);
}
}
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
