您的位置:首页 > 其它

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函数,在该函数中返回你需要的图片。

详细代码如下:

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);
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: