描述

本例展示了如何在另外一个任务里使用一个任务的结果。单击地图查看被单击的点的1公里范围内的缓存(如果需要可以修改这个默认的缓存距离)。也可以看缓存区的这些点的人口普查街区信息。单击一个点查看更多的人口普查街区的信息。

通过GeometryService, QueryTask和一些事件监听器实现了所有的功能:

  • ·GeometryService对象提供访问到ArcGIS Server的几何服务,该服务可以缓冲,投影和简化几何体。
  • ·QueryTask能根据地理或属性条件从地图图层检索要素。在本例中,查询基于地理(在缓存中的区域)。有趣地是,地图图层(人口普查街区组点)不是初始显示在地图上的。对很多这样的查询任务,可以仅仅显示需要的结果元素。
  • ·事件监听器帮助脚本知道事件什么时候发生。监听器说,“当A发生,做B”。监听器可以将几个操作连在一起,象查询后缓存。每当见到dojo.connect()方法,脚本正在监听一个事件。这有一个监听器的例子:
  1. · dojo.connect(map, "onClick", function(evt) {
  1. ·            ...
  1.         }

这三个参数表示对象的事件将在哪发生(the map),本身是什么事件(a mouse click)和当事件发生时运行什么函数。

下面是本例中事情发生的顺序:

1.某人单击地图,触发地图的"onClick"事件

2.几何服务缓存点,触发几何服务的"onBufferComplete"事件

3.缓存的虚线符号被增加到地图上并且查询任务执行,触发查询任务的"onComplete"事件

4.人口普查区被增加到地图上,使用函数sumPopulation统计人口

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  3. <html>
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  6. <meta http-equiv="X-UA-Compatible" content="IE=7" />
  7. <title>QueryTask with query geometry from another task</title>
  8. <link rel="stylesheet" type="text/css"
  9. href="http://serverapi.arcgisonline.com/jsapi/arcgis/1.6/js/dojo/dijit/themes/tundra/tundra.css">
  10. <script type="text/javascript" src="http://serverapi.arcgisonline.com/jsapi/arcgis/?v=1.6"></script>
  11. <script type="text/javascript">
  12. dojo.require("esri.map");
  13. dojo.require("esri.tasks.query");
  14. dojo.require("esri.tasks.geometry");
  15.  
  16. function init() {
  17. var startExtent = new esri.geometry.Extent(-95.271, 38.933, -95.228,38.976, new esri.SpatialReference({wkid:4326}) );
  18. var map = new esri.Map("mapDiv", { extent: startExtent });
  19. //加载地图时添加查询功能
  20. dojo.connect(map, "onLoad", initFunctionality);
  21.  
  22. var streetMap = new esri.layers.ArcGISTiledMapServiceLayer("http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_StreetMap_World_2D/MapServer");
  23. //var censusMap = new esri.layers.ArcGISDynamicMapServiceLayer("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demographics/ESRI_Census_USA/MapServer/");
  24. map.addLayer(streetMap);
  25. }
  26. //初始化功能
  27. function initFunctionality(map) {
  28. var queryTask = new esri.tasks.QueryTask("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demographics/ESRI_Census_USA/MapServer/0");
  29.  
  30. //确定代理页面使用toJson几何服务并且载荷大于2000
  31. //如果不是可用的缓冲区,则会请求一个http Post代理.
  32. esriConfig.defaults.io.proxyUrl= "/arcgisserver/apis/javascript/proxy/proxy.ashx";
  33. esriConfig.defaults.io.alwaysUseProxy = false;
  34.  
  35. //查询
  36. var query = new esri.tasks.Query();
  37. query.returnGeometry = true;
  38. query.outFields = ["POP2000","HOUSEHOLDS","HSE_UNITS", "TRACT", "BLOCK"];
  39.  
  40. //几何服务端点
  41. var gsvc = new esri.tasks.GeometryService("http://sampleserver1.arcgisonline.com/arcgis/rest/services/Geometry/GeometryServer");
  42.  
  43. // +++++监听地图的onClick事件+++++
  44. dojo.connect(map, "onClick", function(evt) {
  45. map.graphics.clear();
  46. var symbol = new esri.symbol.SimpleMarkerSymbol();
  47. var graphic = new esri.Graphic(evt.mapPoint, symbol);
  48. var params = new esri.tasks.BufferParameters();
  49. params.features = [ graphic ];
  50.  
  51. // 缓冲线性单位(米,公里...)
  52. params.distances = [ dojo.byId('bufferDistance').value ];
  53. params.unit = esri.tasks.BufferParameters.UNIT_KILOMETER;
  54. params.bufferSpatialReference = new esri.SpatialReference({wkid: 102113});
  55. gsvc.buffer(params);
  56. dojo.byId('messages').innerHTML = "<b>Creating Buffer Using GeometryService...</b>";
  57. });
  58.  
  59. // +++++监听GeometryService类的onBufferComplete方法+++++
  60. dojo.connect(gsvc, "onBufferComplete", function(graphics) {
  61. var symbol = new esri.symbol.SimpleFillSymbol(
  62. "none",
  63. new esri.symbol.SimpleLineSymbol(
  64. "dashdot",
  65. new dojo.Color([255,0,0]),
  66. 2),
  67. new dojo.Color([255,255,0,0.25]));
  68. var graphic = new esri.Graphic(graphics[0].geometry,symbol);
  69. map.graphics.add(graphic);
  70.  
  71. query.geometry = graphic.geometry;
  72. queryTask.execute(query);
  73. dojo.byId('messages').innerHTML = "<b>Executing Query with Result BufferGeometry...</b>";
  74. });
  75.  
  76. // +++++监听QueryTask中的executecomplete事件+++++
  77. dojo.connect(queryTask, "onComplete", function(fset) {
  78. //创建所选标记的图形
  79. var symbol = new esri.symbol.SimpleMarkerSymbol();
  80. symbol.style = esri.symbol.SimpleMarkerSymbol.STYLE_SQUARE;
  81. symbol.setSize(8);
  82. symbol.setColor(new dojo.Color([255,255,0,0.5]));
  83.  
  84. var infoTemplate = new esri.InfoTemplate("Block: ${BLOCK}","${'*'}");
  85.  
  86. var resultFeatures = fset.features;
  87. for (var i=0, il=resultFeatures.length; i<il; i++) {
  88. var graphic = resultFeatures[i];
  89. graphic.setSymbol(symbol);
  90. graphic.setInfoTemplate(infoTemplate);
  91. map.graphics.add(graphic);
  92. }
  93. var totalPopulation = sumPopulation(fset);
  94. var r = "";
  95. r = "<b>The total Census Block population within the buffer is <i>"
  96. + totalPopulation + "</i>.</b>";
  97. dojo.byId('messages').innerHTML = r;
  98. });
  99. }
  100.  
  101. function sumPopulation(fset) {
  102. var features = fset.features;
  103. var popTotal = 0;
  104. for (var x = 0; x < features.length; x++) {
  105. popTotal = popTotal + features[x].attributes['POP2000'];
  106. }
  107. return popTotal;
  108. }
  109.  
  110. dojo.addOnLoad(init);
  111. </script>
  112. </head>
  113.  
  114. <body class="tundra">
  115. Zoom to area and click on map to select census block points within the buffered circle.<br/>
  116. Buffer distance (in kilometers):&nbsp;<input type="text" id="bufferDistance" value="1" size="5"/>
  117. <div id="mapDiv" style="width: 500px; height:500px;"></div>
  118. <span id="messages"></span>
  119. </body>
  120. </html>

ArcGIS api for javascript——用缓存区查询地图的更多相关文章

  1. ArcGIS API for JavaScript根据两个点坐标在地图上画线

    ArcGIS API for JavaScript根据两个点坐标在地图上画线比如说a(xxxx,xxxxx),b(xxxx,xxxxx).利用这两个点画一条线 var polyline = new e ...

  2. arcgis api for javascript本地部署加载地图

    最近开始学习arcgis api for javascript,发现一头雾水,决定记录下自己的学习过程. 一.下载arcgis api for js 4.2的library和jdk,具体安装包可以去官 ...

  3. arcgis api for javascript 学习(六) 地图打印

    1.本文应用arcgis api for javascript对发布的动态地图进行打印,打印的为PDF格式,打印出来如图: 2.需要特别注意的是:我们在运行代码前,需要打开PrintingTools, ...

  4. arcgis api for javascript 学习(四) 地图的基本操作

    1.文章讲解的为地图的平移.放大.缩小.前视图.后视图以及全景视图的基本功能操作 2.主要用到的是arcgis api for javascript中Navigation的用法,代码如下: <! ...

  5. ArcGIS api for JavaScript 3.27 FindTask查询功能

    在ArcGIS API中查询功能是经常使用的,常用的三个查询分别是FindTask,QueryTask,IdentifyTask.它们各自都有自己的特点. 查询功能分为属性查询和空间查询 FindTa ...

  6. ArcGIS api for javascript——用图表显示查询结果

    描述 本例展示了如何使用查询任务结果用去Google Chart API构建一个图表.当运行本例,点击一个郡县去看出现在一个无焦点的InfoWindow中的人口统计的数据的图表. 函数init创建了一 ...

  7. ArcGIS api for javascript——显示多个查询结果

    描述 本例展示了在重叠的多边形处理查询的一种方式.单击一个石油和天然气的字段来查看地图上的高亮显示.如果仅仅点击一个要素,能够在单击一次来查看包含一些属性的InfoWindow.如果偶然单击到重叠的要 ...

  8. ArcGIS api for javascript——图形-增加图形到地图

    描述 本例展示了如何使用Draw工具栏在地图上描绘许多种类的几何体.ArcGIS JavaScript API包含工具栏. 工具栏不是一个在页面上自动地可见的用户界面组件.相反,工具栏是一个助手类,可 ...

  9. ArcGIS api for javascript——使用图层定义显示地图

    描述 本例展示如何使用图层定义来限制显示在地图上的图层信息.为了了解本例做了什么,看看用于这个地图的ESRI_Census_USA服务的服务目录页是有帮助的.检查地图中的图层列表.现在注意这行代码限制 ...

随机推荐

  1. 阿里云ecs : Couldn't connect to host, port: smtp.aliyun.com, 25; timeout -1;

    上传到服务器后javamail发邮件异常 链接 原来是ECS基于安全考虑,禁用了端口25. 改成465就可以发邮件了. p.setProperty("mail.smtp.socketFact ...

  2. pthread 的 api 分类

    pthreads defines a set of C programming language types, functions and constants. It is implemented w ...

  3. Vue项目结合vux使用

    引入vux 1.直接安装或者更新: npm install vux --save 或者使用 yarn yarn add vux // 安装 yarn upgrade vux // 更新 2.vux2必 ...

  4. 简洁的MVC思想框架——Nancy(Post操作与外部引用css和JS)

    之前介绍了关于Nancy配置与Get基础操作,以下来介绍有关Nancy的Post操作. 第一步,设计主界面,以登录界面为例:Login.cshtml 路径为: 设计好页面后,在之前的modules类中 ...

  5. [LOJ2607]【NOIP2012】疫情控制

    题意: 题目描述 H 国有n个城市,这n个城市用n-1 条双向道路相互连通构成一棵树,1 号城市是首都,也是树中的根节点. H 国的首都爆发了一种危害性极高的传染病.当局为了控制疫情,不让疫情扩散到边 ...

  6. Manacher 求最长回文子串算法

    Manacher算法,是由一个叫Manacher的人在1975年发明的,可以在$O(n)$的时间复杂度里求出一个字符串中的最长回文子串. 例如这两个回文串“level”.“noon”,Manacher ...

  7. js各种验证

    1. var Validate = function() { //账号验证 字母,数字,下划线,不能少于6位大于20位 this.isName =function(value){ var reg = ...

  8. Fastlane基础介绍

    Fastlane是什么 Git地址: Fastlane 文档地址:Fastlane Document Fastlane是一整套的客户端CICD工具集合.Fastlane可以非常快速简单的搭建一个自动化 ...

  9. vps上运行serv-u的问题

    为了给产品环境建个测试站,今天特意申请一个vps来做开发用,但运行了Serv-U的ServUDaemon.exe后始终提示: 响应: 530 User czhan cannot log in. 很无语 ...

  10. Windows下从源代码编译Skia

    在PPAPI里面画图,能够结合第三方的图形库.比方Cairo.Skia. Google Chrome.Chromium和Android都使用Skia作为画图引擎.我也来试试Skia,先过编译关. fo ...