zoukankan      html  css  js  c++  java
  • ArcGIS API for JavaScript 4.2学习笔记[8] 2D与3D视图同步

    同一份数据不同视图查看可能用的比较少,因为3D视图放大很多后就和2D地图差不多了,畸变很小,用于超大范围的地图显示时有用,很多时候都是在平面地图上进行分析、查询、操作。教学需要可能会对这个有要求?

    本文没有深究两个比较复杂的函数,希望有朝一日能读懂吧,对于这种同一个Map对象不同视图的同步显示,建议直接copy后半截内容即可。


     

    鹰眼功能和这个类似,不过鹰眼功能(即上一篇文章)是利用watch()和watchUtils.when()来实现的同步,这个例子又有什么不同呢?探究之。

    直接看结果图:

    看起来就是两个无边框的DIV,宽度各占50%。

    实际上操作的结果就是,在任意一个视图拖动、缩放、旋转视图,另一个也跟着变,几乎就是放大版的鹰眼,也可以说是鹰眼的另一种写法。


    给出require的引用:

    require(
        [
          "esri/Map",
          "esri/views/MapView",
          "esri/views/SceneView",
          "esri/core/watchUtils",
          "dojo/domReady!"
        ],
         function(Map,MapView, SceneView,watchUtils){
              //你的代码  
         }
    );

    嗯?又是watchUtils?看来和监听少不了干系了。

    //事实上,本例还是用watch监听和watchUtils监听完成的同步,但是代码难于理解,就没有仔细深究。

    看骨干部分:

    function(Map,MapView,SceneView,watchUtils){
        var map = new Map({});
        var view1 = new SceneView({});
        var view2 = new MapView({});
        
        var synchronizeView = function(view, others){};
        var synchronizeViews = function(views){};
        synchronizeViews([view1,view2]);
    }

    实例化一张地图,实例化两个视图,看来和上一个例子还是有区别的。

    对此,博主表示暂时保留原代码。

    因为synchronizeView长达60行,这个方法一定不普通。

    博主的建议是:

    如果需要对同一份底图的2D和3D视图进行同步观察显示,那么请直接把这两个syn方法copy过来,甚至包装成一个方法都可以,传入参数是两个view即可。

    有兴趣的同学可以查阅这个类:esri/core/Collection

    这两个难于理解的方法体内用到了这个类和其几个方法,如map()方法、slice()方法、concat()方法。

  • 相关阅读:
    解决AJAX中使用UpdatePanel后再用无法弹出对话框问题
    <转>JavaScript 参考教程资料之文档对象
    C#中图片的重绘
    csv数据源的创建(二)
    开始试用windows live writer
    与BW相关各模块常用tcode及Table
    SAP中的client(也叫集团)的意义
    SAP中的client(也叫集团)的意义(中文版)
    BW报表igs服务配置解决中文显示问题
    开源.net论坛有那些?
  • 原文地址:https://www.cnblogs.com/onsummer/p/6391509.html
Copyright © 2011-2022 走看看