FlexViewer地圖範圍的自動縮放

 

      前段時間在FlexViewer框架上做點東西,有一個功能是根據多邊形範圍,讓地圖自動縮放。當時我的做法是根據polygon的x、y的最大最小值生成一個extent,然後map. extent=extent.expand(2);後來發現其實有一個更簡單的辦法。在FlexViewer中有一個UtilsClass的as文件,文件中有一個UtilsClass類,類中有zoomToGraphics這個靜態方法,zoomToGraphics(map:Map,graphicsLayer_num:GraphicsLayer);兩個參數的map,如果你的組件是基於basewidget的那麼第一個參數直接寫map就行,graphicsLayer_num就是存在你需要根據的點、線、面自動縮放圖層;graphicsLayer_num圖層的graphic對象可以是點線面,這樣就可以根據你輸入的圖層上的graphics實現地圖的縮放。

      由於後來需要根據多個graphicsLayer確定範圍,我又在UtilsClass類添加了對zoomToGraphics方法進行修改,增加了一個新的方法layersZoomToGraphics。

        public static function layersZoomToGraphics(map:Map,graphicsLayer_arr:ArrayCollection):void{
   var graphicsProvider:ArrayCollection=new ArrayCollection;
   for(var i:int=0;i<graphicsLayer_arr.length;i++){
   
    var graphicsLayer:GraphicsLayer=graphicsLayer_arr[i] as GraphicsLayer;
    graphicsProvider.addAll(graphicsLayer.graphicProvider as ArrayCollection);
   }
    var graphicsExtent:Extent = GraphicUtil.getGraphicsExtent(graphicsProvider.toArray());
    if(graphicsExtent){
     map.extent = graphicsExtent;
     if (!map.extent.contains(graphicsExtent)){
      map.level--;
     }
    }
  }

該方法的第二個參數graphicsLayer_arr是一個存放着graphicsLayer的ArrayCollection。再調用該方法時,需要先把需要的graphicsLayer放到一個數組中。

flexbuilder中快捷鍵Ctrl+Shift+D+R可以輸入文件的文字打開文件。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章