封華梅
(陜西省一八五煤田地質(zhì)有限公司,陜西 榆林 719000)
無論是編制各種應用圖件還是建立信息系統(tǒng),都離不開自動化成圖。而要實現(xiàn)自動化成圖,又離不開圖形語言—符號。因此,對大比例尺地形圖符號庫的建立進行研究具有非常重要的現(xiàn)實意義和應用價值[1]。
在AutoCAD下建立圖式符號庫,選擇對AutoCAD2006平臺實現(xiàn)的二次開發(fā),它提供了眾多的二次開發(fā)環(huán)境:包括R12及以前版本提供的Auto LISP、ADS(Advanced Development System),以及R13、R14新增加的ADSRX、ObjectARX、還有Visual LISP等使用CAD二次開發(fā)Lisp技術(shù)[2],文中使用Visual LISP語言進行編譯,并介紹了基于AutoCAD環(huán)境下,大比例尺地形圖符號庫的建立方法及應用。
符號是一種物質(zhì)的對象、屬性或過程,用它來表示抽象的概念。這種表示是以約定的關(guān)系為基礎(chǔ)的。地圖符號是表達地圖內(nèi)容的基本手段,它由形狀不同、大小不一、色彩有別的圖形和文字組成。地圖符號是地圖的語言,是一種圖形語言,與文字相比,最大的特點是形象直觀、一目了然[3]。
地圖符號按所代表的地面物體或現(xiàn)象的分布狀況,可分為點狀符號、線狀符號和面狀符號。點狀符號是用來表示地圖上不依比例尺表示的小面積地物和點狀地物,大致分為一般點狀符號和注記點狀符號。線狀符號用于表示呈線狀分布或帶狀延伸的現(xiàn)象,既能表示一定范圍內(nèi)地物的形狀、彎曲程度及延伸方向,又能以寬度、色彩等表示地物的數(shù)量和質(zhì)量特征。線狀符號可分為簡單線狀符號和復雜現(xiàn)狀符號。面狀符號是表達空間上具有連續(xù)兩維分布的現(xiàn)象的符號。具有定位特征,為依比例符號。面狀符號根據(jù)填充方式的不同,又可以分為點填充方式及線填充方式[4]。
點狀符號以點定位,在一定比例尺范圍內(nèi),圖上的大小是固定的,例如各種控制點符號。它們常常不能用某一固定的數(shù)學公式來描述,必須首先建立這些符號特征點信息的符號庫,才能實現(xiàn)計算機的自動繪制[5]。
點狀符號的繪制方法:①對于規(guī)則符號,可直接計算符號特征點的坐標;②對于圓,采集圓心坐標和半徑;③對于圓弧,則采集圓心坐標,半徑、起始角和終點角;④對于填充符號,則采集邊界信息,并給出填充信息。
基本線型繪制:繪圖參數(shù)。定位點個數(shù)N和定位點坐標,實步長D1,虛步長D2和點步長D3。當實步長D1=0和虛步長D2=0時,為點線;當只有虛步長D2=0時,為點劃線。當點步長D3=0,為虛線,如圖1所示。
圖1 繪制參數(shù)所對應的線型示意圖
平行線的繪制:平行線是由兩條間距相等的直線構(gòu)成。很多線狀地物都是由平行線作為基本邊界,然后再加繪一定的內(nèi)容而成,平行線是繪制很多線狀地物的基礎(chǔ)[5]。定位直線(母線)節(jié)點個數(shù)和定位節(jié)點坐標(Xi,Yi)i=1,2,3,…,N,平行線寬度W,平行線的繪制方向,即在定位直線的左方或是右方繪制,如圖2所示。
圖2 平行線繪制示意圖
線狀符號自動繪制:線狀符號除了在每兩個離散點之間有趨勢性的直線、曲線等符號以外,有些線狀符號中間還配置有其他的符號,如陡坎符號,除了定位中心線以外,還配置有短齒線。對于沿中心軸線按一定規(guī)律進行配置的線狀符號,可以用比較簡單的數(shù)學表達式來描述[6]。繪圖參數(shù)S為兩離散點之間的距離,N表示兩離散點間的齒數(shù),D1為相鄰兩齒間的距離,D2為齒長,D3為兩離散點間不足一個齒距的剩余值,DX1,DY1為齒心的相對坐標,DX2,DY2,DX3,DY3為齒端對齒心的相對坐標,繪圖參數(shù)示意圖,如圖3所示。計算出齒心和齒端坐標以后,根據(jù)不同的線狀符號特點,采用不同的連接方式就可產(chǎn)生陡坎、鐵路、城墻等線狀符號。
圖3 繪圖參數(shù)示意圖
線狀符號用于表示呈線狀分布或帶狀延伸的現(xiàn)象。線狀圖形符號既能表示一定范圍內(nèi)地物的形狀、彎曲程度及延伸方向,又能以寬度、色彩等表示地物的數(shù)量或質(zhì)量特征[7]。
定制線型法:①標題行的格式為*ltype-name[,description][8];②定義行的格式為A,dash-1,dash-2,…,dash-n。其中,“A”表示為兩端對齊方式,dash-1,dash-2,…為短劃線序列的每段長度。當dash-i>0,表示是實線段;dash-i<0,表示是空白線段;當dash-i=0,表示是一個點。
定制復合線型法:①標題行的格式為*線型名[,線型描述];②定義行的格式為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個字段R、A、S、X、Y為可選擇的轉(zhuǎn)換分類。每個轉(zhuǎn)換分類后面的n表示所需數(shù)字。R表示形相對于當前線段方向的轉(zhuǎn)角;A表示形相對于世界坐標系的X軸的絕對的轉(zhuǎn)角;S確定形的比例系數(shù);X、Y表示當前點的偏移量,柵欄如圖4所示。
實例:定義柵欄符號
定義形文件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 柵欄示意圖
面狀符號的自動繪制:面狀符號一般由邊界輪廓線和填充符號組成,自動繪制步驟為①按計算暈線的方式求出面狀符號的軸線;②計算軸線長度,根據(jù)軸線長度和軸線上符號的間隔d,按均勻分布的原則計算注記符號的中心位置坐標;③根據(jù)面狀符號代碼,在符號庫中讀取表示該符號的圖形數(shù)據(jù),在計算出的符號中心位置上繪制填充符號。
繪圖參數(shù):輪廓邊界點個數(shù)N,輪廓邊界點坐標(Xi,Yi),i=1,2,…,N,軸線和X軸的夾角α,軸線間隔D,每條軸線符號間隔d,如圖5所示。
圖5 繪圖參數(shù)示意圖
基于AutoCAD面狀符號制作:圖案的文件可存放多個圖案的定義,每個圖案有一個標題行和若干個定義行。①標題行的格式為*pattern-name[,description];②定義行的格式為angle,x-origion,y-origion,delta-x,delta-y,[dash-1,dash-2,…,dash-n][8],其中,angle為平行線與水平方向的夾角;x-origin、y-origin為平行線經(jīng)過點坐標;delta-x為相鄰兩平行線沿線本身方向的偏移;delta-y為相鄰兩平行線的距;[dash-1,dash-2,…,dash-n]為平行線的線型。
面狀符號的自動填充:這是大比例尺地圖制圖中最能體現(xiàn)計算機制圖效率的工作。填充的符號可以通過形文件或圖塊做好,以填充天然草地符號為例繪制,如圖6所示。①獲得多邊形的外界矩形,其角點坐標為(Xmin,Ymin),(Xmax,Ymax),確定最下方射線的縱坐標值Y0=(Int(Ymin/h)+1)*h,h為符號縱向間隔實地距離;②確定各條射線上最左側(cè)填充符號的初始橫坐標值X0=(INT(Xmin/w)+1)*w,w為符號橫向間隔實地距離;③確定填充行第一個填充符號的插入點橫坐標值。根據(jù)橫向間隔距離W依次循環(huán)進行整行填充;④確定射線與多邊形的交點,判斷填充符號的插入點是否在填充區(qū)間內(nèi)。如果在填充區(qū)間,插入填充符號;如果不在填充區(qū)間內(nèi),則插入點向右移動距離w,并判斷新插入點是否在填充區(qū)間內(nèi),依次循環(huán)直到插入點的橫坐標值大于Xmax,結(jié)束該行填充;⑤同理進行縱向填充,直到插入點的縱坐標值大于Ymax,結(jié)束所有填充。
實例:定義填充天然草地符號
*H142,Caodi
90,0,0,10,10,2,-18
90,1,0,10,10,2,-18
圖6 天然草地的圖案
通過Visual LISP語言在其文本編譯器下對符號庫進行編輯,從而完成對符號庫的實現(xiàn)。制作成果分別如圖7~9所示。
(defun dlfh(km cm ys / fa pt)
(command “l(fā)ayer” “m” cm “c” ys “” “”)
(setq pt(getpoint “ 插入基點:”))
(whilept(if(or(=km“WBF”)(=km“BYQ”))
(progn(setqfa(getanglept“ 給出符號方向:”))
(command “insert” km pt blc “”(* fa 57.3)))
(command “insert” km pt blc “” 0))
(setq pt(getpoint “ 下一個插入點(回車結(jié)束):”)))
(princ))
圖7 點狀符號制作成果圖
(defunc:fhh(/ssfhbiiikkkcmmdnnnmmmxblpt)
(alert“符號化之前要對原圖存盤 按[OK]鈕自動進行”)
(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)價值112.5億美元的身家,一躍跳至第12位。
(setqiii(getint(strcat“基本圖的比例尺是 1:”(itoa(fix(*blc1000.0)))“ 請選擇符號的比例尺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 線狀符號制作成果圖
(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 面狀符號制作成果圖 在AutoCAD二次開發(fā)平臺,運用VisualLISP語言,建立大比例尺地形圖符號庫,實現(xiàn)了適合大比例尺地形圖需求的常用點狀、線狀及面狀地物符號,并對這些地物符號進行有效管理。經(jīng)生產(chǎn)實踐檢驗,具有較強的實用性和便捷性,克服了傳統(tǒng)地形圖繪制的缺陷,大大提高了地形圖繪制的速率和質(zhì)量,創(chuàng)造了良好的經(jīng)濟效益,同時也便于地物符號的更新維護,有助于更加形象地描繪地形地貌。4 結(jié)語