1、需要注意的要查询的图层具有查询功能,这个你可以在http://localhost/ArcGIS/rest/services里找到你的服务,选择具体的图层,最底下有一个query layer,在里面可以查查试一试。如果这里面都查不了,程序肯定查不了。
2、我出现的问题就是有的图层可以查询有的不可以,捣鼓半天才发现查不了的图层的空间信息屏蔽了。查询定位没空间信息当然会出错了,错误就是当需要把空间图形加载到graphicLayers时候就提示对象为空10094错误,后来把图层的空间信息全部显示,再发布服务,就oK了。
3、有时候新发布的服务在rest地址里是不存在的,关机重新启动OK了。
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:esri="http://www.esri.com/2008/ags">
<mx:Canvas width="1000" height="500" x="33" y="50" borderStyle="solid" borderThickness="3" borderColor="#D67D8">
<esri:Map id="myMap">
<esri:ArcGISTiledMapServiceLayer url="http://localhost/ArcGIS/rest/services/tileMap2/MapServer"/>
<esri:ArcGISDynamicMapServiceLayer id="myDynamicServiceLayer" url="http://localhost/ArcGIS/rest/services/myMap/MapServer" creationComplete="loadMapLayer(event)" >
<esri:visibleLayers>
<mx:ArrayCollection>
</mx:ArrayCollection>
</esri:visibleLayers>
</esri:ArcGISDynamicMapServiceLayer>
<esri:GraphicsLayer id="myGraphicLayer" symbolFunction="{mySymbolFunction}" />
</esri:Map>
</mx:Canvas>
<esri:SimpleMarkerSymbol id="sms" style="circle" color="#000000" alpha="1" size="30"/>
<esri:SimpleLineSymbol id="sls" style="solid" color="#000000" alpha="0.6" width="5"/>
<esri:SimpleFillSymbol id="sfs" color="0x0000FF" alpha="0.6"/>
<mx:Canvas width="1000" height="30" x="33" y="10" borderStyle="solid" borderThickness="3" borderColor="#D67D8">
<mx:ComboBox id="layerList" x="10" y="3" width="117"/>
<mx:TextInput id="qText" x="135" y="3" width="233" enter="doQuery()" text="XIAN like '长安%'"/>
<mx:Button x="370" y="3" label="查询" fontSize="12" height="22" click="doQuery()"/>
</mx:Canvas>
<mx:DataGrid id="resultTable" change="clickHandler(event)" y="10" x="1035" height="500" borderStyle="solid" borderThickness="3" borderColor="#D67D8"/>
<esri:QueryTask id="queryTask">
</esri:QueryTask>
<esri:Query id="query" />
<mx:Script>
<![CDATA[
import com.esri.ags.geometry.Polygon;
import com.esri.ags.geometry.Polyline;
import com.esri.ags.geometry.MapPoint;
import com.esri.ags.events.ExtentEvent;
import com.esri.ags.geometry.Extent;
import mx.events.ListEvent;
import com.esri.ags.tasks.FeatureSet;
import mx.rpc.AsyncResponder;
import com.esri.ags.symbol.Symbol;
import com.esri.ags.Graphic;
import com.esri.ags.geometry.Geometry;
import mx.controls.Alert;
private function loadMapLayer(event:Event):void
{
//获取图层信息
var myLayersInfos:Array;
myLayersInfos=myDynamicServiceLayer.layerInfos;
var myLayers:Array=new Array();
for(var i:int=0;i<myLayersInfos.length;i++)
{
myLayers.push({label:myLayersInfos[i].name,data:i});
}
//给combobox绑定数据源
layerList.dataProvider=myLayers;
}
private function mySymbolFunction(myGraphic:Graphic):Symbol
{
var result:Symbol;
switch(myGraphic.geometry.type)
{
case Geometry.MAPPOINT://添加引用包geometry.Geometry
{
result=sms;
break;
}
case Geometry.POLYLINE://添加引用包geometry.Geometry
{
result=sls;
break;
}
case Geometry.POLYGON://添加引用包geometry.Geometry
{
result=sfs;
break;
}
}
return result;
}
private function doQuery():void
{
//清除高亮显示
// myGraphicLayer.clear();
//设置查询任务的URL,就是设置要查询的图层
queryTask.url="http://localhost/ArcGIS/rest/services/myMap/MapServer/"+layerList.value;
// Alert.show(queryTask.url);
//设置查询语句
query.where=qText.text;
// query.where=" 名称 like '%岗%'";
// query.where="育龄妇女 >= 139413";
// query.where= "objectid=2";
//Alert.show(qText.text);
//查询结果返回geometr
query.returnGeometry=true;
query.spatialRelationship="esriSpatialRelEnvelopeIntersects";
//设置查询的字段
var fields:Array=new Array();
fields.push("OBJECTID");
fields.push("XIAN");
fields.push("HL");
// fields.push("育龄妇女");
query.outFields=fields;
//执行查询
queryTask.execute(query,new AsyncResponder(onResult,onFault));
}
private function onResult(featureSet:FeatureSet,token:Object=null):void
{
var resultList:Array=new Array();
//myGraphicLayer.graphicProvider=featureSet.features;
var myGraphics:Graphic;
for each( myGraphics in featureSet.features)
{
myGraphicLayer.add(myGraphics);
resultList.push({"objectID":myGraphics.attributes.OBJECTID,"县名":myGraphics.attributes.XIAN,"HL":myGraphics.attributes.HL});
//resultList.push({"name":myGraphics.attributes.名称,"ID":myGraphics.attributes.OBJECTID,"育龄妇女":myGraphics.attributes.育龄妇女});
}
// 给grid设置数据源
resultTable.dataProvider=resultList;
}
private function onFault(info:Object,token:Object=null):void
{
Alert.show("error!!!!!!");
}
//grid点击事件进行定位居中中显示
public function clickHandler(event:ListEvent):void
{
//获取点击的行的id
var idStr:String=event.itemRenderer.data.objectID;
//Alert.show(idStr);
queryTask.url="http://localhost/ArcGIS/rest/services/myMap/MapServer/"+layerList.value;
//是否返回图形
query.returnGeometry=true;
query.spatialRelationship="esriSpatialRelEnvelopeIntersects";
//query.where="name like '%"+idStr+"%'";
query.where="OBJECTID="+idStr;
queryTask.execute(query,new AsyncResponder(onResult2,onFault));
}
private function onResult2(featureSet:FeatureSet,tojen:Object):void
{
var resultList:Array=new Array();
//var myGraphic1:Graphic=featureSet.features[0];
for each( var myGraphic:Graphic in featureSet.features)
{
myGraphicLayer.add(myGraphic);
var geo:Geometry=myGraphic.geometry;
var ext:Extent=new Extent();
switch(myGraphic.geometry.type)
{
case Geometry.MAPPOINT:
{
//转成点
var pnt:MapPoint=geo as MapPoint;
//定位中心
myMap.centerAt(pnt);
break;
}
case Geometry.POLYLINE:
{
//转成线
var pline:Polyline=geo as Polyline;
//设置地图的视图范围
ext=pline.extent;
myMap.extent=ext;
break;
}
case Geometry.POLYGON:
{
//转成线
var poly:Polygon=geo as Polygon;
//设置地图的视图范围
ext=poly.extent;
myMap.extent=ext;
break;
}
default:
{
break;
}
}
}
}
]]>
</mx:Script>
</mx:Application>