这里发生什么任务呢?当第一次单击地图,单击的坐标被发送到一个Geoprocessor任务。该任务访问服务器上的通过ArcGIS Server 地理处理服务提供的可用的GIS模型。本例中模型计算驱动时间,它有2个输入参数"Input_Location"和 "Drive_Times"。输入位置是一个要素,设置从单击点开始驱动,驱动时间被硬编码为2分钟。如果对ArcGIS JavaScript API的地图处理服务不熟悉,地图处理使用和站点中的地理处理示例能帮助你更好的理解这个示例。

地图处理的输出作为QueryTask的输入几何体被提交。这个任务被配置仅仅在一个图层上操作:ESRI_Census_USA服务的Census Block Points图层。任务对驱车事件多边形内的区点执行一个空间查询。这个重要的代码行指定地理处理服务输出几何体做为查询几何体:

query.geometry = feature.geometry;

地图处理和查询任务的结果几何体都会用FeatureSets里的图形返回。注意在增加返回图形要素集到地图以前,必须为这些图形指定符号。如果想要用户在单击图形时见到信息窗口,还必须格式化一个InfoTemplate

注意本示例通过事件驱动。鼠标单击,地理处理完成和查询任务完成是应用里引发新事情所有事件。见Working with events学习更多关于如何在应用中使用事件。

本例应用一个代理页面以防止提交到查询任务的驱动时间多边形几何体超过一些Web浏览器的get请求的2000个字符的限制。见Using the proxy page学习更过代理页面信息。

esriConfig.defaults.io.proxyUrl = "/arcgisserver/apis/javascript/proxy/proxy.ashx";
 esriConfig.defaults.io.alwaysUseProxy = false;
 <%@ 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 (GP result)</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.gp"); 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"]; //GP服务端点
gp = new esri.tasks.Geoprocessor("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Network/ESRI_DriveTime_US/GPServer/CreateDriveTimePolygons"); // +++++监听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 features= [];
features.push(graphic);
var featureSet = new esri.tasks.FeatureSet();
featureSet.features = features;
var params = { "Input_Location":featureSet, "Drive_Times":2 };
gp.execute(params);
dojo.byId('messages').innerHTML = "<b>Executing GP Task...</b>";
}); // +++++监听GP中onExecuteComplete事件+++++
dojo.connect(gp, "onExecuteComplete", function(results,messages) {
var feature = results[0].value.features[0];
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]));
feature.setSymbol(symbol);
map.graphics.add(feature); query.geometry = feature.geometry;
queryTask.execute(query);
dojo.byId('messages').innerHTML = "<b>Executing Query...</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 drive time polygon 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">
Click the map to execute a 2 minute drive time and then use that result geometry as
input into a query.
<div id="mapDiv" style="width: 800px; height:500px;"></div>
<span id="messages"></span>
</body>
</html>

ArcGIS api for javascript——以地理处理结果为条件查询地图的更多相关文章

  1. ArcGIS api for javascript——用第二个服务的范围设置地图范围

    描述 本例展示了如何设置地图的范围为地图其中一个图层的范围.本例有两个图层:ArcGIS Online上的世界地图图层ArcGISTiledMapServiceLayer和堪萨斯州的要素的图层ArcG ...

  2. ArcGIS API for JavaScript 4.2学习笔记[2] 显示3D地图

    3D地图又叫场景. 由上一篇可知, require入口函数的第一个参数是字符串数组 ["esri/Map", "esri/views/MapView", &qu ...

  3. arcgis api for javascript 学习(二) 发布并调用地图切片

    文章将从发布切片地图到调用切片地图整个过程都展示出来. (一).切片地图的发布 1.还是前面的arcgis展示的地图 2.与发布动态地图前面的步骤是一样的 打开分享后,如图 3.一切就绪后,到达缓存的 ...

  4. ArcGIS API for JavaScript 4.2学习笔记[0] AJS4.2概述、新特性、未来产品线计划与AJS笔记目录

    放着好好的成熟的AJS 3.19不学,为什么要去碰乳臭未干的AJS 4.2? 4.2全线基础学习请点击[直达] 4.3及更高版本的补充学习请关注我的博客. ArcGIS API for JavaScr ...

  5. ArcGIS API for JavaScript开发初探——基础知识

    1.前言 在ArcGIS Web API开发体系中一共有四大类,分别为: ArcGIS API for Flex ArcGIS API for JavaScript ArcGIS API for RE ...

  6. ArcGIS api for javascript 离线部署

    一.说明: 1.本篇文章以及之后的相关的文章所使用的ArcGIS API for javascript 的版本是3.3.初学者为了学习简单,可以引用在线的 Javascript.但是如果只能连接内网, ...

  7. ArcGIS API for JavaScript(2)-ArcGIS Server发布要素图层服务

    1.前言 上一篇该系列的文章我们主要讲了一下基础Web地图搭建,这篇我们主要讲一下ArcGIS Server发布服务,并且如何调用服务.将自己的数据加载到Web地图当中来,实现Web端浏览数据. 2. ...

  8. ArcGIS API for JavaScript介绍

    ArcGIS API for JavaScript中的类是按照模块组织的,主要包含esri.esri/geometry.esri/renderers.esri/symbols.esri/symbols ...

  9. ArcGIS API for JavaScript 4.2学习笔记[5] 官方API大章节概述与内容转译

    内容如上,截图自ESRI官网,连接:ArcGIS API for JavaScript 4.2 [Get Started] 类似于绪论一样的东西,抽取了最需要关注的几个例子.如:加载Map和View, ...

随机推荐

  1. js 关于height()、innerHeight()、outerHeight()函数的区别

  2. (2016北京集训十三)【xsy1532】网络战争 - 最小割树+树上倍增+KD树

    题解: 好题!! 这题似乎能上我代码长度记录的前五? 调试时间长度应该也能上前五QAQ 首先题目要求的明显就是最小割,当然在整个森林上求Q次最小割肯定是会GG的,所以我们需要一个能快速求最小割的算法— ...

  3. SASS 使用(vs code)

    二.在vs code中编译sass 1.在拓展商店里搜索“easy sass”,并安装,安装成功后点重新加载. 2.接下来进行配置: 在 vs code 菜单栏依次点击“文件 首选项 设置”,打开 s ...

  4. execlp(3) - Linux手册

    名称: execl, execlp, execle, execv, execvp, execvpe:执行文件 总览: #include <unistd.h> extern char **e ...

  5. 51nod 1079 中国剩余定理模板

    中国剩余定理就是同余方程组除数为质数的特殊情况 我直接用同余方程组解了. 记得exgcd后x要更新 还有先更新b1再更新m1,顺序不能错!!(不然会影响到b1的更新) #include<cstd ...

  6. LibSVM C/C++

    本系列文章由 @YhL_Leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50179779 在LibSVM的库的sv ...

  7. 洛谷 P1524 十字绣

    P1524 十字绣 题目背景 考古学家发现了一块布,布上做有针线活,叫做“十字绣”,即交替地在布的两面穿线. 题目描述 布是一个n*m的网格,线只能在网格的顶点处才能从布的一面穿到另一面.每一段线都覆 ...

  8. Spring MVC 的 研发之路 (二)

    二.web.xml的简单配置介绍1 1.启动Web项目时,容器回去读web.xml配置文件里的两个节点<context-param>和<listener> 2.接着容器会创建一 ...

  9. spring注解中@component是什么意思

    @Component("userManager") public class UserManagerImpl implements UserManager { private Us ...

  10. 6. Intellij Idea 2017创建web项目及tomcat部署实战

    转自:https://www.cnblogs.com/shindo/p/7272646.html 相关软件:Intellij Idea2017.jdk16.tomcat7 Intellij Idea直 ...