前言:
目前我们对“arcgisjsapi”都比较注重,姐妹们都想要知道一些“arcgisjsapi”的相关资讯。那么小编也在网上汇集了一些对于“arcgisjsapi””的相关知识,希望各位老铁们能喜欢,咱们一起来学习一下吧!描述
本例展示了如何在另外一个任务里使用一个任务的结果。单击地图查看被单击的点的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" ";><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=";> <script type="text/javascript" src=";></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(";); //var censusMap = new esri.layers.ArcGISDynamicMapServiceLayer(";); map.addLayer(streetMap); } //初始化功能 function initFunctionality(map) { var queryTask = new esri.tasks.QueryTask(";); //确定代理页面使用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(";); // +++++监听地图的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>
标签: #arcgisjsapi