一個Mxd文件包含一個PageLayout對象和一個多多個Map對象,每個Map會被包成MapFrame,添加到PageLayout中。我們用ArcMap打開一個mxd文件,在佈局模式下看PageLayout都包含了什麼。
PageLayout包含的內容以及內容之間的關係較爲複雜,整體上可以分爲兩個部分,Page和Elment。Elment又包含3類,MapFrame、MapSurroundFrame和普通的Element。每個MapFrame都會加載一個Map,並可以設置網格(MapGrid),每個MapSurroundFrame都對應一個MapFrame。看起來比較複雜,我們對應一下實際的東西就容易理解了。
MapFrame,翻譯過來就是地圖容器,Map會放到MapFrame後添加到PageLayout中。地圖文檔有幾個Map,PageLayout中就會有幾個MapFrame。MapSurroundFrame是MapSurround的容器,繼承IMapSurround的對象有指北針、比例尺以及圖例等。這些對象都和Map密切相關。所以每個MapSurroundFrame都會關聯一個MapFrame,不然MapSurroundFrame中的MapSurround對象就不知道該如何渲染了。
如果從ArcMap上看感覺亂糟糟的,那麼從SDK的角度看會清晰很多。
PageLayout包含兩個最重要的內容,一是繼承實現了IPageLayout接口,定義了Page屬性,Page較爲簡單。第二是繼承實現了IGraphicsContainer接口,這樣就可以在PageLayout上面加載和顯示Element。
在繼承IElement接口的類中,有兩個特殊的類,MapFarme和MapSurroundFrame。MapFarme是Map的載體,Map通過MapFarme加載顯示到了PageLayout上。MapSurroundFrame爲和地圖相關的圖飾對象的載體,例如指北針、比例尺、圖例等,這些對象都繼承了IMapSurround接口,通過MapSurroundFrame加載顯示到PageLayout上。每個MapSurroundFrame都對應一個MapFarme,從而確定加載的指北針、比例尺是針對哪個地圖的。
MapFarme有一個比較重要的屬性MapGrids,可以管理多種針對MapFrame的各種格網,例如經緯網、公里網等。
Page對象可通過IPageLayout的Page屬性獲得,爲IPage接口類型。Page翻譯過來就是紙張的意思,其意義也是如此,標識我們要出的圖要繪製在多大的紙張上。我們打開ArcMap,在沒加載任何地圖的情況下,系統會創建一個空地圖。切換到佈局視圖下,最外面的黑色邊框即爲Page的範圍。如下圖所示。
處於選中狀態的綠色虛線是MapFrame,當前加載的地圖沒有任何圖層。其外面的黑色實線是Page的邊界,我們出圖的時候,只能出位於Page範圍內的元素。Page默認單位是釐米,也可以設置爲毫米或者英寸。Page默認是A4紙大小,其大小是可以設置的。Page左下角爲0,0點,向右爲X軸正方向,向上爲Y軸正方向。
Page可設置的屬性信息不多,我們可以參考下ArcObject SDK幫助中IPage的定義來看Page可以設置哪些信息。