3、Server API for JavaScript使用地图工具条

Server API for JavaScript使用地图工具条

1、 首先完成简单地图发布,具体方法见(2、Server API for JavaScript简单地图发布);

2、 准备按钮,在网页中添加按钮,分别用来处理地图基本操作。

将按钮加入层中,设置层的Z_index值为较大的数,可以是toolbar浮动在地图上面

效果为:

clip_image002

3、 本例的代码放置于专门的文件中名字为:mapApp.js。

在js文件中增加地图控制库的引用,使用

dojo.require("esri.toolbars.navigation");引用Navigation库,其中封装了对地图浏览的常见应用。

实例化Navigation对象:

toolbarNav=new esri.toolbars.Navigation(map);//实例化Navigation并绑定操作的map控件

其中的map为地图实例,这样就将Navigation绑定到了特定的地图上

4、 为按钮加入代码,在js文件中定义函数Navigation(tool),其中tool用来判断传入的是什么操作。具体代码为:

//地图浏览控制函数,按钮相应事件

function Navigation(tool)

{

switch(tool)

{

case "zoomin"://放大

{

navToolbar.activate(esri.toolbars.Navigation.ZOOM_IN);

break;

}

case "zoomout"://缩小

{

navToolbar.activate(esri.toolbars.Navigation.ZOOM_OUT);

break;

}

case "pan"://平移

{

navToolbar.activate(esri.toolbars.Navigation.PAN);

break;

}

case "preview"://上一视图

{

navToolbar.zoomToPrevExtent();

break;

}

case "nextview"://下一视图

{

navToolbar.zoomToNextExtent();

break;

}

case "fullextent"://全图显示

{

navToolbar.zoomToFullExtent();

break;

}

}

}

5、 在按钮中加入onclick事件,调用Navigation函数,完成地图浏览基本操作,代码为:

<input id="zoomin" type="button" value="放大" onclick="Navigation(this.id)"/>

<input id="zoomout" type="button" value="缩小" onclick="Navigation(this.id)"/>

<input id="pan" type="button" value="平移" onclick="Navigation(this.id)"/>

<input id="preview" type="button" value="上一视图" onclick="Navigation(this.id)"/>

<input id="nextview" type="button" value="下一视图" onclick="Navigation(this.id)"/>

<input id="fullextent" type="button" value="全图" onclick="Navigation(this.id)"/>

至此完成地图的简单操作功能!下面做完善。

6、 完善“上一视图”“下一视图”按钮可用状态。

判断是否存在上下视图的函数为Navigation的isFirstExtent()和isLastExtent(),关键这个判断在什么时候执行,也就是写在什么事件里面。我们可以想到,每次地图范围更新时都要判断这个状态。ESRI提供了一个事件监听:"onExtentHistoryChange",用来判断范围是否有变化,可以使用他来实现判断,本例使用ExtentHistoryChangeHandler()函数来执行监听后的事件。实现方法如下:

在程序中将“onExtentHistoryChange”事件监听绑定到Navigation控件和监听事件:

dojo.connect(navToolbar, "onExtentHistoryChange", extentHistoryChangeHandler);

监听事件按定义为:

//地图范围变化的事件

function extentHistoryChangeHandler()

{

document.getElementById("preview").disabled=navToolbar.isFirstExtent();//前一视图按钮不可用

document.getElementById("nextview").disabled=navToolbar.isLastExtent();//后一视图按钮不可用

}

但是此方法有个问题:

第一次放大或缩小后他不会做判断,第二次地图范围变化才会判断

至此完成所有操作!

程序代码:mapApp.js:

//地图浏览代码

dojo.require("esri.map");//注册引用map控件

dojo.require("esri.toolbars.navigation")//注册引用Navigation对象

var map, navToolbar;

function init()

{

map = new esri.Map("map");//实例化map控件

var dynamicMapServiceLayer = new esri.layers.ArcGISDynamicMapServiceLayer("http://localhost/ArcGIS/rest/services/China/MapServer");

map.addLayer(dynamicMapServiceLayer);//加载图层

navToolbar=new esri.toolbars.Navigation(map);//实例化Navigation并绑定操作的map控件

dojo.connect(navToolbar, "onExtentHistoryChange", extentHistoryChangeHandler);//为Navigation绑定事件监听

}

dojo.addOnLoad(init);//加载是调用init初始化地图

//地图范围变化的事件

function extentHistoryChangeHandler()

{

document.getElementById("preview").disabled=navToolbar.isFirstExtent();//前一视图按钮不可用

document.getElementById("nextview").disabled=navToolbar.isLastExtent();//后一视图按钮不可用

}

//地图浏览控制函数,按钮相应事件

function Navigation(tool)

{

switch(tool)

{

case "zoomin"://放大

{

navToolbar.activate(esri.toolbars.Navigation.ZOOM_IN);

break;

}

case "zoomout"://缩小

{

navToolbar.activate(esri.toolbars.Navigation.ZOOM_OUT);

break;

}

case "pan"://平移

{

navToolbar.activate(esri.toolbars.Navigation.PAN);

break;

}

case "preview"://上一视图

{

navToolbar.zoomToPrevExtent();

break;

}

case "nextview"://下一视图

{

navToolbar.zoomToNextExtent();

break;

}

case "fullextent"://全图显示

{

navToolbar.zoomToFullExtent();

break;

}

}

}

效果截图:

clip_image004

posted on 2010-01-28 11:37  findleaf  阅读(488)  评论(0编辑  收藏  举报

导航