描述

本例展示了如何使用按钮在地图里的两个不同的图层间切换。所有地图里的图层恰巧是来自ArcGIS Online的ArcGISTiledMapServiceLayers。按钮是Dojo dijit按钮,不过也可以使用HTML按钮,radio按钮等调用相同的函数。

当应用运行时,发生下面的事情:

1.init函数被调用,创建一个地图并且通过map.addLayer方法直接加入影像图层。函数也填充了图层名字的数组,但是没有创建除影像图层之外的任何图层。

2.用户单击按钮,调用changeMap函数。一个包含与按钮一致的图层ID的单个项目数组作为输入参数被传递给changeMap函数。

3.changeMap直接调用hideImageTiledLayers函数,传给hideImageTiledLayers函数同样的包含和被点击的按钮一致的图层ID的单个项目的数组。hideImageTiledLayers函数循环访问地图里的每个图层,和传入函数的图层ID不匹配的图层ID的图层被隐藏。

4.函数 当hideImageTiledLayers函数完成,changeMap函数循环访问图层数组里的每个图层,并调用函数initLayer。 记住数组仅仅包含一个图层,和被单击的按一致的图层

5.initLayer函数创建图层,然后增加图层到地图里。

6.changeMap函数显示图层(使图层可见)。

 <%@ 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>显示多个ArcGIS Online服务</title>
<script type="text/javascript">djConfig = { isDebug:true };</script>
<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("dijit.form.Button"); var map;
var streetMap, imageryPrime, shadedRelief, ngsTopoUS, boundariesWorld; function init(){
map = new esri.Map("map");
imageryPrime = new esri.layers.ArcGISTiledMapServiceLayer("http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_Imagery_World_2D/MapServer", {id:"imageryPrime"});
map.addLayer(imageryPrime); streetMap = initLayer("http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_StreetMap_World_2D/MapServer", "streetMap");
shadedRelief = initLayer("http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_ShadedRelief_World_2D/MapServer", "shadedRelief");
ngsTopoUS = initLayer("http://server.arcgisonline.com/ArcGIS/rest/services/NGS_Topo_US_2D/MapServer", "ngsTopoUS");
boundariesWorld = initLayer("http://server.arcgisonline.com/ArcGIS/rest/services/Reference/ESRI_BoundariesPlaces_World_2D/MapServer", "boundariesWorld"); }
function initLayer(url, id) {
var layer = new esri.layers.ArcGISTiledMapServiceLayer(url, {id:id, visible:false});
map.addLayer(layer);
return layer;
} function changeMap(layers) {
hideImageTiledLayers(layers);
for (var i=0;i<layers.length;i++) {
layers[i].show();
} } function hideImageTiledLayers(layers) { alert(map.layerIds.length);
for(var i=0,j=map.layerIds.length;i<j;i++) { var layer = map.getLayer(map.layerIds[i]);
if(dojo.indexOf(layers,layer) == -1) {//没有找到
layer.hide();
} } } dojo.addOnLoad(init);
</script> </head> <body class="tundra">
<div id="map" style="width: 1100px;height: 600px;border: 1px solid #000"></div>
<div style="position: absolute;right: 175px;top: 10px;z-index: 999;">
<button dojoType="dijit.form.Button" onclick="changeMap([imageryPrime]);"> imageryPrime</button>
<button dojoType="dijit.form.Button" onclick="changeMap([imageryPrime,boundariesWorld]);">imageryPrime,boundariesWorld </button>
<button dojoType="dijit.form.Button" onclick="changeMap([streetMap]);"> streetMap</button>
<button dojoType="dijit.form.Button" onclick="changeMap([ngsTopoUS]);">ngsTopoUS </button>
<button dojoType="dijit.form.Button" onclick="changeMap([shadedRelief]);">shadedRelief </button>
</div> </body>
</html>

ArcGIS api for javascript——显示多个ArcGIS Online服务的更多相关文章

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

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

  2. ArcGIS API for JavaScript开发笔记(一)——ArcGIS for Javascript API 3.14本地部署

    堪称史上最详细的< ArcGIS forJavascript API 3.14本地部署>文档,有图有真相~~~ ---------环境:Windows server 2012R2,IIS ...

  3. ArcGIS API for JavaScript 4.3 与ArcGIS Server联动使用【地图服务】

    [前言] 有好些网友问我怎么使用Server发布的地图服务了,其实非常的简单. 我在这里先声明:不提供Server软件,需要的请自行使用互联网搜索资源: 不阐述Server如何发布各各种服务,但是我会 ...

  4. ArcGIS api for javascript——显示地图属性

    描述 本例展示了如哦读取地图和图层的属性和返回信息给用户.本例中的四个按钮允许用户接收地图属性.每个按钮调用不同的函数. ·Get All Map Layers - 这个按钮调用getMapLayer ...

  5. ArcGIS api for javascript——显示多个查询结果

    描述 本例展示了在重叠的多边形处理查询的一种方式.单击一个石油和天然气的字段来查看地图上的高亮显示.如果仅仅点击一个要素,能够在单击一次来查看包含一些属性的InfoWindow.如果偶然单击到重叠的要 ...

  6. ArcGIS api for javascript——显示一个信息窗口

    描述 这个示例展示了在用户单击地图时如何在InfoWindow中显示信息.信息窗口是一个dijit (Dojo widget).信息窗口能够包含文本,字符,图片和任何通过HTML表示的事物.这个例子在 ...

  7. ArcGIS api for javascript——合并两个ArcGIS Online服务

    描述 这个示例创建一个地图并ArcGIS Online增加连个图层到地图.ArcGIS Online是由ESRI体提供的一组切片地图服务,可以用来通过高质量的地图和数据增强应用.这个示例增加影像和运输 ...

  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开发初探——基础知识

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

随机推荐

  1. js&jQ判断checkbox表单是否被选中

    js判断: if(document.getElementById("checkboxID").checked){ alert("checkbox is checked&q ...

  2. pthread_cleanup_push vs Autorelease VS 异常处理

    黑幕背后的Autorelease http://www.cnblogs.com/feng9exe/p/7239552.html objc_autoreleasePoolPush的返回值正是这个哨兵对象 ...

  3. 解决com.mysql.jdbc.PacketTooBigException: Packet for query is too large问题

    2017年05月10日 09:45:55 阅读数:1659 在做查询数据库操作时,报了以上错误,原因是MySQL的max_allowed_packet设置过小引起的,我一开始设置的是1M,后来改为了2 ...

  4. 紫书 习题 11-10 UVa 12264 (二分答案+最大流)

    书上写的是UVa 12011, 实际上是 12264 参考了https://blog.csdn.net/xl2015190026/article/details/51902823 这道题就是求出一种最 ...

  5. python 中进制转换及format(),int()函数用法

    python中数值型变量好像只能是十进制形式表示,其他类型变量只能以字符串形式存在,可以通过format函数将int类型变量转换成其他进制字符串,如下所示: v_code=15 # 2进制 x=for ...

  6. Apache activemq入门示例(maven项目)

    http://outofmemory.cn/java/mq/apache-activemq-demo

  7. 不安全的直接对象引用:你的 ASP.NET 应用数据是否安全?

    介绍 作为一个在X94的航空工程师,你的老板要求你从2号楼的工程图中检索出一个特定的专利.不幸的是,进入大楼需要你出示你具有进入大楼的资格的证明,然后你迅速地以徽章的形式出示给了保安.到了十三楼,进入 ...

  8. Memcached 集群环境Java客户端

    Memcached 集群环境Java客户端 学习了: http://blog.csdn.net/zhouzhiwengang/article/details/53154112 http://guazi ...

  9. Linux系统编程——进程间通信:管道(pipe)

    管道的概述 管道也叫无名管道,它是是 UNIX 系统 IPC(进程间通信) 的最古老形式,全部的 UNIX 系统都支持这样的通信机制. 无名管道有例如以下特点: 1.半双工,数据在同一时刻仅仅能在一个 ...

  10. 查看suse系统版本

    cat /etc/*-release OR lsb_release -d