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()方法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM