zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Ros学习——Cmakelists.txt文件解读
    Ros学习——Movebase源码解读
    C++——STL之vector, list, deque容器对比与常用函数
    Ros学习——移动机器人Ros导航详解及源码解析
    C++——多线程
    C++——STL容器
    PHP对图片按照一定比例缩放并生成图片文件
    PHP二维数组排序
    PHP裁剪图片并上传完整demo
    [PHP] php实现文件下载
  • 原文地址:https://www.cnblogs.com/dwf07223/p/3048089.html
Copyright © 2011-2022 走看看