最近遇到很多人问这类的问题,在ArcGIS10的rest接口已经提供给我们动态读取图层样式的接口了。
其实当我们在访问ArcGIS Server10的时候,会发现每一个服务界面提供给我们比以前更多的信息了,这些信息只要你可以看到,我们是都有接口读取到的。
以ESRI官网的服务为例:
http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/BloomfieldHillsMichigan/Parcels/MapServer
界面如下图:
如果细心对比的话,会发现比前几个版本的信息量多了很多,例如:Tables
再看一下对每个图层的信息描述,如下图:
这里会很明显的发现drawinfo这个属性,记录着图层的图层样式,动态获取图层样式就要靠drawinfo这个属性了。
代码如下:
<?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:esri="http://www.esri.com/2008/ags"
xmlns:mx="library://ns.adobe.com/flex/mx"
creationComplete="application1_creationCompleteHandler(event)"
minWidth="955" minHeight="600">
<fx:Script>
<![CDATA[
import com.esri.ags.events.DetailsEvent;
import com.esri.ags.layers.supportClasses.LayerDetails;
import com.esri.ags.renderers.SimpleRenderer;
import com.esri.ags.symbols.PictureMarkerSymbol;
import mx.core.INavigatorContent;
import mx.events.FlexEvent;
import mx.rpc.events.FaultEvent;
/**
* 动态读取图层图标
* 创建完成以后,加载
*/
protected function application1_creationCompleteHandler(event:FlexEvent):void
{
for(var i:int = 0 ; i<map.layerIds.length; i++)
{
if(map.layers[i] is ArcGISDynamicMapServiceLayer)
{
var pServiceLayer:ArcGISDynamicMapServiceLayer = map.layers[i];
//调用allgetails方式,就相当于再rest方式下的All Layers and Tables
pServiceLayer.getAllDetails();
pServiceLayer.addEventListener(DetailsEvent.GET_ALL_DETAILS_COMPLETE , onAllDetailsComplete);
pServiceLayer.addEventListener(FaultEvent.FAULT, onFault);
}
}
}
private function onAllDetailsComplete(event:DetailsEvent):void
{
//这里只做了一个图层,不同的点,线,面,需要判断
var p:LayerDetails = event.allDetails.layersDetails[0];
var pSimpleRender:SimpleRenderer = (SimpleRenderer)(p.drawingInfo.renderer);
var pSymbol:PictureMarkerSymbol = (PictureMarkerSymbol)(pSimpleRender.symbol);
image.source = pSymbol.source;
}
//
private function onFault(event:FaultEvent):void
{
trace("not ok");
}
]]>
</fx:Script>
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<!-- 用于显示图层的样式的 -->
<mx:Image id="image" />
<esri:Map id="map">
<esri:ArcGISDynamicMapServiceLayer url="http://localhost:8399/arcgis/rest/services/resource/MapServer"/>
</esri:Map>
</s:Application>
这个例子写得比较简单,只是动态获取出图层样式,然后用图片的形式显示出来了,呵呵,明白原理是最重要的。主要是用到了DetailTask方式实现,这个是Flex API2.0新增加的类,调用方式和之前的Task方式一样,写法就像你用QueryTask一样,主要作用就是获取服务的详细信息。
- 大小: 24.4 KB
- 大小: 24.5 KB
分享到:
相关推荐
Arcgis Server 动态加载图层 Arcgis Server 9.3 C#
ArcGIS Server开发指南基于Flex和.Net数据随书光盘内容.分两个文件上传。
ArcGIS Server开发指南——基于Flex和.NET随书光盘
ArcGIS Server开发指南--基于Flex和.NET源码每一部分
建立基于ArcGIS Server的Javascript API和Flex API的地图应用
ArcGIS Server Web ADF框架与FLEX API的比较分析
解决arcgis server跨域问题: 1、停掉ArcGIS Server的服务。 2、 打开<ArcGIS Server> \framework\runtime\tomcat\conf\web.xml,注册跨域bean 3、lib下拷贝 cors-filter-2.5.jar java-property-utils-1.9.1.jar包 4...
arcgis server10.6.1相关全部安装包。全部都在里面,注意只有安装包哈! ArcGIS_Data_Interop_for_Desktop_1061_163752.exe ArcGIS_Data_Interop_for_Server_1061_164013.exe ArcGIS_Data_Reviewer_for_Desktop_1061...
arcgis server 10.7.1 安装包
ArcGis-10.1 读取 天地图 Flex API 接口工具 20130425
ArcGIS Server开发指南基于Flex和.Net数据随书光盘内容.分两个文件上传。此为文件一
AddDataLayer--arcgis server 9.2 添加图层的应用
Enterprise系列产品包含ArcGIS Server;ecp到期时间为2024年1月1日 资源包含: ArcGIS_Enterprise_Windows_105_zh_CN.iso ArcGIS_Enterprise_Liunx _105.iso Server 10.5.ecp(同网上流传过期密钥不同)
基于ArcGIS Server的Javascript API和Flex API的地图应用. 内部资料
ArcGIS Server10.4.1破解文件。开发者使用ArcGIS Server可以构建Web应用、Web服务、以及其它运行在标准的.NET和J2EE Web服务器上的企业应用,如EJB。ArcGIS Server也可以通过桌面应用以C/S(Client/Server)的模式...
arcgis server 10 许可授权文件,安装arcgis server 授权 导入 ecp
详尽的介绍了flex for arcgisserver开发,适合初次接触flex开发的程序员
到27年的arcgis server10.5 ecp
仅供自主学习使用。主要提供了Arcgis Server10.1的破解方法,也可对Arcgis Sde10.1和Arcgis Destop10.1进行破解。