描述
本例展示了用户能够从没有显示服务的地图服务查询数据。大部分地图服务包含属性信息的数据集,数据集能够被查询并显示在一个简单的列或表格里。 本例按提供的州名称查询USA人口普查数据,然后显示关于州的属性信息列表。
代码创建了一个QueryTask和一个用做任务输入的 Query。注意QueryTask的构造函数需要地图服务里的图层的URL(http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demographics/ESRI_Census_USA/MapServer/5)。 在URL结尾的数字5是地图目录里的州图层的索引号。要找到你自己的地图服务的URL及它们的图层索引,使用Services Directory。
注意query.returnGeometry被设置为false因为结果不需要被显示在地图上。outFields确定州图层中的那些字段被查到。
当单击“Get Details”按钮,execute函数被调用。查询任务在被查询的图层的主要显示字段里搜索query.text,在这个图层里面是STATE_NAME字段。这就是为什么query.text被设置在文本框里输入的州名。如果想要输入任意SQL where子句,可以使用query.where代替query.text。
查询指定的所有属性能作为参数传递给QueryTask,当查询完成时连同函数一起被调用。
queryTask.execute(query,showResults);
查询结果作为FeatureSet被传递给showResults函数。函数循环访问所有结果的属性并使用html为查询结果构建一个列表。然后这个HTML被写到"info" div中。
1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 2 3 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/strict.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 7 <meta http-equiv="X-UA-Compatible" content="IE=7" /> 8 9 <title>Query State Info without Map</title> 10 11 12 <link rel="stylesheet" type="text/css" href="styles.css" 13 href="http://serverapi.arcgisonline.com/jsapi/arcgis/1.6/js/dojo/dijit/themes/tundra/tundra.css"> 14 <script type="text/javascript" src="http://serverapi.arcgisonline.com/jsapi/arcgis/?v=1.6"></script> 15 <script type="text/javascript" language="Javascript"> 16 dojo.require("esri.map"); 17 var queryTask,query; 18 function init(){ 19 //生成查询 20 queryTask = new esri.tasks.QueryTask("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demographics/ESRI_Census_USA/MapServer/5"); 21 22 //dojo.connect(queryTask,"onComplete",showResults); 23 24 //建立查询过滤器 25 query = new esri.tasks.Query(); 26 query.returnGeometry = false;//结果不显示在地图上 27 query.outFields = ["SQMI","STATE_NAME","STATE_FIPS","SUB_REGION", 28 "STATE_ABBR","POP2000","POP2007","POP00_SQMI","POP07_SQMI", 29 "HOUSEHOLDS","MALES","FEMALES","WHITE","BLACK","AMERI_ES","ASIAN", 30 "OTHER","HISPANIC","AGE_UNDER5","AGE_5_17","AGE_18_21","AGE_22_29", 31 "AGE_30_39","AGE_40_49","AGE_50_64","AGE_65_UP"]; 32 } 33 34 function execute(stateName){ 35 query.text = stateName; 36 //执行查询 37 queryTask.execute(query,showResults); 38 } 39 40 function showResults(results){ 41 var s = ""; 42 for(var i=0,il=results.features.length;i<il;i++){ 43 var featureAttributes = results.features[i].attributes; 44 for(att in featureAttributes){ 45 s = s + "<b>" + att + ":</b>" + featureAttributes[att] + "<br>"; 46 } 47 } 48 dojo.byId("info").innerHTML = s; 49 } 50 51 dojo.addOnLoad(init); 52 </script> 53 </head> 54 55 <body> 56 US state name:<input type="text" id="stateName" value="California"/> 57 <input type="button" value="Get Details" onclick="execute(dojo.byId('stateName').value)"/> 58 <br> 59 <br> 60 <div id="info" style="padding:5px;margin:5px;background-color:#eee;"></div> 61 </body> 62 </html>