胡浩杰 王天林 時間
摘 要 文章主要討論了以直接利用《PDF規(guī)范》制作復雜PDF地圖符號過程中遇到的問題及解決方法。通過制作圓形符號將全圖的圓形(包括點)全部通過圓形符號來調(diào)用,大大減少了PDF地圖的數(shù)據(jù)量。通過組合符號的實現(xiàn),創(chuàng)造了一條在PDF地圖制圖過程中,利用簡單符號組合合成復雜符號的方法,簡化了復雜符號的制作。通過研究PDF地圖符號的精確控制,解決了因PDF圖形邊界顯示原理而帶來的描邊符號變大的問題。
關鍵詞 PDF地圖;地圖符號;制作研究
中圖分類號 TP3 文獻標識碼 A 文章編號 1674-6708(2018)211-0065-03
PDF地圖是一種符合PDF規(guī)范的電子地圖,它具有數(shù)據(jù)量小、使用方便等特點[ 1 ]。目前PDF地圖的制作主要依靠直接將柵格地圖利用PDF制作工具轉(zhuǎn)為PDF格式,或者是利用EPS數(shù)據(jù)制作矢量PDF地圖。2011年研究生學術論文《地理PDF地圖制圖關鍵技術研究》詳述了以直接寫入符合《PDF規(guī)范》的編碼的方法來制作矢量PDF地圖。2018年2月期刊《工程技術》論文《矢量PDF地圖符號制作研究》一文,討論了矢量PDF地圖符號庫的制作方法。本文主要討論了在制作較為復雜的矢量PDF地圖符號過程中遇到的問題及解決方法。
1 圓的處理
1.1 擬合圓的數(shù)據(jù)量問題
因為PDF中沒有描繪圓形路徑的路徑構建操作符,因此在PDF中描繪圓形需用貝塞爾曲線來描繪。在學術論文《地理PDF地圖制圖關鍵技術研究》第2.3.3節(jié)中詳述了PDF中矢量圓的構建方法。采用這種擬合方法構建的圓一共需要使用四段貝塞爾曲線。下面這段代碼是在PDF頁面內(nèi)容流中構建圓形和矩形的數(shù)據(jù)量比較示例:
1000m
155.23 0 200 44.77 200 100 c
200 155.23 155.23 200 100 200 c
44.77 200 0 155.23 0 100 c
0 44.77 44.77 0 100 0 c
上面這段PDF代碼構建了一個中心在(100,100)點,半徑為100的圓。這個圓占用了123個字節(jié)。
0 0 200 200 re
上面這段PDF代碼構建了一個左下角在(0,0)點,邊長為200的正方形。這個正方形占用了14個字節(jié)。
由此可見圓的數(shù)據(jù)量大大超過了其他圖元的數(shù)據(jù)量。而在PDF地圖制圖過程中,圓的使用是大量的。如果可以制作一個基本圖元符號,讓整張PDF地圖的所有圓形都調(diào)用這個符號,那將大大減少整幅PDF地圖的數(shù)據(jù)量。
1.2 圓形符號的構建
1.2.1 路徑描繪操作符的選擇
地圖中一般有3種圓形符號。一是只描邊的圓形符號;二是只填充的圓形符號;三是既描邊又填充的圓形符號。這三種圓形符號因為其使用的路徑描繪操作符的不同必須做成三種不同的符號。只描邊的圓形符號使用路徑描繪操作符S;只填充的圓形符號使用路徑描繪操作符f;既填充又描邊的圓形符號使用路徑描繪操作符B[ 2 ]。
1.2.2 有效數(shù)字的選擇
建議構成圓形符號的貝塞爾曲線的參數(shù)的有效數(shù)字可以多一些,一般在4~5位。原因有3點:一是PDF中的圓形是由四段貝塞爾曲線擬合而成的,存在一定的誤差。如果地圖中的圓形有測量意義,精度要求更高,其參數(shù)的有效數(shù)字還可以設置的更多以保證其精度。二是圓形符號在地圖中會放大縮小,在放大的過程中其誤差也會放大。三是作為一個符號其參數(shù)增加一兩位的有效數(shù)字對地圖的數(shù)據(jù)量影響很小。但是有效數(shù)字也不能太多,太多的有效數(shù)字會增加地圖打開時CPU的計算量,減慢地圖打開速度,因此只要達到精確度要求即可。
1.2.3 符號的圖形狀態(tài)
盡管資源對象序列中的符號可以加入顏色、線寬等圖形狀態(tài)。但這里的圓形符號是全圖調(diào)用的,原因是加入這些狀態(tài)后,全圖的圓形符號的顏色和線寬都不能變化或不能按照制圖員的意志來變化。因此建議圓形符號的內(nèi)容流里只寫入路徑和路徑描繪操作符,所有圖形狀態(tài)包含顏色和線寬都在調(diào)用圓形符號的內(nèi)容流中設置。另外如果整張PDF地圖的圓形符號的顏色都是一個顏色,可以在圓形符號中設置顏色,這樣調(diào)用符號時就不用設置顏色了且所有對圓形符號的顏色設置都會失效。
2 組合符號的實現(xiàn)
前文所述的圓形符號已經(jīng)可以在PDF中調(diào)用,但很多符號中有一個或多個圓形。為進一步減少數(shù)據(jù)量,符號中的圓形也可以直接調(diào)用圓形符號來構建,即用組合符號的方法來實現(xiàn)。
組合符號利用現(xiàn)有的一種或多種PDF資源對象,在組合符號的流數(shù)據(jù)中通過矩陣變換改變PDF資源對象的大小、位置等狀態(tài),組合成新的更復雜的PDF地圖符號。組成組合符號的PDF資源可以是已有的PDF地圖符號、柵格圖像、文字等PDF資源對象。本文以利用PDF地圖符號構建組合符號為例,描述組合符號的構建方法。
PDF地圖符號的組成元素和頁面對象的元素構成類似,都是利用數(shù)據(jù)流在相應的空間中描繪圖形。經(jīng)過實驗發(fā)現(xiàn)在符號資源對象中可以通過和頁面對象中相似的結構來利用現(xiàn)有的PDF符號資源,也就是在組合符號對象的Resources屬性中添加要利用的PDF符號資源的序號和別名,在組合符號的流數(shù)據(jù)中用Do操作符調(diào)用這個符號資源對象并用cm變形矩陣進行平移和變形[ 1 ]。
圖1是一個省級行政符號的PDF代碼示例。示例中利用了一個只描邊的圓(對象序號7)和一個只填充的圓(對象序號8),組合而成了一個省級行政符號?。
3 PDF地圖符號的精確控制
3.1 PDF圖形邊界顯示原理
通過實驗發(fā)現(xiàn),PDF中只描邊的圖形,當描邊寬度大于1時,是以邊界向內(nèi)外均勻擴展描繪而成;如果是填充圖形,則是從邊界向內(nèi)填充。例如代碼中描繪一個半徑20,邊寬為6的只描邊的圓,實際上顯示了一個外徑為23,內(nèi)徑為17的圓;如果代碼中描繪一個半徑20的只填充的圓,則顯示一個半徑為20的填充圓;如果代碼中描繪一個半徑20,邊寬為6的既填充又描邊的圓,則顯示一個半徑23,邊寬為6的既填充又描邊的圓。
3.2 符號空間的精確控制
符號空間是描繪PDF地圖符號所在的空間,相當于描繪符號的一張“畫布”。這個空間設置的太大會增加顯示PDF地圖的內(nèi)存占用量??臻g太小則會使PDF地圖符號顯示不完全。因此一般建議使用 PDF地圖符號的外切矩形來設置符號空間。
確定外切矩形的算法已經(jīng)很成熟,本文不再復述。下面主要討論PDF圖形邊界顯示原理對確定符號空間的影響。下面有個例子,在線寬大于1的情況下,如果按圖形的外切矩形設置符號空間的大小就會出現(xiàn)圖2情況。
圖2中,按照圓的外切矩形設置了符號空間,其結果是圖形被裁剪,符號顯示不完整,其符號空間設置得不夠。根據(jù)PDF圖形邊界顯示原理,描邊圖形的邊界向外擴展了半個線寬,因此需要將符號空間向外擴展半個線寬的長度。例如一個半徑為20,圓心在(0,0)點,描邊寬度為6的圓,其符號空間應設置為[-23 -23 46 46]。
3.3 符號大小的精確控制
PDF圖形邊界的這種顯示方式,會使符號變大。這種符號變大可能會帶來以下幾個方面的問題。一是導致符號之間的關系發(fā)生變化。例如設計的是一個符號和另一個符號相切,實際會出現(xiàn)因為符號變大而變成兩個符號相交的現(xiàn)象。二是定位點的位置發(fā)生變化。例如,原本在符號邊界上的定位點會向符號內(nèi)移動半個線寬導致一定程度上的符號定位不準,影響定位精度。
因此,如果符號的線寬較大或精度要求高就必須要在制作符號時有意減小符號以達到精度要求。例如一個半徑20,圓心在(0,0)點的圓,為使其符號達到精確大小,實際應在代碼中描繪一個半徑 17,圓心在(0,0)點,描邊寬度為6的圓。
4 結論
本文主要討論了復雜PDF地圖符號制作過程中遇到的問題及解決方法。通過制作圓形符號將全圖的圓形(包括點)全部通過圓形符號來調(diào)用,簡化了圓形符號的使用,減少了地圖加載過程中的計算量,提升了地圖加載速度,大大減少了PDF地圖的數(shù)據(jù)量。通過組合符號的實現(xiàn),創(chuàng)造了一條在PDF地圖制圖過程中,利用簡單符號組合合成復雜符號的方法,簡化了復雜符號的制作。通過研究PDF地圖符號的精確控制,解決了因PDF圖形邊界顯示原理而帶來的描邊符號變大的問題,保證了地圖顯示的精確性。
參考文獻
[1]胡浩杰.地理PDF地圖制圖關鍵技術研究[J].解放軍信息工程大學,2011(6):19-25.
[2]ADOBE SYSTEMS INCOPORATED.PDF Referevce[M].Sixth edition.Adobe Systems Incorporated,2006:604-647.