地圖分幅組件的實現(七)——非標準製圖過程的自動化

來源:互聯網
上載者:User

        前面的幾節主要關注製圖標準化,這一節關注的是非標準化製圖。所謂非標準製圖,簡單說來就是沒有國家標準或行業標準的地圖需要生產,此類地圖多偏向專題類型的地圖版式。注重地理分析功能的地圖,一般並不關注地圖的排版,因為地圖方式的結果呈現並非由地圖專業人員來完成,而是其他開發人員完成,故對於此類地圖的產生,並沒有規範而言,例如很多地圖連比例尺等都沒有。

        非標準製圖在應用上比標準製圖涉及的領域更為廣闊,使用的人也更多。很多領域例如氣象和生態,需要長期監控與出圖,而圖的規範並沒有要求,簡單說來需求就是,可以疊加專業資料,需要出的圖好看,最重要的,圖的生產最好能自動化。需求簡單,但是不好下手。因為是非標準製圖,沒有標準可以依據,大部分的人反而無所適從,不清楚如何配圖或者如何布局能夠滿足要求。通常的手法是建模版,通過自動套用模版來實現製圖的排版和自動化。其實這種想法也非常樸實,簡單的理由是大部分情況下,如果出的使用者可以滿意,依據此配模版,不管資料如何變化,我的圖在排版既定的情況下,自動生產就可行了,前端加上一個資料處理的自動化,套上出圖模版自動化處理的原形就出來了。

        但是作為組件的設計者,需要更高程度的對需求進行抽象。抓住需求的本質是我們需要做到的。經驗告訴我們,沒有規則可循的事難以入手,所以我們需要找到規律。在非標準製圖過程中,最為重要的一步就是制定排版的規則。排版的第一步是確定參與排版的對象。這些排版的對象簡單說來就是製圖的幾大要素,指北針,比例尺,以及圖例等等。分析這些對象,有兩個可變化的地方,一是布局位置,而是樣式,因此在設計之前,我們需要弄清楚這些變化之間的關係。

        對象的樣式是一個人為決定的因素,選擇何種類型的樣式風格是根據使用者喜好自己確定的,例如指北針,中國人的喜好和美國人又有很大區別,所以在GIS軟體中會有很多種風格讓使用者選擇,這種風格的選擇是易控制的和,可操作的。

        對象的布局位置在非標準製圖過程中是最關鍵的,起決定作用的。首先列出以下基本製圖對象,主圖區,指北針,比例尺,圖例,圖名。有了這五個基本的製圖對象後,我們開始按重要程度分類,最重要的部分是主圖區(某些圖中需要設定副圖區),其次是指北針,比例尺,圖名,圖例。我們在布局好主圖區後就依次可以設定其他次要製圖對象。這些次要對象的布局都是散落布局在主圖區周圍,一般圖名是在主圖區正上方,比例尺在主圖區正下方,圖例可左可右的擺放。有了這些層次關係,就可以進一步提出相對定位的概念。事實上參考標準製圖會發現,次要對象的部局都是依據主圖區來定義距離和位置的,在非標準製圖過程中,為了描述位置我們也可以引入這一概念。

        上面說了這麼多,就是想說明一點如何使非標準製圖過程可操作,進而自動化,以ArcGIS為例。如果每個對象都可以描述清楚了,那麼這件事情就可行了。開始設計我們的排版組件吧。設計的第一個問題,製圖對象哪裡來?當然是自己建立。很多人在這裡是有分歧的,即使是很有經驗的GIS軟體工程師也是如此。在本質上所有的製圖對象都是Element,建立Element總是很容易的,何不自己設計和建立呢,建立的過程中,我們可以決定對象的樣式和布局。對象的建立我們自然就能引入抽象工廠的模式。設計的第二個問題,主圖區如何布局?在前面的幾節中,我介紹了標準化製圖的過程中,主圖區如何設計,這裡也是一樣,我們需要控制主圖區。在談主圖區控制前,有個會忽略的問題,自動化過程如何設計?在汶川地震時USGS在地震後立刻就有地震資訊描述的參考地圖出來了,當然這如果不是自動化過程很難達到,在美國,在一些大的研究機構中ESRI往往是一個長期參與的角色,ESRI負責長期的地圖生產和維護,為了便於維護往往會定製化一些過程,這些過程在我們看來就是製圖的自動化(衍生出了PLTS產品等等)。因為是非標準化的,我自己根據需要,我盡量提出地圖生產過程中的人為因素,排版自動化,輸出自動化,列印也自動化。輸出是有很多現成可用介面,列印就不行了,如果地圖紙面大小不確定還需要自己去調整那就很不容易了,有什麼辦法去掉這些人為因素呢?最有效也最簡單的思路,依據紙張類型來控制主圖區,進而影響排版。紙張類型目前有A5到A0系列。也就是說我只需要確定這六類紙型下的排版方式就能實現我的要求。  

        還是以地震為例,通常地震資料是可以在地震台網上自動擷取的,如果有大的地震發生,我們是可以立刻判斷出來的。假設我們在某一地區發生地震,強度很大,達到了我們出圖觀測的要求,我們需要自動產生地震專題圖,製圖過程前期,準備程式在地震發生處(經緯度,震級都有),通過地震強度演算法產生地震場資料(專題資料),依據設定的渲染演算法,分級渲染地震場,製圖程式依據地震場的範圍確定主圖區顯示範圍,如果紙張類型選定,演算法選擇紙張是豎版還是橫版,其他製圖對象都依據主圖區的相對位置來布局排版,而後調用列印程式自動出圖,或輸出。

 

非標準製圖的組件設計:

   

 

一些可以參考的代碼:

   //---------------------設定A4參數-----------------------------   hr=ipNoStdCartoEnvironment->put_PageStyle(esriPageFormA4);            hr=ipNoStdCartoEnvironment->put_PageTitle(CComBSTR("地震影響場專題圖A4"));   //相對定位   hr=ipNoStdCartoLayoutManager->SetPageTitlePosition(esriTopMidPoint,0,1.0);            hr=ipNoStdCartoLayoutManager->SetPageLegendPosition(esriTopRightCorner,1.0,-1.0);   hr=ipNoStdCartoLayoutManager->SetPageNorthArrowPosition(esriBottomRightCorner,-1.5,-1.5);   hr=ipNoStdCartoLayoutManager->SetPageScalePosition(esriBottomMidPoint,6,-1.5);   //紙面上主圖區的範圍  13.6cm x 22cm    IEnvelopePtr ipPortraitEnv(CLSID_Envelope);            IEnvelopePtr ipLandscapeEnv(CLSID_Envelope);   hr=ipPortraitEnv->PutCoords(1.2,4.8,14.8,26.8);   hr=ipLandscapeEnv->PutCoords(1.5,3.3,23.5,16.9);   hr=ipNoStdCartoLayoutManager->SetMainFrameSizeAndPosition(ipPortraitEnv,ipLandscapeEnv);   INoStdCartoFactoryPtr ipNoStdCartoFactory(CLSID_NoStdCartoA4Factory);   hr=ipNoStdCartoLayoutManager->UpdateLayout(ipNoStdCartoFactory);           

       

 

 輸出的結果,震級虛構(資料來源是NGCC公開發布的國家400萬WGS84資料): 

 

 

 

 

 

如果地震影響場的傾斜角度大於45度,系統自動調整為豎式排版:

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.