ARCGIS viewer入门(8)flex viewer定制

来源:互联网 发布:如何正确对待网络暴力 编辑:程序博客网 时间:2024/05/21 15:43
<?xml version="1.0" encoding="utf-8"?>
 
<viewer:BaseWidget xmlns:fx="http://ns.adobe.com/mxml/2009"
  xmlns:s="library://ns.adobe.com/flex/spark"
  xmlns:mx="library://ns.adobe.com/flex/mx"
  xmlns:viewer="com.esri.viewer.*"
  widgetConfigLoaded="init()">
<fx:Script>
<![CDATA[
import com.esri.ags.FeatureSet;
import com.esri.ags.Graphic;
import com.esri.ags.events.DrawEvent;
import com.esri.ags.events.LayerEvent;
import com.esri.ags.geometry.Geometry;
import com.esri.ags.geometry.MapPoint;
import com.esri.ags.layers.FeatureLayer;
import com.esri.ags.layers.GraphicsLayer;
import com.esri.ags.layers.supportClasses.Field;
import com.esri.ags.layers.supportClasses.LayerDetails;
import com.esri.ags.symbols.PictureMarkerSymbol;
import com.esri.ags.symbols.SimpleFillSymbol;
import com.esri.ags.symbols.SimpleLineSymbol;
import com.esri.ags.symbols.SimpleMarkerSymbol;
import com.esri.ags.tasks.supportClasses.Query;
import com.esri.ags.tools.DrawTool;

import mx.collections.ArrayCollection;
import mx.controls.Alert;
import mx.controls.Image;
import mx.formatters.DateFormatter;
import mx.rpc.AsyncResponder;
private var graphicPointSym:PictureMarkerSymbol;
private var status:String;



//==============================
private var resultMarkerSymbol:PictureMarkerSymbol;
private var resultLineSymbol:SimpleLineSymbol;
private var resultFillSymbol:SimpleFillSymbol;
private var configSearchGraphical:Array;
private var configSearchText:Array;
private var finishDrawing:Boolean;
private var graphicalsearchLabel:String;
private var graphicsLayer:GraphicsLayer;
private var loadingLabel:String;
private var nolayerLabel:String;
private var queryLayer:FeatureLayer;
private var queryGeom:Geometry;
private var queryExpr:String;
private var queryFields:XMLList;
private var queryTitleField:String;
private var queryLinkField:String;
private var queryLinkAlias:String;
private var resultsLabel:String;
private var selectionLabel:String;
private var selectedDrawingIcon:Image;
private var textsearchLabel:String;
private var zoomScale:Number = 50000;
private var dateFormatter:DateFormatter = new DateFormatter();
private var textDirection:String;
[Bindable]
private var clearLabel:String;
[Bindable]
private var layerLabel:String;
[Bindable]
private var lineLabel:String;
[Bindable]
private var freehandLineLabel:String;
[Bindable]
private var noResultLabel:String;
[Bindable]
private var pointLabel:String;
[Bindable]
private var polygonLabel:String;
[Bindable]
private var freehandPolygonLabel:String;
[Bindable]
private var rectangleLabel:String;
[Bindable]
private var circleLabel:String;
[Bindable]
private var searchResultAC:ArrayCollection;
[Bindable]
private var submitLabel:String;
[Bindable]
private var msgVisible:Boolean = false;
//==============================-
var drawSymbol :SimpleMarkerSymbol;
//this function called when the widget's configuration is loaded
private function init():void
{               
if (configXML)
  {
textDirection = getStyle("direction");
configSearchGraphical = [];
configSearchText = [];
var lyrList:XMLList = configXML..layer;//从widget对应的配置文件获取涂层
//Alert.show(lyrList.length().toString());
for (var i:int = 0; i < lyrList.length(); i++)
{
var lyrURL:String = lyrList[i].url;
var lyrLabel:String = lyrList[i].name;
var lyrGraphicalLabel:String = lyrList[i].graphicalsearchlabel || getDefaultString("graphicalsearchLabel");
var lyrTextLabel:String = lyrList[i].textsearchlabel || getDefaultString("textsearchLabel");
var lyrExpr:String = lyrList[i].expression;
var lyrFields:XMLList = lyrList[i].fields;
var lyrTitleField:String = lyrList[i].titlefield;
var lyrLinkField:String = lyrList[i].linkfield;
var linkAlias:String = lyrList[i].linkfield.@alias[0];
var useAMF:String = lyrList[i].useamf;
var useProxy:Boolean = lyrList[i].useproxy[0] && lyrList[i].useproxy == "true";

var layer:FeatureLayer = new FeatureLayer(lyrURL);
if (useProxy && configData.proxyUrl)
{
layer.proxyURL = configData.proxyUrl;
}
if (useAMF)
{
layer.useAMF = useAMF == "true";
}
if (lyrFields && lyrFields[0].@all[0] == "true")
{
layer.outFields = [ "*" ];
}
else if (lyrFields)
{
var fields:XMLList = lyrFields.field;
layer.outFields = [];
for each (var fieldXML:XML in fields)
{
if (fieldXML.@name[0])
{
layer.outFields.push(fieldXML.@name[0]);
}
}
}

var searchLayer:Object =
{
layer: layer,
label: lyrLabel,
textlabel: lyrTextLabel,
graphicallabel: lyrGraphicalLabel,
expr: lyrExpr,
fields: lyrFields,
titlefield: lyrTitleField,
linkfield: lyrLinkField,
linkalias: linkAlias
};
configSearchGraphical.push(searchLayer);
if (lyrExpr)
{
configSearchText.push(searchLayer);
}
}//end for
//Alert.show(configSearchGraphical.length.toString());
}
const resultMarkerSymbolURL:String = configXML.symbols.picturemarkersymbol.@url || widgetIcon;
const resultMarkerSymbolHeight:Number = (configXML.symbols.picturemarkersymbol.@height != null) ? configXML.symbols.picturemarkersymbol.@height : 30;
const resultMarkerSymbolWidth:Number = (configXML.symbols.picturemarkersymbol.@width != null) ? configXML.symbols.picturemarkersymbol.@width : 30;
const resultMarkerSymbolXOffset:Number = (configXML.symbols.picturemarkersymbol.@xoffset != null) ? configXML.symbols.picturemarkersymbol.@xoffset : 0;
const resultMarkerSymbolYOffset:Number = (configXML.symbols.picturemarkersymbol.@yoffset != null) ? configXML.symbols.picturemarkersymbol.@yoffset : 0;
resultMarkerSymbol = new PictureMarkerSymbol(resultMarkerSymbolURL, resultMarkerSymbolWidth, resultMarkerSymbolHeight, resultMarkerSymbolXOffset, resultMarkerSymbolYOffset);
const resultLineSymbolColor:uint = configXML.symbols.simplelinesymbol.@color || 0xFF0000;
const resultLineSymbolAlpha:Number = (configXML.symbols.simplelinesymbol.@alpha[0] != null) ? configXML.symbols.simplelinesymbol.@alpha : 0.8;
const resultLineSymbolWidth:Number = (configXML.symbols.simplelinesymbol.@width[0] != null) ? configXML.symbols.simplelinesymbol.@width : 2;
resultLineSymbol = new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, resultLineSymbolColor, resultLineSymbolAlpha, resultLineSymbolWidth);

const resultFillSymbolColor:uint = configXML.symbols.simplefillsymbol.@color || 0xFF0000;
const resultFillSymbolAlpha:Number = (configXML.symbols.simplefillsymbol.@alpha[0] != null) ? configXML.symbols.simplefillsymbol.@alpha : 0.5;
const resultFillSymbolOutlineColor:uint = configXML.symbols.simplefillsymbol.outline.@color || 0xFF0000;
const resultFillSymbolOutlineAlpha:Number = (configXML.symbols.simplefillsymbol.outline.@alpha[0] != null) ? configXML.symbols.simplefillsymbol.outline.@alpha : 0.8;
const resultFillSymbolOutlineWidth:Number = (configXML.symbols.simplefillsymbol.outline.@width[0] != null) ? configXML.symbols.simplefillsymbol.outline.@width : 2;
resultFillSymbol = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID, resultFillSymbolColor, resultFillSymbolAlpha, new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, resultFillSymbolOutlineColor, resultFillSymbolOutlineAlpha, resultFillSymbolOutlineWidth));


graphicsLayer = new GraphicsLayer();
graphicsLayer.name = configXML.layername || widgetTitle;
graphicsLayer.symbol = resultMarkerSymbol;
//graphicsLayer.addEventListener(FlexEvent.HIDE, graphicsLayer_hideHandler);
map.addLayer(graphicsLayer);



}
private function widgetClosedHandler(event:Event):void
{
graphicsLayer.visible = false;
 
}

private function widgetOpenedHandler(event:Event):void
{                  
              activateTool();
  if (graphicsLayer)
  {
  graphicsLayer.visible = true;
  }

}
private function activateTool():void
{
//drawSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.STYLE_CIRCLE, 15, 0x3FAFDC, 1);
setMapAction(DrawTool.MAPPOINT, "Click Point",graphicPointSym, drawEnd);
}

private function drawEnd(event:DrawEvent):void
{
var geom:Geometry =  event.graphic.geometry;
//var pt:MapPoint = geom as MapPoint;
queryFeaturesGraphical(geom);
//Alert.show("Click location: " + pt.x + ", " + pt.y);
//
}
private function queryFeaturesGraphical(geom:Geometry):void
{
var index:int=1;
try
{
//var i:int = cboLayerGraphical.selectedIndex;
queryLayer = configSearchGraphical[index].layer;//关键方法,得到查询的图层
//Alert.show('000');
if (queryLayer && !queryLayer.loaded)
{
queryLayer.addEventListener(LayerEvent.LOAD, queryLayer_loadHandler);
function queryLayer_loadHandler(event:LayerEvent):void
{
queryFeaturesGraphical(geom)
}
return;
}

queryGeom = geom;//查询图元
queryFields = configSearchGraphical[index].fields;//查询的字段
//Alert.show('field:'+configSearchGraphical[index].fields);
queryTitleField = configSearchGraphical[index].titlefield;
queryLinkField = configSearchGraphical[index].linkfield;
queryLinkAlias = configSearchGraphical[index].linkalias;

activateTool()
if (queryLayer)
{
var query:Query = new Query();
query.geometry = queryGeom;
query.spatialRelationship = Query.SPATIAL_REL_INTERSECTS;
query.outSpatialReference = map.spatialReference;
queryLayer.queryFeatures(query, new AsyncResponder(onResult, onFault, queryFields));
 
}
}catch (error:Error)
{
Alert.show('错误:'+error.message);
}
}

 

function onResult(featureSet:FeatureSet, token:XMLList = null):void
{
try
{
//searchResultAC = createSearchResults(featureSet, token);
//addSharedData(widgetTitle, searchResultAC);//查到的图元,增加到上节说的共享数据区域,提供其他插件或本身使用。

if (featureSet.features.length < 1)
{
Alert.show('查询无数据');
}
else
{
for each (var graphic:Graphic in featureSet.features)
{
if (graphic.geometry)
{
switch (graphic.geometry.type)
{
case Geometry.MAPPOINT:
{
graphic.symbol = resultMarkerSymbol;
break;
}
case Geometry.POLYLINE:
{
graphic.symbol = resultLineSymbol;
break;
}
case Geometry.POLYGON:
{
graphic.symbol = resultFillSymbol;
break;
}
}
}
graphicsLayer.add(graphic);

}
for(var i:int=0 ;i<featureSet.features.length;i++)
{
Alert.show('查询结果:'+featureSet.features[i].attributes.NAME   );
}

}
 
}
catch (error:Error)
{
Alert.show('查询错误:'+error.message);
}
}


function onFault(info:Object, token:Object = null):void
{
Alert.show('查询失败:'+info.toString());
}



]]>
</fx:Script>
<viewer:WidgetTemplate id="wTemplate" height="82" closed="widgetClosedHandler(event)"
  open="widgetOpenedHandler(event)">
<viewer:layout>
<s:BasicLayout/>
</viewer:layout>
<s:Label id="lbl" width="100%" fontSize="18" fontStyle="italic" fontWeight="bold"/>
</viewer:WidgetTemplate>
</viewer:BaseWidget>
原创粉丝点击