ArcGIS API For Flex 扩展:DynamicLayer扩展-wmsLayer实现
2010-11-04 22:49
507 查看
非常感谢ESRI社区上看到的这篇文章,比Arcgis官网的例子要好懂。如下:
在ArcGIS API for Flex中,经常会遇到需要扩展DynamicMapServiceLayer的情况,下面就介绍一下
如何扩展DynamicMapServiceLayer,以调用WMS服务为例:
1 定义WMSMapServiceLayer类,并继承DynamicMapServiceLayer
2 定义一些需要的参数作为属性,当然也可以不定义
3 重载loadMapImage函数,在该函数中返回你需要的图片。
详细代码如下:
出处:http://bbs.esrichina-bj.cn/esri/viewthread.php?tid=60673
之后根据项目的要求,自己依样画葫芦弄了一个,终于把师兄提供的WMS服务给调出来了。不过现在只是简单实现了调用,还不会更多的操作,有待进一步学习。代码如下:
在ArcGIS API for Flex中,经常会遇到需要扩展DynamicMapServiceLayer的情况,下面就介绍一下
如何扩展DynamicMapServiceLayer,以调用WMS服务为例:
1 定义WMSMapServiceLayer类,并继承DynamicMapServiceLayer
2 定义一些需要的参数作为属性,当然也可以不定义
3 重载loadMapImage函数,在该函数中返回你需要的图片。
详细代码如下:
package { import flash.display.Loader; import flash.events.Event; import flash.net.URLRequest; import com.esri.ags.layers.DynamicMapServiceLayer; public class WMSMapServiceLayer extends DynamicMapServiceLayer { internal const service:String = "WMS"; internal const version:String = "1.1.1"; internal const request:String = "GetMap"; internal const scalar:Number = 1; public var format:String = "image/jpeg"; public var wmsLayer:String; public var serviceName:String; public var wmtVersion:String; public var styles:String = ""; public var srs:String = "EPSG:4326"; public var url:String; public var transparentBG:String; public function WMSMapServiceLayer() { super(); this.setLoaded(true); this.url = url; this.wmsLayer = wmsLayer; } override protected function loadMapImage(loader:Loader):void { // Get our pixel dimensions. var pxWidth:Number = Math.floor(this.map.width * scalar); var pxHeight:Number = Math.floor(this.map.height * scalar); // Build the GetMap request var index : int = url.indexOf( "?"); var prefix : String = index == -1 ? "?" : "&"; var _url:String = url; _url += prefix + "SERVICE="+service; _url += "&VERSION="+version; _url += "&REQUEST="+request; // For many WMS servers, SERVICENAME and others are unused, but some must be included or the server will reject our request. For example STYLES. if( serviceName != null) { _url += "&SERVICENAME="+serviceName; } if( wmtVersion != null) { _url += "&WMTVER="+wmtVersion; } if( wmsLayer != null) { _url += "&LAYERS="+wmsLayer; } _url += "&STYLES="+styles; if(transparentBG != null) { _url += "&TRANSPARENT="+transparentBG; } if( srs != null) { _url += "&SRS="+srs; } _url += "&FORMAT="+format; _url += "&WIDTH="+pxWidth; _url += "&HEIGHT="+pxHeight; _url += "&BBOX="+this.map.extent.xmin+","+this.map.extent.ymin+","+this.map.extent.xmax+","+this.map.extent.ymax; // We create a new URLRequest var wmsReq:URLRequest = new URLRequest(_url); // And finally pass it to our parent as a Loader. This URL will be then loaded into the map window. loader.load(wmsReq); } } }
出处:http://bbs.esrichina-bj.cn/esri/viewthread.php?tid=60673
之后根据项目的要求,自己依样画葫芦弄了一个,终于把师兄提供的WMS服务给调出来了。不过现在只是简单实现了调用,还不会更多的操作,有待进一步学习。代码如下:
package com.surname.business { import com.esri.ags.SpatialReference; import com.esri.ags.Units; import com.esri.ags.geometry.Extent; import com.esri.ags.layers.DynamicMapServiceLayer; import flash.display.Loader; import flash.net.URLRequest; import flash.net.URLVariables; public class WMSMapServiceLayer extends DynamicMapServiceLayer { internal const request:String = "GetMap"; internal const scalar:Number = 1; public var format:String = "image/png"; public var layers:String="vge:ming1"; public var wmsLayer:String; public var serviceName:String; public var wmtVersion:String; public var styles:String = ""; public var srs:String = "EPSG:4326"; public var url:String="http://132.1.10.83:8080/geoserver/wms?"; public var transparentBG:String; public function WMSMapServiceLayer() { super(); this.setLoaded(true); this.url=url; this.wmsLayer=wmsLayer; } override protected function loadMapImage(loader:Loader):void { // Get our pixel dimensions. var pxWidth:Number = Math.floor(this.map.width * scalar); var pxHeight:Number = Math.floor(this.map.height * scalar); // Build the GetMap request var _url:String = url; _url += "&BBOX="+"65.22020225524902,16.255382919311515,148.47830696105956,58.26974830627439"; _url += "&STYLES="+styles; _url += "&FORMAT="+format; _url += "&REQUEST="+request; if( wmsLayer != null) { _url += "&LAYERS="+wmsLayer; } _url += "&WIDTH="+pxWidth; _url += "&HEIGHT="+pxHeight; if( srs != null) { _url += "&SRS="+srs; } // We create a new URLRequest var wmsReq:URLRequest = new URLRequest(_url); // And finally pass it to our parent as a Loader. This URL will be then loaded into the map window. loader.load(wmsReq); } } }
相关文章推荐
- ArcGIS.Server.9.3和ArcGIS API for Flex实现自己的Toc控件(三)
- ArcGIS Api For Flex 划选查询功能的实现
- ArcGIS API for Flex 扩展 - 获取Polygon的中心点坐标
- ArcGIS API for Flex实现的实时监控功能
- ArcGIS.Server.9.3和ArcGIS API for Flex实现基本的地图浏览(一)
- ArcGIS.Server.9.3和ArcGIS API for Flex实现动态图层和瓦片图层叠加显示(二)
- ArcGIS.Server.9.3和ArcGIS API for Flex实现Identify的功能图查属性(六)
- ArcGIS.Server.9.3和ArcGIS API for Flex实现自己的Toc控件(三)
- arcgis api for flex 两种鹰眼的实现方法
- ArcGIS API for Flex实现的实时监控功能
- ArcGIS.Server.9.3和ArcGIS API for Flex实现Toolbar功能(四)
- [转]ArcGIS.Server.9.3和ArcGIS API for Flex实现动态图层和瓦片图层叠加显示(二)
- ArcGIS.Server.9.3和ArcGIS API for Flex实现动态图层和瓦片图层叠加显示(二)
- ArcGIS.Server.9.3和ArcGIS API for Flex实现Toolbar功能(四)
- [转]ArcGIS.Server.9.3和ArcGIS API for Flex实现自己的Toc控件(三)
- ArcGIS.Server.9.3和ArcGIS API for Flex实现GraphicsLayer上画点、线、面(五)
- ArcGIS.Server.9.3和ArcGIS API for Flex实现基本的地图浏览(一)
- ArcGIS.Server.9.3和ArcGIS API for Flex实现Identify的功能图查属性(六)
- [转]ArcGIS.Server.9.3和ArcGIS API for Flex实现Toolbar功能(四)
- ArcGIS.Server.9.3和ArcGIS API for Flex实现MapTips(八)