前段時間在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可以輸入文件的文字打開文件。