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服务的服务目录页是有帮助的.检查地图中的图层列表.现在注意这行代码限制 ...
随机推荐
- Android 开发环境安装配置手册
本文指导,如何一步步搭建Android开发平台. 1 下载软件 n JDK 1.5+ 到 http://java.sun.com/javase/downloads/index.jsp 下载 n ...
- 用Maven创建第一个web项目Struts2项目
一.创建一个web项目 参考前面文章,项目名:maven-struts-demo. 二.配置pom.xml文件添加struts2依赖 <project xmlns="http://ma ...
- js的调试和优化
一.常见的错误和异常 1.拼写错误 拼写错误,可以有代码的高亮来发现. 2.访问不存在的变量 3.括号不匹配 养成规范的编写习惯,适当应用Tab.空行等. 4.字符串和变量链接错误 采用多加括号来进行 ...
- iOS开发——Block使用小结
Block语法看上去好像很特别,但它实际上是作为极普通的C语言源代码处理的.Block的实质,就是Objective-C的对象. 1.Block的语法 ^ 返回值类型 参数列表 表达式 可省略返回值类 ...
- canvas 连线曲线图
<!DOCTYPE html><html><head> <meta charset="utf-8"> <meta name=& ...
- 2016 10 26考试 NOIP模拟赛 杂题
Time 7:50 AM -> 11:15 AM 感觉今天考完后,我的内心是崩溃的 试题 考试包 T1: 首先看起来是个贪心,然而,然而,看到那个100%数据为n <= 2000整个人就虚 ...
- Failed to initialize connector [Connector[HTTP/1.1-443]]
Failed to initialize connector [Connector[HTTP/1.1-443]] 出现如上错误时,是因为443端口被占用, 所以tomcat的https协议无法使用, ...
- wget 升级
漏洞描述: Wget是GNU计划开发的一套用于在网络上进行下载的自由软件,是Unix/Linux系统最常用的下载工具,支持通过HTTP.HTTPS以及FTP这三个最常见的TCP/IP协议下载. Wge ...
- JVM分代通俗解释
JVM分代通俗解释 学习了:https://www.cnblogs.com/zgghb/p/6428395.html
- windows环境利用apache 配置虚拟主机
windows环境利用apache 配置虚拟主机 1.改动http.host #LoadModule vhost_alias_module modules/mod_vhost_alias.so #In ...