封華梅
(陜西省一八五煤田地質(zhì)有限公司,陜西 榆林 719000)
無(wú)論是編制各種應(yīng)用圖件還是建立信息系統(tǒng),都離不開(kāi)自動(dòng)化成圖。而要實(shí)現(xiàn)自動(dòng)化成圖,又離不開(kāi)圖形語(yǔ)言—符號(hào)。因此,對(duì)大比例尺地形圖符號(hào)庫(kù)的建立進(jìn)行研究具有非常重要的現(xiàn)實(shí)意義和應(yīng)用價(jià)值[1]。
在A(yíng)utoCAD下建立圖式符號(hào)庫(kù),選擇對(duì)AutoCAD2006平臺(tái)實(shí)現(xiàn)的二次開(kāi)發(fā),它提供了眾多的二次開(kāi)發(fā)環(huán)境:包括R12及以前版本提供的Auto LISP、ADS(Advanced Development System),以及R13、R14新增加的ADSRX、ObjectARX、還有Visual LISP等使用CAD二次開(kāi)發(fā)Lisp技術(shù)[2],文中使用Visual LISP語(yǔ)言進(jìn)行編譯,并介紹了基于A(yíng)utoCAD環(huán)境下,大比例尺地形圖符號(hào)庫(kù)的建立方法及應(yīng)用。
符號(hào)是一種物質(zhì)的對(duì)象、屬性或過(guò)程,用它來(lái)表示抽象的概念。這種表示是以約定的關(guān)系為基礎(chǔ)的。地圖符號(hào)是表達(dá)地圖內(nèi)容的基本手段,它由形狀不同、大小不一、色彩有別的圖形和文字組成。地圖符號(hào)是地圖的語(yǔ)言,是一種圖形語(yǔ)言,與文字相比,最大的特點(diǎn)是形象直觀(guān)、一目了然[3]。
地圖符號(hào)按所代表的地面物體或現(xiàn)象的分布狀況,可分為點(diǎn)狀符號(hào)、線(xiàn)狀符號(hào)和面狀符號(hào)。點(diǎn)狀符號(hào)是用來(lái)表示地圖上不依比例尺表示的小面積地物和點(diǎn)狀地物,大致分為一般點(diǎn)狀符號(hào)和注記點(diǎn)狀符號(hào)。線(xiàn)狀符號(hào)用于表示呈線(xiàn)狀分布或帶狀延伸的現(xiàn)象,既能表示一定范圍內(nèi)地物的形狀、彎曲程度及延伸方向,又能以寬度、色彩等表示地物的數(shù)量和質(zhì)量特征。線(xiàn)狀符號(hào)可分為簡(jiǎn)單線(xiàn)狀符號(hào)和復(fù)雜現(xiàn)狀符號(hào)。面狀符號(hào)是表達(dá)空間上具有連續(xù)兩維分布的現(xiàn)象的符號(hào)。具有定位特征,為依比例符號(hào)。面狀符號(hào)根據(jù)填充方式的不同,又可以分為點(diǎn)填充方式及線(xiàn)填充方式[4]。
點(diǎn)狀符號(hào)以點(diǎn)定位,在一定比例尺范圍內(nèi),圖上的大小是固定的,例如各種控制點(diǎn)符號(hào)。它們常常不能用某一固定的數(shù)學(xué)公式來(lái)描述,必須首先建立這些符號(hào)特征點(diǎn)信息的符號(hào)庫(kù),才能實(shí)現(xiàn)計(jì)算機(jī)的自動(dòng)繪制[5]。
點(diǎn)狀符號(hào)的繪制方法:①對(duì)于規(guī)則符號(hào),可直接計(jì)算符號(hào)特征點(diǎn)的坐標(biāo);②對(duì)于圓,采集圓心坐標(biāo)和半徑;③對(duì)于圓弧,則采集圓心坐標(biāo),半徑、起始角和終點(diǎn)角;④對(duì)于填充符號(hào),則采集邊界信息,并給出填充信息。
基本線(xiàn)型繪制:繪圖參數(shù)。定位點(diǎn)個(gè)數(shù)N和定位點(diǎn)坐標(biāo),實(shí)步長(zhǎng)D1,虛步長(zhǎng)D2和點(diǎn)步長(zhǎng)D3。當(dāng)實(shí)步長(zhǎng)D1=0和虛步長(zhǎng)D2=0時(shí),為點(diǎn)線(xiàn);當(dāng)只有虛步長(zhǎng)D2=0時(shí),為點(diǎn)劃線(xiàn)。當(dāng)點(diǎn)步長(zhǎng)D3=0,為虛線(xiàn),如圖1所示。
圖1 繪制參數(shù)所對(duì)應(yīng)的線(xiàn)型示意圖
平行線(xiàn)的繪制:平行線(xiàn)是由兩條間距相等的直線(xiàn)構(gòu)成。很多線(xiàn)狀地物都是由平行線(xiàn)作為基本邊界,然后再加繪一定的內(nèi)容而成,平行線(xiàn)是繪制很多線(xiàn)狀地物的基礎(chǔ)[5]。定位直線(xiàn)(母線(xiàn))節(jié)點(diǎn)個(gè)數(shù)和定位節(jié)點(diǎn)坐標(biāo)(Xi,Yi)i=1,2,3,…,N,平行線(xiàn)寬度W,平行線(xiàn)的繪制方向,即在定位直線(xiàn)的左方或是右方繪制,如圖2所示。
圖2 平行線(xiàn)繪制示意圖
線(xiàn)狀符號(hào)自動(dòng)繪制:線(xiàn)狀符號(hào)除了在每?jī)蓚€(gè)離散點(diǎn)之間有趨勢(shì)性的直線(xiàn)、曲線(xiàn)等符號(hào)以外,有些線(xiàn)狀符號(hào)中間還配置有其他的符號(hào),如陡坎符號(hào),除了定位中心線(xiàn)以外,還配置有短齒線(xiàn)。對(duì)于沿中心軸線(xiàn)按一定規(guī)律進(jìn)行配置的線(xiàn)狀符號(hào),可以用比較簡(jiǎn)單的數(shù)學(xué)表達(dá)式來(lái)描述[6]。繪圖參數(shù)S為兩離散點(diǎn)之間的距離,N表示兩離散點(diǎn)間的齒數(shù),D1為相鄰兩齒間的距離,D2為齒長(zhǎng),D3為兩離散點(diǎn)間不足一個(gè)齒距的剩余值,DX1,DY1為齒心的相對(duì)坐標(biāo),DX2,DY2,DX3,DY3為齒端對(duì)齒心的相對(duì)坐標(biāo),繪圖參數(shù)示意圖,如圖3所示。計(jì)算出齒心和齒端坐標(biāo)以后,根據(jù)不同的線(xiàn)狀符號(hào)特點(diǎn),采用不同的連接方式就可產(chǎn)生陡坎、鐵路、城墻等線(xiàn)狀符號(hào)。
圖3 繪圖參數(shù)示意圖
線(xiàn)狀符號(hào)用于表示呈線(xiàn)狀分布或帶狀延伸的現(xiàn)象。線(xiàn)狀圖形符號(hào)既能表示一定范圍內(nèi)地物的形狀、彎曲程度及延伸方向,又能以寬度、色彩等表示地物的數(shù)量或質(zhì)量特征[7]。
定制線(xiàn)型法:①標(biāo)題行的格式為*ltype-name[,description][8];②定義行的格式為A,dash-1,dash-2,…,dash-n。其中,“A”表示為兩端對(duì)齊方式,dash-1,dash-2,…為短劃線(xiàn)序列的每段長(zhǎng)度。當(dāng)dash-i>0,表示是實(shí)線(xiàn)段;dash-i<0,表示是空白線(xiàn)段;當(dāng)dash-i=0,表示是一個(gè)點(diǎn)。
定制復(fù)合線(xiàn)型法:①標(biāo)題行的格式為*線(xiàn)型名[,線(xiàn)型描述];②定義行的格式為Alignment,dash-1,dash-2,…[Shapename,shape_file,R=n,A=n,S=n,X=n,Y=n],dash-n,…其中,shape_file為AutoCAD的.shp形文件。其余5個(gè)字段R、A、S、X、Y為可選擇的轉(zhuǎn)換分類(lèi)。每個(gè)轉(zhuǎn)換分類(lèi)后面的n表示所需數(shù)字。R表示形相對(duì)于當(dāng)前線(xiàn)段方向的轉(zhuǎn)角;A表示形相對(duì)于世界坐標(biāo)系的X軸的絕對(duì)的轉(zhuǎn)角;S確定形的比例系數(shù);X、Y表示當(dāng)前點(diǎn)的偏移量,柵欄如圖4所示。
實(shí)例:定義柵欄符號(hào)
定義形文件a.shx
*1,3,1
1,01C,0
*2,7,2
3,2,1,10,1,000,0
建立文件zhalan.lin
*zhalan
A,4.5,[1,a.shx,Y=1],4.5,[2,a.shx,X=0.5],-1
圖4 柵欄示意圖
面狀符號(hào)的自動(dòng)繪制:面狀符號(hào)一般由邊界輪廓線(xiàn)和填充符號(hào)組成,自動(dòng)繪制步驟為①按計(jì)算暈線(xiàn)的方式求出面狀符號(hào)的軸線(xiàn);②計(jì)算軸線(xiàn)長(zhǎng)度,根據(jù)軸線(xiàn)長(zhǎng)度和軸線(xiàn)上符號(hào)的間隔d,按均勻分布的原則計(jì)算注記符號(hào)的中心位置坐標(biāo);③根據(jù)面狀符號(hào)代碼,在符號(hào)庫(kù)中讀取表示該符號(hào)的圖形數(shù)據(jù),在計(jì)算出的符號(hào)中心位置上繪制填充符號(hào)。
繪圖參數(shù):輪廓邊界點(diǎn)個(gè)數(shù)N,輪廓邊界點(diǎn)坐標(biāo)(Xi,Yi),i=1,2,…,N,軸線(xiàn)和X軸的夾角α,軸線(xiàn)間隔D,每條軸線(xiàn)符號(hào)間隔d,如圖5所示。
圖5 繪圖參數(shù)示意圖
基于A(yíng)utoCAD面狀符號(hào)制作:圖案的文件可存放多個(gè)圖案的定義,每個(gè)圖案有一個(gè)標(biāo)題行和若干個(gè)定義行。①標(biāo)題行的格式為*pattern-name[,description];②定義行的格式為angle,x-origion,y-origion,delta-x,delta-y,[dash-1,dash-2,…,dash-n][8],其中,angle為平行線(xiàn)與水平方向的夾角;x-origin、y-origin為平行線(xiàn)經(jīng)過(guò)點(diǎn)坐標(biāo);delta-x為相鄰兩平行線(xiàn)沿線(xiàn)本身方向的偏移;delta-y為相鄰兩平行線(xiàn)的距;[dash-1,dash-2,…,dash-n]為平行線(xiàn)的線(xiàn)型。
面狀符號(hào)的自動(dòng)填充:這是大比例尺地圖制圖中最能體現(xiàn)計(jì)算機(jī)制圖效率的工作。填充的符號(hào)可以通過(guò)形文件或圖塊做好,以填充天然草地符號(hào)為例繪制,如圖6所示。①獲得多邊形的外界矩形,其角點(diǎn)坐標(biāo)為(Xmin,Ymin),(Xmax,Ymax),確定最下方射線(xiàn)的縱坐標(biāo)值Y0=(Int(Ymin/h)+1)*h,h為符號(hào)縱向間隔實(shí)地距離;②確定各條射線(xiàn)上最左側(cè)填充符號(hào)的初始橫坐標(biāo)值X0=(INT(Xmin/w)+1)*w,w為符號(hào)橫向間隔實(shí)地距離;③確定填充行第一個(gè)填充符號(hào)的插入點(diǎn)橫坐標(biāo)值。根據(jù)橫向間隔距離W依次循環(huán)進(jìn)行整行填充;④確定射線(xiàn)與多邊形的交點(diǎn),判斷填充符號(hào)的插入點(diǎn)是否在填充區(qū)間內(nèi)。如果在填充區(qū)間,插入填充符號(hào);如果不在填充區(qū)間內(nèi),則插入點(diǎn)向右移動(dòng)距離w,并判斷新插入點(diǎn)是否在填充區(qū)間內(nèi),依次循環(huán)直到插入點(diǎn)的橫坐標(biāo)值大于Xmax,結(jié)束該行填充;⑤同理進(jìn)行縱向填充,直到插入點(diǎn)的縱坐標(biāo)值大于Ymax,結(jié)束所有填充。
實(shí)例:定義填充天然草地符號(hào)
*H142,Caodi
90,0,0,10,10,2,-18
90,1,0,10,10,2,-18
圖6 天然草地的圖案
通過(guò)Visual LISP語(yǔ)言在其文本編譯器下對(duì)符號(hào)庫(kù)進(jìn)行編輯,從而完成對(duì)符號(hào)庫(kù)的實(shí)現(xiàn)。制作成果分別如圖7~9所示。
(defun dlfh(km cm ys / fa pt)
(command “l(fā)ayer” “m” cm “c” ys “” “”)
(setq pt(getpoint “ 插入基點(diǎn):”))
(whilept(if(or(=km“WBF”)(=km“BYQ”))
(progn(setqfa(getanglept“ 給出符號(hào)方向:”))
(command “insert” km pt blc “”(* fa 57.3)))
(command “insert” km pt blc “” 0))
(setq pt(getpoint “ 下一個(gè)插入點(diǎn)(回車(chē)結(jié)束):”)))
(princ))
圖7 點(diǎn)狀符號(hào)制作成果圖
(defunc:fhh(/ssfhbiiikkkcmmdnnnmmmxblpt)
(alert“符號(hào)化之前要對(duì)原圖存盤(pán) 按[OK]鈕自動(dòng)進(jìn)行”)
(command“qsave”)
(setqkg1)
(setqfhb(list“103” “102” “104” “105” “108” “109” “301” “303” “304” “305” “306” “308”“401” “402” “403” “404” “501” “502” “503” “504” “505”“602” “604” “605” “606” “607” “609” “611”“701” “702” “704” “705” “706” “707” “708” “709” “710” “711” “712” “713” “714” “805” “806” “807” “808” “809”))
今年富豪榜上榜新人最大黑馬是拼多多的黃崢。在今年赴美上市的拼多多,目前市值接近200億美元,創(chuàng)始人黃崢憑借手中50.7%的拼多多股權(quán)價(jià)值112.5億美元的身家,一躍跳至第12位。
(setqiii(getint(strcat“基本圖的比例尺是 1:”(itoa(fix(*blc1000.0)))“ 請(qǐng)選擇符號(hào)的比例尺0:結(jié)束1:1/5002:1/10003:1/2000”)))
(if(=iii0)(exit))
(setqxblblc)
(if(=iii1)(setqxbl0.5))
(if(=iii2)(setqxbl1.0))
(if(=iii3)(setqxbl2.0))
(if(=iii4)(setqxbl5.0))
(if(/=xblblc)(progn
(ifss(progn(setqename(ssnamess0))
(whileename(setqpt(cdr(assoc10(entgetename))))
(command“scale”ename“”pt(/xblblc))
(setqss(ssdelenamess))
(setqename(ssnamess0)))))
(setqss(ssget“X”(list(cons0 “INSERT”))))
(ifss(progn(setqename(ssnamess0))
(whileename(setqpt(cdr(assoc10(entgetename))))
(command“scale”ename“”pt(/xblblc))
(setqss(ssdelenamess))
(setqename(ssnamess0)))))))
圖8 線(xiàn)狀符號(hào)制作成果圖
(defuntc(km/djdbptx0y0xnynhwxyx1pt0pt1pt2ssi)
(db)
(if(andd(>(lengthd)2))(progn
(setqds(lengthd)i1)
(setqpt(nth0d)x0(carpt)y0(cadrpt)xnx0yny0)
(while( (setqpt(nthid)x(carpt)y(cadrpt)) (if( (if( (if(>xxn)(setqxnx)) (if(>yyn)(setqyny)) (setqi(1+i))) (if(=km“SD”) (setqw(*blc4)h(*blc2)) (setqw(*blc20)h(*blc10))) (setqy0(*(fix(1+(/y0h)))h)) (setqx0(*(fix(1+(/x0w)))w)) (setqyy0x1(/w4)) (while( (if(=(rem(fix(/yh))2)0)(setqx2x1)(setqx2(*x1 -1.0))) (setqx(+x0x2)) (while( (if(=(pb_pt(listxy)jdb)1)(progn(setqpt0(listxy) pt1(polarpt0 0.785(*blc2)) pt2(polarpt0 3.925(*blc2))) (if(=km“SD”) (command“point”pt0) (command“insert”kmpt0blcblc0)))) (setqx(+xw))) (setqy(+yh))) (entdelename))) (princ)) 圖9 面狀符號(hào)制作成果圖 在A(yíng)utoCAD二次開(kāi)發(fā)平臺(tái),運(yùn)用VisualLISP語(yǔ)言,建立大比例尺地形圖符號(hào)庫(kù),實(shí)現(xiàn)了適合大比例尺地形圖需求的常用點(diǎn)狀、線(xiàn)狀及面狀地物符號(hào),并對(duì)這些地物符號(hào)進(jìn)行有效管理。經(jīng)生產(chǎn)實(shí)踐檢驗(yàn),具有較強(qiáng)的實(shí)用性和便捷性,克服了傳統(tǒng)地形圖繪制的缺陷,大大提高了地形圖繪制的速率和質(zhì)量,創(chuàng)造了良好的經(jīng)濟(jì)效益,同時(shí)也便于地物符號(hào)的更新維護(hù),有助于更加形象地描繪地形地貌。4 結(jié)語(yǔ)