ArcGIS api for javascript——用缓存区查询地图
描述
本例展示了如何在另外一个任务里使用一个任务的结果。单击地图查看被单击的点的1公里范围内的缓存(如果需要可以修改这个默认的缓存距离)。也可以看缓存区的这些点的人口普查街区信息。单击一个点查看更多的人口普查街区的信息。
通过GeometryService, QueryTask和一些事件监听器实现了所有的功能:
- ·GeometryService对象提供访问到ArcGIS Server的几何服务,该服务可以缓冲,投影和简化几何体。
- ·QueryTask能根据地理或属性条件从地图图层检索要素。在本例中,查询基于地理(在缓存中的区域)。有趣地是,地图图层(人口普查街区组点)不是初始显示在地图上的。对很多这样的查询任务,可以仅仅显示需要的结果元素。
- ·事件监听器帮助脚本知道事件什么时候发生。监听器说,“当A发生,做B”。监听器可以将几个操作连在一起,象查询后缓存。每当见到dojo.connect()方法,脚本正在监听一个事件。这有一个监听器的例子:
- · dojo.connect(map, "onClick", function(evt) {
- · ...
- }
这三个参数表示对象的事件将在哪发生(the map),本身是什么事件(a mouse click)和当事件发生时运行什么函数。
下面是本例中事情发生的顺序:
1.某人单击地图,触发地图的"onClick"事件
2.几何服务缓存点,触发几何服务的"onBufferComplete"事件
3.缓存的虚线符号被增加到地图上并且查询任务执行,触发查询任务的"onComplete"事件
4.人口普查区被增加到地图上,使用函数sumPopulation统计人口
- <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
- <meta http-equiv="X-UA-Compatible" content="IE=7" />
- <title>QueryTask with query geometry from another task</title>
- <link rel="stylesheet" type="text/css"
- href="http://serverapi.arcgisonline.com/jsapi/arcgis/1.6/js/dojo/dijit/themes/tundra/tundra.css">
- <script type="text/javascript" src="http://serverapi.arcgisonline.com/jsapi/arcgis/?v=1.6"></script>
- <script type="text/javascript">
- dojo.require("esri.map");
- dojo.require("esri.tasks.query");
- dojo.require("esri.tasks.geometry");
- function init() {
- var startExtent = new esri.geometry.Extent(-95.271, 38.933, -95.228,38.976, new esri.SpatialReference({wkid:4326}) );
- var map = new esri.Map("mapDiv", { extent: startExtent });
- //加载地图时添加查询功能
- dojo.connect(map, "onLoad", initFunctionality);
- var streetMap = new esri.layers.ArcGISTiledMapServiceLayer("http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_StreetMap_World_2D/MapServer");
- //var censusMap = new esri.layers.ArcGISDynamicMapServiceLayer("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demographics/ESRI_Census_USA/MapServer/");
- map.addLayer(streetMap);
- }
- //初始化功能
- function initFunctionality(map) {
- var queryTask = new esri.tasks.QueryTask("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demographics/ESRI_Census_USA/MapServer/0");
- //确定代理页面使用toJson几何服务并且载荷大于2000
- //如果不是可用的缓冲区,则会请求一个http Post代理.
- esriConfig.defaults.io.proxyUrl= "/arcgisserver/apis/javascript/proxy/proxy.ashx";
- esriConfig.defaults.io.alwaysUseProxy = false;
- //查询
- var query = new esri.tasks.Query();
- query.returnGeometry = true;
- query.outFields = ["POP2000","HOUSEHOLDS","HSE_UNITS", "TRACT", "BLOCK"];
- //几何服务端点
- var gsvc = new esri.tasks.GeometryService("http://sampleserver1.arcgisonline.com/arcgis/rest/services/Geometry/GeometryServer");
- // +++++监听地图的onClick事件+++++
- dojo.connect(map, "onClick", function(evt) {
- map.graphics.clear();
- var symbol = new esri.symbol.SimpleMarkerSymbol();
- var graphic = new esri.Graphic(evt.mapPoint, symbol);
- var params = new esri.tasks.BufferParameters();
- params.features = [ graphic ];
- // 缓冲线性单位(米,公里...)
- params.distances = [ dojo.byId('bufferDistance').value ];
- params.unit = esri.tasks.BufferParameters.UNIT_KILOMETER;
- params.bufferSpatialReference = new esri.SpatialReference({wkid: 102113});
- gsvc.buffer(params);
- dojo.byId('messages').innerHTML = "<b>Creating Buffer Using GeometryService...</b>";
- });
- // +++++监听GeometryService类的onBufferComplete方法+++++
- dojo.connect(gsvc, "onBufferComplete", function(graphics) {
- var symbol = new esri.symbol.SimpleFillSymbol(
- "none",
- new esri.symbol.SimpleLineSymbol(
- "dashdot",
- new dojo.Color([255,0,0]),
- 2),
- new dojo.Color([255,255,0,0.25]));
- var graphic = new esri.Graphic(graphics[0].geometry,symbol);
- map.graphics.add(graphic);
- query.geometry = graphic.geometry;
- queryTask.execute(query);
- dojo.byId('messages').innerHTML = "<b>Executing Query with Result BufferGeometry...</b>";
- });
- // +++++监听QueryTask中的executecomplete事件+++++
- dojo.connect(queryTask, "onComplete", function(fset) {
- //创建所选标记的图形
- var symbol = new esri.symbol.SimpleMarkerSymbol();
- symbol.style = esri.symbol.SimpleMarkerSymbol.STYLE_SQUARE;
- symbol.setSize(8);
- symbol.setColor(new dojo.Color([255,255,0,0.5]));
- var infoTemplate = new esri.InfoTemplate("Block: ${BLOCK}","${'*'}");
- var resultFeatures = fset.features;
- for (var i=0, il=resultFeatures.length; i<il; i++) {
- var graphic = resultFeatures[i];
- graphic.setSymbol(symbol);
- graphic.setInfoTemplate(infoTemplate);
- map.graphics.add(graphic);
- }
- var totalPopulation = sumPopulation(fset);
- var r = "";
- r = "<b>The total Census Block population within the buffer is <i>"
- + totalPopulation + "</i>.</b>";
- dojo.byId('messages').innerHTML = r;
- });
- }
- function sumPopulation(fset) {
- var features = fset.features;
- var popTotal = 0;
- for (var x = 0; x < features.length; x++) {
- popTotal = popTotal + features[x].attributes['POP2000'];
- }
- return popTotal;
- }
- dojo.addOnLoad(init);
- </script>
- </head>
- <body class="tundra">
- Zoom to area and click on map to select census block points within the buffered circle.<br/>
- Buffer distance (in kilometers): <input type="text" id="bufferDistance" value="1" size="5"/>
- <div id="mapDiv" style="width: 500px; height:500px;"></div>
- <span id="messages"></span>
- </body>
- </html>
ArcGIS api for javascript——用缓存区查询地图的更多相关文章
- ArcGIS API for JavaScript根据两个点坐标在地图上画线
ArcGIS API for JavaScript根据两个点坐标在地图上画线比如说a(xxxx,xxxxx),b(xxxx,xxxxx).利用这两个点画一条线 var polyline = new e ...
- arcgis api for javascript本地部署加载地图
最近开始学习arcgis api for javascript,发现一头雾水,决定记录下自己的学习过程. 一.下载arcgis api for js 4.2的library和jdk,具体安装包可以去官 ...
- arcgis api for javascript 学习(六) 地图打印
1.本文应用arcgis api for javascript对发布的动态地图进行打印,打印的为PDF格式,打印出来如图: 2.需要特别注意的是:我们在运行代码前,需要打开PrintingTools, ...
- arcgis api for javascript 学习(四) 地图的基本操作
1.文章讲解的为地图的平移.放大.缩小.前视图.后视图以及全景视图的基本功能操作 2.主要用到的是arcgis api for javascript中Navigation的用法,代码如下: <! ...
- ArcGIS api for JavaScript 3.27 FindTask查询功能
在ArcGIS API中查询功能是经常使用的,常用的三个查询分别是FindTask,QueryTask,IdentifyTask.它们各自都有自己的特点. 查询功能分为属性查询和空间查询 FindTa ...
- ArcGIS api for javascript——用图表显示查询结果
描述 本例展示了如何使用查询任务结果用去Google Chart API构建一个图表.当运行本例,点击一个郡县去看出现在一个无焦点的InfoWindow中的人口统计的数据的图表. 函数init创建了一 ...
- ArcGIS api for javascript——显示多个查询结果
描述 本例展示了在重叠的多边形处理查询的一种方式.单击一个石油和天然气的字段来查看地图上的高亮显示.如果仅仅点击一个要素,能够在单击一次来查看包含一些属性的InfoWindow.如果偶然单击到重叠的要 ...
- ArcGIS api for javascript——图形-增加图形到地图
描述 本例展示了如何使用Draw工具栏在地图上描绘许多种类的几何体.ArcGIS JavaScript API包含工具栏. 工具栏不是一个在页面上自动地可见的用户界面组件.相反,工具栏是一个助手类,可 ...
- ArcGIS api for javascript——使用图层定义显示地图
描述 本例展示如何使用图层定义来限制显示在地图上的图层信息.为了了解本例做了什么,看看用于这个地图的ESRI_Census_USA服务的服务目录页是有帮助的.检查地图中的图层列表.现在注意这行代码限制 ...
随机推荐
- 阿里云ecs : Couldn't connect to host, port: smtp.aliyun.com, 25; timeout -1;
上传到服务器后javamail发邮件异常 链接 原来是ECS基于安全考虑,禁用了端口25. 改成465就可以发邮件了. p.setProperty("mail.smtp.socketFact ...
- pthread 的 api 分类
pthreads defines a set of C programming language types, functions and constants. It is implemented w ...
- Vue项目结合vux使用
引入vux 1.直接安装或者更新: npm install vux --save 或者使用 yarn yarn add vux // 安装 yarn upgrade vux // 更新 2.vux2必 ...
- 简洁的MVC思想框架——Nancy(Post操作与外部引用css和JS)
之前介绍了关于Nancy配置与Get基础操作,以下来介绍有关Nancy的Post操作. 第一步,设计主界面,以登录界面为例:Login.cshtml 路径为: 设计好页面后,在之前的modules类中 ...
- [LOJ2607]【NOIP2012】疫情控制
题意: 题目描述 H 国有n个城市,这n个城市用n-1 条双向道路相互连通构成一棵树,1 号城市是首都,也是树中的根节点. H 国的首都爆发了一种危害性极高的传染病.当局为了控制疫情,不让疫情扩散到边 ...
- Manacher 求最长回文子串算法
Manacher算法,是由一个叫Manacher的人在1975年发明的,可以在$O(n)$的时间复杂度里求出一个字符串中的最长回文子串. 例如这两个回文串“level”.“noon”,Manacher ...
- js各种验证
1. var Validate = function() { //账号验证 字母,数字,下划线,不能少于6位大于20位 this.isName =function(value){ var reg = ...
- Fastlane基础介绍
Fastlane是什么 Git地址: Fastlane 文档地址:Fastlane Document Fastlane是一整套的客户端CICD工具集合.Fastlane可以非常快速简单的搭建一个自动化 ...
- vps上运行serv-u的问题
为了给产品环境建个测试站,今天特意申请一个vps来做开发用,但运行了Serv-U的ServUDaemon.exe后始终提示: 响应: 530 User czhan cannot log in. 很无语 ...
- Windows下从源代码编译Skia
在PPAPI里面画图,能够结合第三方的图形库.比方Cairo.Skia. Google Chrome.Chromium和Android都使用Skia作为画图引擎.我也来试试Skia,先过编译关. fo ...