ArcGIS api for javascript——显示多个ArcGIS Online服务

描述

本例展示了如何使用按钮在地图里的两个不同的图层间切换。所有地图里的图层恰巧是来自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函数显示图层(使图层可见)。

 

 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 2 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
 3 <html>
 4   <head>
 5     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
 6     <meta http-equiv="X-UA-Compatible" content="IE=7" />
 7     <title>显示多个ArcGIS Online服务</title>
 8     <script type="text/javascript">djConfig = { isDebug:true };</script>
 9     <link rel="stylesheet" type="text/css" href="http://serverapi.arcgisonline.com/jsapi/arcgis/1.6/js/dojo/dijit/themes/tundra/tundra.css">
10     <script type="text/javascript" src="http://serverapi.arcgisonline.com/jsapi/arcgis/?v=1.6"></script>
11     <script type="text/javascript">
12         dojo.require("esri.map");
13         dojo.require("dijit.form.Button");
14         
15         var map;
16         var streetMap, imageryPrime, shadedRelief, ngsTopoUS, boundariesWorld;
17         
18         function init(){
19             map = new esri.Map("map");
20             imageryPrime = new esri.layers.ArcGISTiledMapServiceLayer("http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_Imagery_World_2D/MapServer", {id:"imageryPrime"});
21                map.addLayer(imageryPrime);
22 
23             streetMap = initLayer("http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_StreetMap_World_2D/MapServer", "streetMap");
24             shadedRelief = initLayer("http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_ShadedRelief_World_2D/MapServer", "shadedRelief");
25             ngsTopoUS = initLayer("http://server.arcgisonline.com/ArcGIS/rest/services/NGS_Topo_US_2D/MapServer", "ngsTopoUS");
26             boundariesWorld = initLayer("http://server.arcgisonline.com/ArcGIS/rest/services/Reference/ESRI_BoundariesPlaces_World_2D/MapServer", "boundariesWorld");
27         
28         }
29         function initLayer(url, id) {
30             var layer = new esri.layers.ArcGISTiledMapServiceLayer(url, {id:id, visible:false});
31                map.addLayer(layer);
32                return layer;
33         }
34         
35         function changeMap(layers) {
36             hideImageTiledLayers(layers);
37             for (var i=0;i<layers.length;i++) {
38                 layers[i].show();
39             }
40         
41         }
42         
43         function hideImageTiledLayers(layers) {
44         
45         alert(map.layerIds.length);
46             for(var i=0,j=map.layerIds.length;i<j;i++) {
47                   
48                 var layer = map.getLayer(map.layerIds[i]);
49                 if(dojo.indexOf(layers,layer) == -1) {//没有找到
50                     layer.hide();
51                 }
52             
53             }
54         
55         } 
56         
57       
58         dojo.addOnLoad(init);
59     </script>
60  
61   </head>
62 
63   <body class="tundra">
64       <div id="map" style="width: 1100px;height: 600px;border: 1px solid #000"></div>
65       <div  style="position: absolute;right: 175px;top: 10px;z-index: 999;">
66           <button dojoType="dijit.form.Button" onclick="changeMap([imageryPrime]);"> imageryPrime</button>
67           <button dojoType="dijit.form.Button" onclick="changeMap([imageryPrime,boundariesWorld]);">imageryPrime,boundariesWorld </button>
68           <button dojoType="dijit.form.Button" onclick="changeMap([streetMap]);"> streetMap</button>
69           <button dojoType="dijit.form.Button" onclick="changeMap([ngsTopoUS]);">ngsTopoUS </button>
70           <button dojoType="dijit.form.Button" onclick="changeMap([shadedRelief]);">shadedRelief </button>
71       </div>
72   
73   </body>
74 </html>

 

posted @ 2017-03-09 15:48  xiaotian_小天  Views(680)  Comments(0Edit  收藏  举报