国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

矢量PDF 地圖中“圓”的處理方法研究

2022-12-04 02:31胡浩杰李中全張順喜
中文信息 2022年9期
關(guān)鍵詞:貝塞爾數(shù)據(jù)量頁面

胡浩杰 李中全 張順喜

(78125 部隊(duì),四川 成都 610066)

矢量PDF地圖是用矢量元素描述的PDF格式的電子地圖。和在網(wǎng)絡(luò)數(shù)據(jù)交換領(lǐng)域廣泛使用的柵格PDF地圖相比,矢量PDF地圖因其制圖相對困難的原因而鮮有使用。但矢量PDF地圖具有數(shù)據(jù)量較柵格PDF地圖小很多(10倍以上)的原因,矢量PDF地圖一直以來都有著較好的使用前景。

Adobe公司提供了轉(zhuǎn)換軟件(如Adobe Acrobat)可以將EPS地圖數(shù)據(jù)轉(zhuǎn)換成矢量PDF地圖。這樣生產(chǎn)的矢量PDF地圖用于出版是完美的,但用作電子地圖使用就存在地圖數(shù)據(jù)量大(和柵格PDF地圖差不多)和地圖打開速度慢的問題(慢到用戶無法忍受)。這也導(dǎo)致了目前矢量PDF地圖一般僅用于地圖出版,而在網(wǎng)絡(luò)交換領(lǐng)域很少使用。

因此,有必要利用公開的PDF編碼機(jī)制結(jié)合矢量地圖的特點(diǎn)制作適合于電子地圖使用的矢量PDF地圖。因?yàn)閿?shù)據(jù)量越小的電子地圖越能實(shí)現(xiàn)快速共享,因此在保持豐富的地圖符號(hào)的基礎(chǔ)上,極限追求最小的數(shù)據(jù)量就是研究矢量PDF地圖的目標(biāo)。本文主要研究解決矢量PDF地圖中描繪“圓”的問題。通過分析PDF編碼機(jī)制中“圓”的編碼方法,提出了一種在矢量PDF地圖中描述“圓”的方案,減少了矢量PDF地圖的數(shù)據(jù)量。

一、PDF編碼規(guī)則中對圓的特殊規(guī)定

根據(jù)《PDF Reference》中關(guān)于形狀路徑的構(gòu)建規(guī)定,構(gòu)建矢量路徑只有折線、三次貝塞爾曲線和矩形,并沒有能夠直接構(gòu)建圓的路徑構(gòu)建操作符。因此,矢量PDF地圖中的圓只有利用三次貝塞爾曲線來描繪,但三次貝塞爾曲線是無法精確描繪一個(gè)圓的,而且用一條三次貝塞爾曲線來擬合的圓會(huì)出現(xiàn)肉眼可見的誤差。目前比較好的方法是采用四條三次貝塞爾曲線來擬合圓,雖然仍然無法描繪完美的圓,但是已經(jīng)可達(dá)肉眼不可覺察的要求了[1]。

圖1顯示了用四條三次貝塞爾曲線擬合圓的示意圖。將一個(gè)圓分為四段,每段都用下面的公式來確定P0、P1、P2、P3四個(gè)控制點(diǎn)。

根據(jù)Adobe公司公開的PDF編碼規(guī)則文檔《PDF Reference》,構(gòu)建一條三次貝塞爾曲線有三步。

第一步:使用“m”操作符開始一條路徑。操作數(shù)為路徑第一個(gè)點(diǎn)的坐標(biāo),例如:0 0 m,表示在(0,0)點(diǎn)開始以一條路徑。

第二步:使用“c”操作符構(gòu)建一條三次貝塞爾曲線。它有三個(gè)操作數(shù),按照順序分別是兩個(gè)控制點(diǎn)和一個(gè)路徑的終點(diǎn)。在圖1中構(gòu)建了一個(gè)四分之一的圓,其三次貝塞爾曲線的操作數(shù)按照順序就是P1,P2,P3。

因此,構(gòu)建圖1中的一條四分之一圓的格式就是:

x1y1m %開始一條路徑

X y1x2Y x2y2c %構(gòu)建三次貝塞爾曲線

而構(gòu)建一個(gè)完整圓就是連續(xù)的四條三次貝塞爾曲線。例如構(gòu)建一個(gè)中心點(diǎn)在100 100,半徑為100的圓的PDF編碼如下。

二、處理圓的目的

在一幅矢量地圖中存在大量的“圓”,如圖2所示的地圖符號(hào)都包含圓,特別是一個(gè)小圓點(diǎn)也要用實(shí)心圓來表示。矢量PDF地圖中的一個(gè)“圓”需要用四條三次貝塞爾曲線來描繪。以固定三位數(shù)定位點(diǎn)坐標(biāo)做比較,描繪一個(gè)圓需要占用117個(gè)字節(jié)而描繪一段直線需要22字節(jié),矩形需要20字節(jié),可見描繪一個(gè)圓的數(shù)據(jù)量大大多于其他圖元。因此為了減少數(shù)據(jù)量,需要專題研究矢量PDF地圖中“圓”的描繪方法(如圖2)。

三、利用X對象避免圓的多次描繪

在PDF編碼規(guī)則中,X對象是一種可以在頁面中多次重復(fù)使用的頁面資源。因此可以做一個(gè)基準(zhǔn)“圓”,在矢量PDF地圖頁面中,任何使用圓的地方都可以調(diào)用這個(gè)基準(zhǔn)圓。X對象可以是一個(gè)矢量圖形,也可以是一個(gè)柵格圖像。不建議使用柵格圖像。第一,柵格圖像本身的數(shù)據(jù)量不小,根據(jù)清晰度的不同幾KB至十幾KB不等。但對于一幅本身1MB左右的矢量PDF地圖來說,已經(jīng)很大了。第二,柵格圖像在放大率較大的時(shí)候會(huì)出現(xiàn)模糊甚至是馬賽克現(xiàn)象。第三,柵格圖像是不透明的,無法實(shí)現(xiàn)空心圓。因此本文只討論使用矢量圖形來構(gòu)建基準(zhǔn)圓的方法。

1.X對象的編碼機(jī)制

下面簡要討論X對象的編碼方法[2]。

X對象是資源對象序列中的一種對象,如圖3所示。設(shè)置兩個(gè)X對象(填充圓和描邊圓)就可以表示矢量PDF地圖中的所有的圓。在資源對象序列中設(shè)置X對象后,需要在頁面對象的Resource屬性中注冊,然后就可以在頁面對象中使用了,在頁面對象中使用只需要使用操作符Do即可。

上面的編碼示例是在頁面對象中注冊了一個(gè)名為X1201的X對象。

上面的編碼示例是在矢量PDF地圖頁面上放置了一個(gè)X對象。通過設(shè)置變形矩陣可以設(shè)置圓的大小,也可以把圓放到正確的位置,下面分別描述兩個(gè)X對象的設(shè)置。

2.填充圓的設(shè)置

填充圓是既設(shè)置描邊又設(shè)置填充的圓。填充圓的另一個(gè)重要作用是表示“點(diǎn)”。

上面的編碼設(shè)置了一個(gè)填充圓。在構(gòu)建了圓的路徑后,采用路徑描繪操作符“B”(作用是填充及描繪路徑),將路徑描繪在PDF頁面中。在這個(gè)X對象中,沒有設(shè)置任何的圖形狀態(tài),如顏色、線寬、虛線樣式等,這些屬性都可以在頁面對象中去設(shè)置,一旦在X對象中設(shè)置,在頁面對象中的圖形狀態(tài)設(shè)置就無效了。這樣就保證了這個(gè)X對象可以表達(dá)矢量PDF地圖中的所有填充圓。對于“點(diǎn)”來說,實(shí)際上就是半徑很小的黑色填充圓。在頁面對象中不需要設(shè)置任何的圖形狀態(tài),只需要設(shè)置變形矩陣cm,將填充圓設(shè)置的足夠的小并且放置到正確的位置就可以了。

3.描邊圓的設(shè)置

描邊圓是只描邊的圓,是一個(gè)空心圓。其X對象的編碼和填充圓的編碼幾乎完全一樣,只是將填充圓編碼中采用的路徑描繪操作符“B”改為“S”(作用是僅描邊)。

考慮到既然描邊圓和填充圓的代碼幾乎完全相同,能不能夠在X對象中只設(shè)定路徑而不描繪,在頁面中去描繪呢。在《PDF Reference》并沒有明確的相關(guān)規(guī)定。為此,專門進(jìn)行了實(shí)驗(yàn),試圖在X對象中只描述路徑,而既不加入圖形狀態(tài)操作符代碼,也不用路徑描繪抄作符來描繪。而實(shí)驗(yàn)結(jié)果并不支持使用這種方法,在X對象中如果不進(jìn)行描繪,在頁面對象中,即使使用了X對象,也無法完成對X對象路徑的描繪。因此得出了PDF的X對象的必須要使用路徑描繪操作符完成對路徑的描繪的結(jié)論。

4.圓的大小和位置的控制

圓的大小和位置依靠在執(zhí)行操作符Do前設(shè)置變形矩陣cm來實(shí)現(xiàn)。cm操作符有6個(gè)操作數(shù)a b c d e f,設(shè)置cm可以使X對象產(chǎn)生各種位移和變形,其中最簡單的是縮放和位移。設(shè)置操作數(shù)中的a和d實(shí)現(xiàn)圓的縮放,這里的數(shù)字就是縱向和橫向的縮放倍數(shù),設(shè)置為2就是放大兩倍,設(shè)置為0.1就是縮小10倍。這兩個(gè)數(shù)字應(yīng)設(shè)置為相同的數(shù)字,如果不這樣設(shè)置圓就會(huì)形變?yōu)闄E圓。操作數(shù)e和f實(shí)現(xiàn)圓的定位。因?yàn)閄對象中設(shè)置的圓的中心點(diǎn)是(0 0)點(diǎn),這里設(shè)置的e、f就是矢量PDF地圖中圓的中心點(diǎn)的位置。例如設(shè)置為0.1 0 0 0.1 100 100 cm,就是放置了一個(gè)中心點(diǎn)為(100 100)的,半徑為10的圓。

5.圖形狀態(tài)設(shè)置的注意事項(xiàng)

因?yàn)閳A的大小和虛線樣式都是用變形矩陣來控制的,而變形矩陣的縮放是對整個(gè)圓進(jìn)行了縮放,對線寬和虛線都有影響。實(shí)際上,變形矩陣的縮放倍數(shù)對線寬和虛線樣式的設(shè)置具有同樣的縮放效果,如下例所示。

在上面的編碼中,在描繪X對象X0前設(shè)置了線寬、虛線樣式和變形矩陣,這樣畫出來的圓事實(shí)上是線寬為1,虛線樣式為[2 1] 0 d的圓。

注意:圖形狀態(tài)不是一步一步起作用的,而是在執(zhí)行圖形描繪操作的時(shí)候才起作用的。交換圖形狀態(tài)的設(shè)置順序?qū)D形沒有影響。例如,上例中交換圖形狀態(tài)的設(shè)置順序?yàn)椋?/p>

描繪出來的圓和前例相比沒有任何變化。

四、效果分析

設(shè)置一個(gè)X對象的標(biāo)準(zhǔn)圓需要258個(gè)字節(jié),設(shè)置兩個(gè)標(biāo)準(zhǔn)圓需要516個(gè)字節(jié)。在矢量PDF地圖中執(zhí)行操作符Do描繪一個(gè)圓需要30個(gè)字節(jié)(包含設(shè)置cm變形矩陣)。和利用三次貝塞爾曲線描繪圓(需要117個(gè)字節(jié))相比,數(shù)據(jù)量減少了75%。而因?yàn)樵O(shè)置兩個(gè)基準(zhǔn)圓的X對象(描邊圓和填充圓)而增加的數(shù)據(jù)量只有0.5KB左右。地圖中的圓越多,對地圖數(shù)據(jù)量的減少也明顯,一幅有1000個(gè)圓的地圖,地圖數(shù)據(jù)量的減少能達(dá)到87KB,而對于一幅1MB左右的矢量PDF地圖,這樣的數(shù)據(jù)量的減少已經(jīng)很可觀了。

對于單幅矢量PDF地圖來說,使用這種方法減少的數(shù)據(jù)量并不是很大,對于目前高速的網(wǎng)絡(luò)帶寬和存儲(chǔ)空間來說,這幾十KB的優(yōu)化看起來很小。但這樣做的有以下幾點(diǎn)好處。一是數(shù)據(jù)量是矢量PDF地圖在網(wǎng)絡(luò)數(shù)據(jù)交換領(lǐng)域的生命線,任何能夠減少數(shù)據(jù)量的方法都是一次性能的提升。二是地理信息數(shù)據(jù)從來都是海量的數(shù)據(jù)。不論是存儲(chǔ)還是網(wǎng)絡(luò)傳輸,一旦和龐大的數(shù)量相乘就會(huì)發(fā)生質(zhì)變。

五、結(jié)論

本文設(shè)計(jì)了一種利用X對象設(shè)置基準(zhǔn)圓,在矢量PDF地圖頁面中利用變形矩陣描繪需求圓的方法。此方法避免了在矢量PDF頁面中多次描繪需要用四條三次貝塞爾曲線來描繪的圓。另一方面,由于使用了X對象避免了大量三次貝塞爾曲線的生成,制作矢量PDF地圖系統(tǒng)也減少了很多的計(jì)算量,也加快了矢量PDF地圖的制圖速度。在保證矢量PDF地圖質(zhì)量的情況下,不斷減少矢量PDF地圖的數(shù)據(jù)量,必將使矢量PDF地圖的應(yīng)用更加廣泛。

猜你喜歡
貝塞爾數(shù)據(jù)量頁面
刷新生活的頁面
基于大數(shù)據(jù)量的初至層析成像算法優(yōu)化
計(jì)算Lyapunov指數(shù)的模糊C均值聚類小數(shù)據(jù)量法
看星星的人:貝塞爾
寬帶信號(hào)采集與大數(shù)據(jù)量傳輸系統(tǒng)設(shè)計(jì)與研究
基于虛宗量貝塞爾函數(shù)的螺旋帶色散模型
求解貝塞爾類方程的推廣試探函數(shù)法
高階貝塞爾光束的Z掃描理論
網(wǎng)站結(jié)構(gòu)在SEO中的研究與應(yīng)用
淺析ASP.NET頁面導(dǎo)航技術(shù)