查看原文:http://www.ibloger.net/article/371.html
描述:
此示例显示了如何使用按钮来切换不同层之间中的地图。从ArcGIS Online地图中的所有图层发生ArcGISTiledMapServiceLayers。
这个 BasemapGallery 组件,在2.1版本的ArcGISJavaScript API的引入,简化了ArcGIS Online basemaps切换显示的过程。
在此示例中在库中每个菜单项 创建每一个basemap . 由于 showArcGISBasemaps 设置为true,从ArcGIS Online库中包含底图。
basemapGallery =new esri.dijit.BasemapGallery({
showArcGISBasemaps:true,
map: map
});当一个菜单项被选择的默认 basemap 被改变到所选的item: onClick : dojo.hitch(this,function(){
this.basemapGallery.select(basemap.id);
})
esri.dijit.BasemapGallery
从ArcGIS.com或用户自定义的地图或image services,这个BasemapGallery的dijit显示一个底图的集合。当一个新的底图在BasemapGallery被选中后,当前层被移除,并被添加了新的层。(新的图层被添加,旧的图层将会被移除)http://help.arcgis.com/en/webapi/javascript/arcgis/jsapi/#basemapgallery
引用链接:http://help.arcgis.com/en/webapi/javascript/arcgis/jssamples/#sample/map_agol
在线演示:http://help.arcgis.com/en/webapi/javascript/arcgis/samples/map_agol/index.html
Dojo在线API:http://dojotoolkit.org/api/
代码
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=7,IE=9">
<!--The viewport meta tag is used to improve the presentation and behavior of the samples on iOS devices-->
<meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no">
<title>显示多个 ArcGIS Online Services</title>
<link rel="stylesheet" href="http://serverapi.arcgisonline.com/jsapi/arcgis/3.3/js/dojo/dijit/themes/claro/claro.css">
<link rel="stylesheet" href="http://serverapi.arcgisonline.com/jsapi/arcgis/3.3/js/esri/css/esri.css">
<style>
html, body { height: 100%; width: 100%; margin: 0; padding: 0; }
#map { padding:0; }
</style>
<script>
var dojoConfig = {
parseOnLoad: true // 解析加载
};
</script>
<script src="http://serverapi.arcgisonline.com/jsapi/arcgis/3.3/"></script>
<script>
// 导入包
dojo.require("esri.map");
dojo.require("dijit.form.Button");
dojo.require("dijit.layout.BorderContainer");
dojo.require("dijit.layout.ContentPane");
dojo.require("esri.dijit.BasemapGallery");
dojo.require("dijit.form.Button");
dojo.require("dijit.Menu");
dojo.require("dijit.Tooltip");
var map;
var basemapGallery;
function init() {
map = new esri.Map("map", {
center: [-31.036, 42.747], // 地图居中,数组包含经度和纬度(如,[-98,40]) 或 esri.geometry.Point作为输入的位置。
zoom: 3 // 缩放深度
});
basemapGallery = new esri.dijit.BasemapGallery({ // 新的图层被添加,旧的图层将会被移除
showArcGISBasemaps: true, // 可选,默认为true 查询ArcGIS.com来检索有效底图,为false时,只有用户自定义的地图指定地图属性才被显示
map: map // 显示地图
});
dojo.connect(basemapGallery, "onLoad", function(){ // 初始化加载
// basemapGallery.basemaps用户定义的数组底图显示在BasemapGallery
dojo.forEach(basemapGallery.basemaps, function(basemap) {
// 当菜单选项没选中时,每个底图添加一个菜单项
dijit.byId("basemapMenu").addChild(
new dijit.MenuItem({
label: basemap.title, // basemap包含的参数有id,thumbnailUrl(地理底图的缩略图图像的URL),title
title: basemap.thumbnailUrl,
onClick: dojo.hitch(this, function() { // dojo.hitch给一个方法绑定其执行上下文
alert("basemao.id :"+basemap.id);
this.basemapGallery.select(basemap.id); // 选择一个新的地图底图。地图刷新,如果没有找到具有指定ID的底图,则返回null
})
})
);
});
});
}
dojo.ready(init); // 初始化加载
</script>
</head>
<body class="claro">
<div data-dojo-type="dijit.layout.BorderContainer" data-dojo-props="design:'headline', gutters:false" style="width: 100%; height: 100%;">
<div id="map" data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region:'center'">
<div style="position:absolute; right:50px; top:10px; z-Index:99;">
<button id="dropdownButton" label="Basemaps" data-dojo-type="dijit.form.DropDownButton">
<div data-dojo-type="dijit.Menu" id="basemapMenu">
<!--从底图动态创建的菜单项 -->
</div>
</button>
</div>
</div>
</div>
</body>
</html>
此处发现我们并没有创建图层服务,但是为什么会有图层显示呢?
因为showArcGISBasemaps: true, // 可选,默认为true 查询ArcGIS.com来检索有效底图,为false时,只有用户自定义的地图指定地图属性才被显示
如果指定自定义方式就将此属性设置为false,然后使用<Basemap[]>basemaps 参数即可
可选。用户定义的数组底图显示在BasemapGallery。
var basemaps= []; var waterBasemap = new esri.dijit.Basemap({ layers:[waterTemplateLayer], title:"Water Template", thumbnailUrl:"images/waterThumb.png" }); basemaps.push(waterBasemap);
显示结果如下: