蘆吉昆,李遠華,劉一儒,黃偉佳,馮予澤,田程
吉林大學 地球探測科學與技術學院,長春 130026
人工智能技術滲透到生產、生活的各個方面,例如人臉智能識別、自動汽車駕駛和智能機器人管理倉庫等多方面應用。智能化技術正在改變一些傳統(tǒng)的產業(yè)結構與生產方式[1--7],同時也推動了地圖制圖領域的進步發(fā)展。在地圖制作行業(yè),智能化發(fā)展引起了高度的關注,智能化、數字化制圖是大勢所趨。
目前,越來越多的專家學者正在從事智能制圖、自動制圖的研究[8--9]。僅就圖例而言,作為地圖中十分重要的組成部分,其自動繪制與優(yōu)化也一直是研究熱點之一。常規(guī)的圖例制作方法一般依靠手工操作,當面臨大量的制圖工作時,傳統(tǒng)制作方法就顯得捉襟見肘。圖例通常利用MapGIS和ArcGIS兩種主流GIS軟件制作,MapGIS主要是按照系統(tǒng)提供的各種點符號、線符號、面符號及編輯功能來繪制圖例[10]。ArcGIS雖然可實現自動生成圖例,但生成的圖例不利于動態(tài)管理和實時更新,同時由于分辨率有限常造成符號不夠美觀[11]。
針對圖例的自動繪制與優(yōu)化,國內外展開了許多研究,采用了多樣的技術,如利用模板或符號庫、裁剪圖形和利用程序生成固定圖例等[12];賀海揚等對基于MapGIS的圖件自動裁剪與圖例生成進行研究,利用MapGIS二次開發(fā)將事先裁剪好的圖例單元(點、線、面)依順序加載、合并,移至合適位置,生成圖例[13];王玉晶等在對圖例元分類及形式化描述的基礎上,構建了基于圖例元的統(tǒng)計專題地圖圖例符號自動生成模型,在計算機控制下進行圖例元參數的獲取、圖例元的生成及圖例符號的繪制[14];于泳通過建立瓦斯地質數據庫與繪制模板,研究開發(fā)了瓦斯地質圖例自動繪制系統(tǒng)[15];英國EDINA提出基于可視化重新思考地圖圖例,提供了在動態(tài)環(huán)境中創(chuàng)建地圖圖例的新指南[16]。
傳統(tǒng)的制圖概念大多基于圖形思想,從圖形的角度繪制圖例,圖例自動繪制技術研究相對薄弱,其自動化程度還稍顯不足。筆者結合中國地質調查局“高分辨率對地觀測系統(tǒng)重大專項”項目需求與吉林大學大學生創(chuàng)新創(chuàng)業(yè)訓練計劃項目,從離散化、數字化的角度出發(fā),將圖例的圖形參數、內涵和結構等信息離散化存儲并通過數據庫共享,構建一種基于數據庫結構的新型圖例模型,對圖例各信息進行管理和對接;構建出抽象的新型圖例模型,將關于圖例的數據信息歸納為圖形參數、圖例內涵、結構參數和優(yōu)化參數等方面,解決圖例的自動繪制與優(yōu)化問題。以C#語言與MapGIS10結合方式完成了原型程序的開發(fā),取得了良好的應用效果。
目前制作圖例的過程中,存在大量的人工操作,當對幾十甚至上百幅地圖圖例進行批量處理時,傳統(tǒng)的圖例制作方法已不能滿足需求,用戶需求使得制圖技術向智能化方向轉變[17]。從傳統(tǒng)概念來看,圖例包括圖形、專業(yè)代號、顏色、大小、注記、排列和位置等多個內容,為了與自動制圖技術更好地耦合,需要構建一種圖例模型將傳統(tǒng)圖例包含內容進行整合、集成。筆者提出數字化的圖例模型,在設計理念、表達觀念等方面對傳統(tǒng)方法進行了更新,從圖形參數、圖例內涵、結構參數和優(yōu)化參數4個方面對圖例信息內容進行管理與信息傳遞。這4個方面層次清晰,由小及大、由內及外,依次從各個方面高效、全面地概括了圖例繪制的主要內容,可以與之后圖例自動繪制與優(yōu)化技術進行恰當的耦合。
整個圖例模型以數據庫(fatabase)的方式來組織,圖形參數、圖例內涵、結構參數和優(yōu)化參數4大方面以表(table)的形式來表示,而其中的子參數以字段(field)的形式來表示。此結構具有很強的數據共享優(yōu)勢,通過數據庫表可以使各個數據集之間的數據實現共享,整個數據庫也可以與外部程序實現數據共享(圖1)。
圖1 圖例模型Fig.1 Legend model
圖例模型的第一個重要組成部分是“圖形參數”,用來反映圖例的圖形特征,圖例一般由點、線、面和注記4種數據類型構成,各自的圖形參數存儲于數據庫屬性表中,包括顏色參數、形狀參數和圖案參數等。在圖例繪制時將查詢出的具體圖形參數賦給繪圖函數。
不同圖形代表不同地物,例如點狀圖形可以代表首都、省會城市和一般城市等,其圖形參數有符號類型、顏色、圖元長和圖元寬等參數;線狀圖形典型的有國界、鐵路和省界等,其參數有線型、線顏色、X方向系數、Y方向系數和輔助線顏色等;面狀圖例主要參數有面顏色、圖案類型和圖案大小等(圖2)。
圖2 圖形及其表達方式Fig.2 Graphics and their expressions
圖例模型的第二個組成模塊重點描述圖例內涵。圖例內涵包括圖例的文字說明、專業(yè)代號等。在眾多類型的地圖中,每類地圖都有不同的圖例內涵。例如在東北某地區(qū)地質圖圖例中,“Qhpal”代表第四系全新統(tǒng)沖洪積層,“K1d”代表下白堊統(tǒng)大砬子組,“γJ1”代表早侏羅紀花崗巖。在其他各類地圖,如土地利用圖、地質災害圖等地圖中,也存在著各自的圖例內涵。
圖例內涵是圖例表達的專業(yè)信息,由不同類型的專題圖專業(yè)含義定義,是通過專業(yè)代號、文字說明即具體通過圖形參數中的點線面及注記來表達的概念;不同類型的專題圖的圖例表達專業(yè)信息的方式各不相同,且都對應一套各自的專業(yè)含義,圖例內涵的作用就是用來表達對應專題圖圖例包含的專業(yè)信息。圖例內涵是常規(guī)圖例最重要的信息內容。圖例內涵具有專業(yè)性,又具有獨立性,筆者將其獨立存在于圖例模型中,利用數據庫存儲調用,不同類型專題圖在數據庫中具有各自的專業(yè)含義數據模塊,自動繪制時通過圖形參數表達,增強了用戶與圖例的交互能力,使制圖時可以實時更新圖例。
圖例具有典型的多級結構特征,由圖例體和圖例集組成,圖例體是指一個單獨的圖例及其說明文字,圖例集是指所有圖例體及其輔助符號構成的集合(圖3)。結構參數包括圖形尺寸(長寬)、圖例說明大小、圖例說明與圖形的距離、圖例體間隔等。這些參數由制圖風格和全幅地圖布局需求來確定。
圖3 圖例結構與參數體系Fig.3 Legend structure and parameter system
將圖例集視為一個獨立的整體,為其設置獨立系坐標。在這個系坐標下,圖例集范圍矩形的四個頂點坐標為P0、P1、P2、P3,可通過其確定圖例集初始范圍;可以由確定的圖例體大小計算出來(通過P0’、P1’、P2’、P3’與圖例數量),最后通過圖例集坐標在地圖范圍內(由MP0、MP1、MP2、MP3表示)的整體移動實現整個圖例的定位。上述關系圖例坐標的參數一般通過函數計算而來,但需要管理起來作為結構參數動態(tài)調用。
圖例與其他要素良好的匹配及自身結構合理調整可增強地圖表達效果,這就是圖例優(yōu)化的主要要求,因此制作圖例的時候需要存儲這些參數。圖例優(yōu)化內容包括:圖例在整個地圖中的位置布局、圖例內部的結構及圖例體的形態(tài);優(yōu)化參數主要包括圖例位置參數、圖例內部結構參數及圖例體形態(tài)參數,這些參數以數據庫表的形式存在于數據庫中。
圖例既是一個獨立的個體,又離不開地圖。繪制優(yōu)良的圖例是為了更好地服務地圖,因此圖例與地圖的通訊也十分關鍵,與地圖的通訊主要是圖例在地圖中位置的選擇。圖例位置的選擇利用坐標來進行,利用為圖例集設置的自體系坐標作為接口,將其轉換到地圖的坐標系中。地圖的整體框架包括圖框、接圖表、圖名和比例尺等,以地圖圖框作為基準,為圖例選擇合適位置,如一般圖例可以位于圖框外側右方、下方,還可以位于圖框內部合適的空白處。位置的選擇同時應兼顧其他要素,避免與其他要素位置沖突。本研究通過優(yōu)化算法,可以對圖例進行自動位置選擇,進而完成結構的優(yōu)化配置。
圖例內部優(yōu)化參數主要是針對圖例的排列方式。循環(huán)繪制圖例體時,圖例體數目較多,單列或單行不能滿足制圖需要,就應進行多行或多列的合理排列,本研究中設計排列算法,對圖例體的排列進行合理判斷與規(guī)劃,使結果更加美觀合理。
圖例體形態(tài)的優(yōu)化在1.3結構參數基礎上,根據專業(yè)與美觀經驗,對其圖形尺寸、說明距離等形態(tài)進行優(yōu)化微調。
構建出數字化的圖例模型后,下一步就要實現圖例自動繪制與優(yōu)化。其主要技術是:首先從圖例模型中讀取內容和參數,利用OleDB、ODBC等技術連接數據庫,通過SQL方式進行操作交互;然后利用C#+MapGIS10二次開發(fā)繪制點、線、面及注記,以完成單個圖例體的繪制;再結合排列算法循環(huán)自動繪制所有圖例體;最后利用自體系坐標的修正與自優(yōu)化函數及圖例接口完成優(yōu)化(圖4)。
圖4 圖例自動繪制技術Fig.4 Legend automatic drawing technology
圖例信息交互包括圖形參數、圖例內涵、結構參數和優(yōu)化參數等的信息交互。完成圖例自動繪制所需的基礎信息均存儲在數據庫中,開始繪制時利用OLEDB+C#+SQL,程序自動在數據庫中提取數據信息,并傳遞給繪制函數,這樣可快速、高效完成目標圖例的基本繪制,同時具有很好的動態(tài)性,當圖例信息進行修改時,利用數據庫技術可以實現快速、動態(tài)的批量修改。
與地圖進行通訊時是以整個圖例集的某一頂點坐標作為接口,將其坐標值存儲在數據庫中。首先利用接口坐標與地圖坐標信息進行通訊,在圖例接口確定其在地圖坐標系下的位置后,根據圖例集的自體系坐標,圖例整體在地圖中的位置便確定下來。
圖例自動繪制利用MapGIS10二次開發(fā)中的類函數來實現,其中點、線、面的繪制由SFeatureCls類來實現。首先創(chuàng)建新對象后,使用Create方法創(chuàng)建MapGIS格式.wt、.wl、.wp的點、線、面文件,然后用Open方法打開文件。利用相應的點、折線和多邊形等要素對象來設置要繪制的點、線、面的坐標及屬性參數。最后使用Append方法完成點、線、面的繪制。
注記的繪制由AnnotationCls類來實現。首先,創(chuàng)建兩個新對象,一個利用Create方法創(chuàng)建MapGIS格式的注釋文件.wt點文件,另一個對象利用Open方法打開文件。利用注記對象對字體、顏色和排列方向等屬性進行設置,再利用點對象對注釋位置進行設置。最后利用Append方法完成注釋的繪制。完成單個圖例體繪制后,利用for循環(huán),對所有圖例體進行循環(huán)繪制。
其核心代碼為:
簡單要素繪制以線要素為例:
SFeatureCls line = new SFeatureCls();
line.Clear();
LinInfo inf = new LinInfo();//設置線參數
inf.LineType = 0;
……
GeoVarLine ploylin1 = new GeoVarLine();
Dot m_dot1 = new Dot();
m_dot1.X = Px[0]+0.5;
m_dot1.Y = Py[0] - (Py[0] - Py[2]) / 2; //坐標位置
ploylin1.Append(m_dot1);
……
line.Append(ploylin1, null, inf);//繪制
注記繪制:
AnnotationCls m_vectorCls = new AnnotationCls();
AnnotationCls vectorCls1 = new AnnotationCls();
vectorCls1.Clear();
TextAnno TextAnno = null;
TextAnnInfo TextFormat = null;
TextFormat.Chnt = 1;
……//文本屬性設置
Dot Dot = new Dot();
Dot.X = X1;Dot.Y = Y2;//注釋坐標位置
TextAnno.Text = TLNamePart01;//文本內容
//添加注記,返回添加成功的對象ID
TextAnno.SetAnnInfo(TextFormat);
m_vectorCls.Append(TextAnno, null, null);//繪制注釋
圖例自動繪制技術的實現,通過在程序中可預留接口,為后續(xù)工作銜接提供支持。本技術具有一定的先進性、實用性和廣泛性,且較為成熟,具有穩(wěn)定性。
圖例的優(yōu)化主要表現在圖例是否按一定順序排列、能否對排列結構進行調整優(yōu)化以及能否對圖例與地圖位置關系進行調整。
圖例排序方式通過按數據庫中字段排序實現。其結構調整優(yōu)化,首先由圖例模型與數據庫參數確定每一個圖例體的大小,通過排列算法對將要繪制的圖例體的數量進行計算;然后與地圖進行通訊,判斷其排列樣式,計算圖例在地圖中的范圍,確定圖例集位置,進行配置,配置合格即可制圖,否則調整行列數;調整行列數時,整體范圍寬度除以單個圖例體寬度,即可得到圖例體的行數,再根據圖例體總數除以行數,確定其列數,從而可調整其合適的排列樣式,判斷合格之后便可以進行循環(huán)繪制圖例體。
圖5 結構調整Fig.5 Structural adjustment
對圖例與地圖位置關系進行優(yōu)化。每個零散圖例體整合在一起構成圖例集。首先通過一個函數F(A)來確定圖例集的初始范圍F0,F0是一個自體系坐標,包括圖例集4點坐標:P0、P1、P2、P3,這是一個獨立的坐標系;然后根據用戶需求或規(guī)則需要進行內部自優(yōu)化,修正自體系坐標得到F1。完成了圖例的自優(yōu)化后,開始進行與地圖的通訊,根據地圖的整體結構參數與圖例集接口,來確定圖例集在地圖中的合適位置,即將自體系坐標轉換為地圖的坐標。當面對主區(qū)形狀規(guī)則的底圖,可以根據其底圖直接確定地圖坐標;當遇到主區(qū)不規(guī)則的底圖,根據其不規(guī)則形狀先確定整圖的規(guī)則版型,然后根據版型來確定地圖坐標;最后設定一些美觀指標與規(guī)范指標,利用優(yōu)化算法對整體美觀進行優(yōu)化,實現合理的結構配置。
通過實踐來檢驗圖例繪制程序,可以很好地判斷其方法是否正確、性能是否合格。因此根據“高分辨率對地觀測系統(tǒng)重大專項”項目的制圖需求,選擇琿春地區(qū)作為試驗區(qū),以土地利用圖作為試驗對象,開展圖例自動繪制方法與程序的驗證工作。因為土地利用專題圖中涉及要素眾多,需要繪制的圖例數量較大,對圖例布局與優(yōu)化要求也比較高,是理想的測試對象。
首先將成果數據導入系統(tǒng),輸入制圖要求,程序就會根據要求,可以得出如圖6的四種圖例排版:A將圖例放在地圖右側,一列排布,是傳統(tǒng)圖例排版樣式,可以適用于普通專題圖;B為當圖例數量過多或圖例下方需要放置其他要素時,將圖例排列成兩列,縮短其豎直長度,以適應不同地圖用途;C為將圖例橫向排列于地圖下方,改變了圖例的位置,以滿足其他要素位置需求,可用于插圖等;D為將圖例根據其類型進行分組,相同類型放置在一組,增強了圖例的專業(yè)性和可讀性,可適用于更加專業(yè)的圖件。
圖6 圖例自動繪制效果圖Fig.6 Effect diagrams by legend automatically drawing
如上應用結果表明,基于數據庫的數字化圖例模型和程序,可以打破單一類型地圖的束縛,從而能使其應用于各類專題圖的圖例自動繪制;程序還可以根據制圖要求,靈活地自動繪制多種類型的圖例,同時可以對圖例的布局結構進行參數的調整,得出多樣的結果,進而滿足用戶的不同需求。
在制圖過程中,遇到如下情況,程序可以進行對應優(yōu)化處理:根據需求自動繪制時,當圖例原始排列方式的長度、寬度超過圖幅范圍或不滿足美觀條件,程序可根據排列算法與美觀指標自動判斷,將圖例排列成合適的行列數及樣式,使其滿足制圖要求。如圖6中A類型變化為B類型,可看做單列圖例超長時的優(yōu)化;A類型變化為D類型,可看做為更加美觀時的優(yōu)化。優(yōu)化處理提供了更多樣的圖例樣式,使用戶可以用于更廣的選擇。
程序在項目實踐中的良好應用,證明了本研究在思路整理、模型構建、技術研發(fā)等方面的合理性、科學性與專業(yè)性。
(1)從圖形參數、圖例內涵、結構參數和優(yōu)化參數等方面構建的新型數據庫式圖例模型,從新的思想看待地圖圖例,可以實現信息的離散與集成,使圖例信息、形態(tài)和圖形等都高度獨立,還可通過獨立接口方便程序調用,是一種可以有力支持圖例自動繪制與優(yōu)化的智能化圖例模型。
(2)圖例繪制程序與圖例結構智能判斷、循環(huán)算法和自優(yōu)化技術相結合,在完成圖例自動繪制的基礎上,實現圖例內部結構與整體布局的優(yōu)化,做到圖例的實時繪制、布局優(yōu)化與出現差錯后的更新復繪。
(3)該方法提高了圖例編制與自動化水平,參數獨立存儲可與其他地圖要素實時交互,提高了制圖的工作效率,減少了人工的參與,使得制圖者得到解放,從而可以專注于圖例的實用性與美觀性;設定了圖例的自動位置選擇和結構優(yōu)化算法,將優(yōu)化程序嵌入到繪制程序成為一體,實現圖例繪制的實時交互,為各類地圖智能化制作研究進行了有益的技術探索。