描述

本例展示了使用一个地理处理计算一个可视域(viewshed) 单击地图上的任意点查看该点5英里内能看见的所有区域。这个模型需要几秒钟来运行并反馈结果。

可视域计算是通过ArcGIS Server 地理处理服务实现。该服务提供访问服务器上的一个包含可视域(viewshed)工具的模型(任务)。 Geoprocessor构造函数需要任务的URL(http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Elevation/ESRI_Elevation_World/GPServer/Viewshed)。 可以使用Services Directory查出自己的地理处理服务的URL并使用。

当地图被单击,一个事件监听器调用函数computeViewShed,在单击的位置增加一个SimpleMarkerSymbol。该函数还为任务建立了两个参数。第一个参数是单击的点,第二个参数是维持可视域合理的大小的缓存距离。在本例中可视域被计算到单击点距离为5英里。

下面的第一行为地理处理任务按正确的格式建立参数,第二行代码执行任务。因为任务是同步的,所以使用execute方法,这意味着用户做其他事情以前要等待结果出现。对于大的工作,能够调用submitJob异步地运行工作,过一会再获得结果。

  1. var params = { "Input_Observation_Point":featureSet, "Viewshed_Distance":vsDistance };
  1. gp.execute(params, drawViewshed);

上面的执行方法体的回调函数是drawViewshed,当结果可用时drawViewshed函数被调用。这个函数定义了结果的符号并将它们增加到地图上。下面的循环是必需的以防结果返回的是多个部分的要素。这在可视域图层是很有可能发生的因为不平地形会留下分开的可视区域块。

  1. for (var f=0, fl=features.length; f<fl; f++) {
  1.   var feature = features[f];
  1.   feature.setSymbol(polySymbol);
  1.   map.graphics.add(feature);
  1. }
  2.  
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  5. <meta http-equiv="X-UA-Compatible" content="IE=7" />
  6. <title>GP Viewshed Task</title>
  7. <link rel="stylesheet" type="text/css" href="http://serverapi.arcgisonline.com/jsapi/arcgis/1.5/js/dojo/dijit/themes/tundra/tundra.css">
  8. <script type="text/javascript" src="http://serverapi.arcgisonline.com/jsapi/arcgis/?v=1.5"></script>
  9. <script type="text/javascript">
  10. dojo.require("esri.map");
  11. dojo.require("esri.tasks.gp");
  12.  
  13. var map, gp;
  14.  
  15. //初始化地图,地理处理器
  16. function init() {
  17. var startExtent = new esri.geometry.Extent(-122.7268, 37.4557, -122.1775, 37.8649, new esri.SpatialReference({wkid:4326}) );
  18.  
  19. map = new esri.Map("mapDiv", { extent: startExtent });
  20. var streetMap = new esri.layers.ArcGISTiledMapServiceLayer("http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_StreetMap_World_2D/MapServer");
  21. map.addLayer(streetMap);
  22.  
  23. gp = new esri.tasks.Geoprocessor("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Elevation/ESRI_Elevation_World/GPServer/Viewshed");
  24.  
  25. gp.setOutputSpatialReference({wkid:4326});
  26. dojo.connect(map, "onClick", computeViewShed);
  27. }
  28.  
  29. function computeViewShed(evt) {
  30. //清除所有图层
  31. map.graphics.clear();
  32. //创建点并设置点的样式
  33. var pointSymbol = new esri.symbol.SimpleMarkerSymbol();
  34. pointSymbol.setSize(5);
  35. pointSymbol.setOutline(new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([255,0,0]), 1));
  36. pointSymbol.setColor(new dojo.Color([0,255,0,0.25]));
  37. //将点的坐标和样式加入到图层中
  38. var graphic = new esri.Graphic(evt.mapPoint,pointSymbol);
  39. map.graphics.add(graphic);
  40.  
  41. var features= [];
  42. features.push(graphic);
  43. var featureSet = new esri.tasks.FeatureSet();
  44. featureSet.features = features;
  45.  
  46. //构造缓冲长度,这里的单位是可以更改的
  47. var vsDistance = new esri.tasks.LinearUnit();
  48. vsDistance.distance = 5;
  49. //该单位根据GP发布的单位进行选择
  50. vsDistance.units = "esriMiles";
  51. //设置GP参数
  52. var params = { "Input_Observation_Point":featureSet, "Viewshed_Distance":vsDistance };
  53. gp.execute(params, drawViewshed);//同步
  54. }
  55.  
  56. function drawViewshed(results, messages) {
  57. //设置填充的样式,
  58. var polySymbol = new esri.symbol.SimpleFillSymbol();
  59. polySymbol.setOutline(new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([0,0,0,0.5]), 1));
  60. polySymbol.setColor(new dojo.Color([255,127,0,0.7]));
  61. var features = results[0].value.features;
  62. for (var i=0, j=features.length; i<j; i++) {
  63. var feature = features[i];
  64. feature.setSymbol(polySymbol);
  65. map.graphics.add(feature);
  66. }
  67. }
  68.  
  69. dojo.addOnLoad(init);
  70. </script>
  71.  
  72. </head>
  73. <body class="tundra">
  74. <div id="mapDiv" style="width:800px; height:600px; border:1px solid #000;"></div>
  75. Click on map to execute ViewShed GP Task.
  76. </body>
  77. </html>

ArcGIS api for javascript——地理处理任务-计算一个可视域的更多相关文章

  1. ArcGIS API for JavaScript 4.2学习笔记[28] 可视域分析【使用Geoprocessor类】

    想知道可视域分析是什么,就得知道可视域是什么 我们站在某个地方,原地不动转一圈能看到的所有事物就叫可视域.当然平地就没什么所谓的可视域. 如果在山区呢?可视范围就会被山体挡住了.这个分析对军事上有十分 ...

  2. ArcGIS API for JavaScript开发环境搭建及第一个实例demo

    原文:ArcGIS API for JavaScript开发环境搭建及第一个实例demo ESRI公司截止到目前已经发布了最新的ArcGIS Server for JavaScript API v3. ...

  3. ArcGIS API for JavaScript 4.x 本地部署之跨域问题解决法:CORS

    众所周知,在离线部署ArcGIS API for JavaScript时,有时候会产生微件上的字体.符号变成方框的问题.这是遇到了跨域,只需要对所在服务器进行配置即可. 本篇使用的环境是:API配置在 ...

  4. ArcGIS api for javascript——地理编码任务-反向地理编码

    描述 反向地理编码确定地图上给出点的地址.本例展示了如何通过ArcGIS JavaScript API做反向地理编码. 反向地理编码和常规的地理编码请求都使用Locator类和ArcGIS Serve ...

  5. ArcGIS api for javascript——地理编码任务-地理编码地址

    描述 本例允许用户输入一个地址,然后显示匹配的地址的位置.这通常地被称为地理编码.在ArcGIS JavaScript API中,使用Locator类执行地理编码. 定位器构造函数需要ArcGIS S ...

  6. ArcGIS api for javascript——地理处理任务-瓶中信

    描述 如果在海洋中丢下一个瓶子,本例使用颗粒追踪模型显示指定的天数后瓶子在的地方.首先,输入一个追踪瓶子的天数.然后单击按钮并在海洋里的任意地方画一个点来开始模型.几秒以后将看到一条线出现描述瓶子将去 ...

  7. ArcGIS api for javascript——地理处理任务-服务区域任务

    描述 本例展示了如何发送一些输入值到ArcGIS Server上的GIS模型并获得结果反馈给web应用.本例中,模型计算自在地图上单击点起始的驱动时间多边形. 例如,这个分析类型可用于想要知道多少人生 ...

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

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

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

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

随机推荐

  1. SpringCloud学习笔记(1)----认识微服务与SpringCloud

    1.  微服务是什么? 微服务是一种由多个服务组成的集合体,它属于一种软甲架构,在微服务中,它的每个服务都是独立存在的,微服务是一种去中心化的思想. 它具有开发简单,技术栈灵活,服务独立解耦,可用性高 ...

  2. eclipse界面更改为黑色

    效果如下: 更改很简单,该两个配置就行了,如下图: 1.在window中打开Preferences,然后跟下图一样配置就行了.

  3. DNS BIND之dnssec安全介绍

    Domain Name System Security Extensions (DNSSEC)DNS安全扩展,是由IETF提供的一系列DNS安全认证的机制(可参考RFC2535).它提供了一种来源鉴定 ...

  4. AC自动机笔记

    AC自动机 #include<iostream> #include<cstring> #include<cstdio> #include<cmath> ...

  5. KMP笔记

    KMP #include<iostream> #include<cstring> #include<cstdio> #include<cmath> us ...

  6. 《virtual san 最佳实践》节选 Virtual SAN的发展与现状

    Virtual SAN的发展与现状Virtual SAN已经迭代更新到第四代,即Virtual SAN 6.2.通过三次主版本迭代,Virtual SAN已经成为一款非常成熟的软件定义存储软件.在此, ...

  7. Rancher介绍安装以及对docker的管理

    原文:Rancher介绍安装以及对docker的管理 一.简介 Rancher是一个开源的企业级全栈化容器部署及管理平台.Rancher为容器提供一揽子基础架构服务:CNI兼容的网络服务.存储服务.主 ...

  8. 【hdu 1890】Robotic Sort

    [题目链接]:http://acm.hdu.edu.cn/showproblem.php?pid=1890 [题意] 给你n个数字; i从1到n; 每次让你把第i小的数和数组的第i个元素之间这段区间内 ...

  9. iOS gzip解压

    1. 导入libz库(如:libz 1.2.5.dylib) 2. 引入头文件 #import "zlib.h" 3. 实现解压(输入输出都为NSData对象) -(NSData ...

  10. Hibernate是怎么工作的——Hibernate的工作流程

    举个简单的样例说明: 1.Base.java package cn.flymouse.hibernate; import java.util.Date; import org.hibernate.Qu ...