ArcGIS API For Javascript官方文档(十)之添加任务

ArcGIS API For JS官方文档解析目录

    这个示例提供了有关如何使用task(任务)的详细信息。所有task都是异步的,因为它们发向REST服务发出http请求。使用query task(查询任务),显示表格结果,但不包括地图。

    在ArcGIS API for JavaScript Sandbox中查看此示例的活动版本。sandbox(沙箱)是一个实时代码编辑器,允许您修改示例的源代码并实时查看改变。

    以下是整个HTML页面:

<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <!--The viewport meta tag is used to improve the presentation and behavior of the samples
      on iOS devices-->
    <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no">
    <title>Query State Info without Map</title>

    <script src="https://js.arcgis.com/3.23/"></script>
    <script>
      require([
        "dojo/dom", "dojo/on",
        "esri/tasks/query", "esri/tasks/QueryTask", "dojo/domReady!"
      ], function (dom, on, Query, QueryTask) {

        var queryTask = new QueryTask("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demographics/ESRI_Census_USA/MapServer/5");

        var query = new Query();
        query.returnGeometry = false;
        query.outFields = [
          "SQMI", "STATE_NAME", "STATE_FIPS", "SUB_REGION", "STATE_ABBR",
          "POP2000", "POP2007", "POP00_SQMI", "POP07_SQMI", "HOUSEHOLDS",
          "MALES", "FEMALES", "WHITE", "BLACK", "AMERI_ES", "ASIAN", "OTHER",
          "HISPANIC", "AGE_UNDER5", "AGE_5_17", "AGE_18_21", "AGE_22_29",
          "AGE_30_39", "AGE_40_49", "AGE_50_64", "AGE_65_UP"
        ];

        on(dom.byId("execute"), "click", execute);

        function execute () {
          query.text = dom.byId("stateName").value;
          queryTask.execute(query, showResults);
        }

        function showResults (results) {
          var resultItems = [];
          var resultCount = results.features.length;
          for (var i = 0; i < resultCount; i++) {
            var featureAttributes = results.features[i].attributes;
            for (var attr in featureAttributes) {
              resultItems.push("<b>" + attr + ":</b>  " + featureAttributes[attr] + "<br>");
            }
            resultItems.push("<br>");
          }
          dom.byId("info").innerHTML = resultItems.join("");
        }
      });
    </script>
  </head>

  <body>
    US state name :
    <input type="text" id="stateName" value="California">
    <input id="execute" type="button" value="Get Details">
    <br />
    <br />
    <div id="info" style="padding:5px; margin:5px; background-color:#eee;">
    </div>
  </body>
</html>

    下面的讨论假设您已经熟悉了JavaScritp API和Dojo的基本概念,并且了解JavaScript API如何在HTML页面中工作的基本模式。

1、脚本放置在HTML head标签内

    HTML head标签中的脚本部分是您调用JavaScript API编写功能的地方

    引用包

    由于您正在实现一个task,您需要使用require()语句引用task代码包。在本例中,将引用esri/tasks包。有关可以引用的包的更多信息,请参见有关Dojo信息

require(["esri/tasks/query"], function (Query) { /* code goes here */ });

    使用dojo/domReady!插件

    函数块是构建查询的地方。首先,使用QueryTask构造函数初始化一个名为queryTask的查询任务。

  •     esri/tasks/QueryTask值是对QueryTask类的完整引用,类名总是大写的。
  •     您看到的URL是名为”ESRI_Census_USA”的地图服务服务器的端点。查询的图层为”5″层,它引用了一个状态层。此端点是可以使用服务目录生成的唯一引用。
function (dom, on, Query, QueryTask) {
  queryTask = new QueryTask("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demographics/ESRI_Census_USA/MapServer/5");

    接下里,您需要构建查询筛选器:

  • 使用Query构造器初始化名为query的查询筛选器,此构造函数不包含任何参数。
  • 根据应用程序的不同,您可能希望为每个要素返回geometry(几何)。如果您不想要geometry,则必须将属性returnGeometry设置为false。
  • 您需要使用属性outFields设置在结果集中显示哪些字段。此列表必须使用实际的字段名,而不是alias names(别名),但您可以在结果中显示字段别名。
//build query filter
var query = new Query();
query.returnGeometry = false;
query.outFields = [
  "SQMI", "STATE_NAME", "STATE_FIPS", "SUB_REGION", "STATE_ABBR",
  "POP2000", "POP2007", "POP00_SQMI", "POP07_SQMI", "HOUSEHOLDS",
  "MALES", "FEMALES", "WHITE", "BLACK", "AMERI_ES", "ASIAN", "OTHER",
  "HISPANIC", "AGE_UNDER5", "AGE_5_17", "AGE_18_21", "AGE_22_29",
  "AGE_30_39", "AGE_40_49", "AGE_50_64", "AGE_65_UP"
];

    创建一个回调函数

    回调函数execute使用dojo/on类连接到HTML页面中的输入按钮。在本例中,名为”execute”的函数(queryTask的执行函数)在用户输入state name并单击”Get Details”按钮后被调用。

  • state name用作搜索的输入文本。属性Query.text类似于SQL语句中使用”Like”的where子句。仅在与图层关联的显示字段上进行搜索。此显示字段设置在ArcMap文档中,如果没有设置显示字段,则默认显示字段为第一个文本字段。您可以确定服务目录中的图层的显示字段是什么。
  • 通过QueryTask.execute方法执行查询。该方法的参数是Query和一个对名为showResults函数的引用。
function execute(stateName) {
  query.text = stateName;
  //execute query
  queryTask.execute(query,showResults);
}

    创建一个函数来显示结果

    showResults()函数首先根据在回调函数中执行查询任务时收到的信息来解析结果。结果被传递到showResults函数中的results,这是一个FeatureSet对象,FeatureSet包含一个Graphic要素的数组。

function showResults (results) {

    在此函数的下一节中,变量resultItems填充了包含在results FeatureSet中的字段名和字段值。

  • 外部循环遍历了results FeatureSet中的每个feature(要素),在这个例子中,由于只有一个state被处理,所以结果只包含一个Graphic,for循环仅重复一次。
  • 变量featureAttributes被分配了results FeatureSet中每个Graphic的属性。
  • 内部for循环遍历了featureAttributes中的每个属性,字段名(attr)和字段值(featureAttributes[attr])被添加到resultItems数组中。
var resultItems = [];
var resultCount = results.features.length;
for (var i = 0; i < resultCount; i++) {
  var featureAttributes = results.features[i].attributes;
  for (var attr in featureAttributes) {
    resultItems.push("<b>" + attr + ":</b>  " + featureAttributes[attr] + "<br>");
  }
  resultItems.push("<br>");
}

    这个函数的下一步是将resultItems赋值给innerHTML,它允许将HTML页面上的文本替换为新文本。在本例中,使用dom.byId,它类似于JavaScript中的函数document.getElementById(id),该函数搜索并返回第一个HTML元素,其中参数id为”info”。在这种情况下,文本写在id=”info”的HTML DIV中。

dom.byId("info").innerHTML = resultItems.join("");

2、HTML BODY

    下一节是HTML页面的BODY部分。

  • 第一个input标签提供了一个文本框,供用户输入州名。默认值是”California”。
  • 第二个input标签是一个按钮,添加了点击事件,当用户单击按钮时,会调用click事件并调用execute()函数
  • DIV引用了showResults()函数中的相同变量集。

<body>
  US state name :
  <input type="text" id="stateName" value="California">
  <input id="execute" type="button" value="Get Details">
  <br />
  <br />
  <div id="info" style="padding:5px; margin:5px; background-color:#eee;">
  </div>
</body>

转载自:https://blog.csdn.net/qq_35732147/article/details/79882485

You may also like...