• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于Coreldraw vba的GIS空間線數(shù)據(jù)自動(dòng)光滑綜合研究

      2017-12-12 00:29李正祥
      科技創(chuàng)新與應(yīng)用 2017年34期

      李正祥

      摘 要:地圖制圖出版對(duì)地圖版面效果有著很高的要求,其符號(hào)、曲線、注記的配置與美觀程度直接影響讀圖者的心里感受。Coreldraw軟件因其強(qiáng)大的文字、曲線和效果編輯功能,深受地圖制圖者的喜愛(ài)。文章基于vba 二次開(kāi)發(fā),研究了GIS地理空間線數(shù)據(jù)在Coreldraw制圖中的轉(zhuǎn)化、光滑和自動(dòng)綜合等方法,極大減小了地理空間線數(shù)據(jù)在Coreldraw制圖中的工作量,提高了制圖質(zhì)量、增強(qiáng)了圖面效果。

      關(guān)鍵詞:Coreldraw vba制圖;GIS空間線轉(zhuǎn)化;自動(dòng)光滑;線綜合處理

      中圖分類號(hào):P283.7 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):2095-2945(2017)34-0016-02

      1 GIS地理空間線數(shù)據(jù)與Coreldraw制圖曲線比較與轉(zhuǎn)化思路

      1.1 GIS空間線數(shù)據(jù)圖形特點(diǎn)

      GIS地理空間數(shù)據(jù)庫(kù)本質(zhì)特征是基于圖形的屬性數(shù)據(jù)存儲(chǔ)與查詢,其空間線圖形是以節(jié)點(diǎn)位置為單元的存儲(chǔ)方式,按節(jié)點(diǎn)順序以折線方式表達(dá)來(lái)符合地理空間線、面特征。其節(jié)點(diǎn)為直線型節(jié)點(diǎn),節(jié)點(diǎn)無(wú)調(diào)節(jié)作用,僅限定直線段通過(guò)。空間特征表現(xiàn)越精確,圖形節(jié)點(diǎn)數(shù)量越多,折線段量則越大。最大構(gòu)成單個(gè)圖元節(jié)點(diǎn)數(shù)量可高達(dá)十萬(wàn)個(gè),文件大小至千兆字節(jié)。

      1.2 Coreldraw制圖曲線數(shù)據(jù)特點(diǎn)

      Coreldraw制圖線數(shù)據(jù)是一種非屬性的圖元結(jié)構(gòu)。受地圖圖面表達(dá)美觀、簡(jiǎn)潔的視覺(jué)要求限制,圖形一般以節(jié)點(diǎn)控制的光滑曲線來(lái)表達(dá),特別是中小比例尺地圖制圖,還必須對(duì)線、面等部分細(xì)微特征進(jìn)行制圖綜合,保留優(yōu)化后的宏觀特征。其節(jié)點(diǎn)類型可分為尖突節(jié)點(diǎn)、平滑節(jié)點(diǎn)和對(duì)稱節(jié)點(diǎn)3類, 受制圖軟件限制,Coreldraw文件大小一般為幾百兆字節(jié)以內(nèi)。

      1.3 折線數(shù)據(jù)轉(zhuǎn)化為制圖曲線思路

      由折線與曲線的特點(diǎn)和控制節(jié)點(diǎn)性質(zhì)可知,折線轉(zhuǎn)化為曲線,同時(shí)對(duì)節(jié)點(diǎn)類型轉(zhuǎn)換,可實(shí)現(xiàn)曲線光滑處理。綜合拉直按成圖比例尺大小,根據(jù)地理空間線要素空間分布特點(diǎn),刪除不必要的細(xì)微特征控制節(jié)點(diǎn),保留宏觀特征節(jié)點(diǎn),就可實(shí)行地圖制圖的曲線要素自動(dòng)綜合。

      2 vba程序設(shè)計(jì)

      GIS地理空間線數(shù)據(jù)在生產(chǎn)過(guò)程中,需按實(shí)際線狀要素特點(diǎn),使用折線近似平滑描繪真實(shí)空間走向,因此在Coreldraw軟件中則要將折線轉(zhuǎn)化為最廣泛使用的貝賽爾光滑曲線,并對(duì)曲線中冗余節(jié)點(diǎn)進(jìn)行刪減,控制曲線特征節(jié)點(diǎn)手柄方向和曲率來(lái)表現(xiàn)真實(shí)地物的基本特征。

      2.1 曲線轉(zhuǎn)化及節(jié)點(diǎn)減少

      經(jīng)過(guò)空間處理的GIS線數(shù)據(jù)導(dǎo)入Coreldraw制圖軟件時(shí)為直線節(jié)點(diǎn)控制的折線段,必須進(jìn)行曲線轉(zhuǎn)化和節(jié)點(diǎn)處理,減少數(shù)據(jù)量(龐大的數(shù)據(jù)量對(duì)計(jì)算機(jī)性能要求很高,容易造成Coreldraw軟件卡死),方便于地圖制圖。為便于制圖者對(duì)每個(gè)線要素的關(guān)注和操作,保守的做法是采用先選取再處理的程式。具體實(shí)現(xiàn)主要代碼如下:

      For Each seg In ActiveShape.Curve.Segments

      ‘枚舉選中的每一條線要素

      If seg.Type = cdrLineSegment Then sgr.Add seg‘將每條直線并入組集合

      Next seg

      sgr.SetType cdrCurveSegment

      ‘直線組集合轉(zhuǎn)化為曲線

      sgr.NodeRange.SetType cdrSmoothNode

      ‘設(shè)置組集合節(jié)點(diǎn)為光滑節(jié)點(diǎn)

      ………

      ‘設(shè)置光滑節(jié)點(diǎn)系數(shù)K,以達(dá)到折線數(shù)據(jù)擬合為貝賽爾曲線,代碼如下:

      For Each s In ActiveSelectionRange.Shapes

      ‘枚舉所選圖形

      If s.Type = cdrCurveShape Then

      s.Curve.Nodes.All.Smoothen K

      ‘按光滑系數(shù)K進(jìn)行貝賽爾擬合

      End If

      Next s

      ………

      ‘曲線節(jié)點(diǎn)數(shù)減少可設(shè)置減少系數(shù)M調(diào)節(jié),主要代碼如下:

      Dim M As Double

      M = TextBox2.Value

      If CheckBox3.Value = True Then

      ActiveShape.Curve.Nodes.All.AutoReduce M

      ‘按M系數(shù)對(duì)曲線上所有節(jié)點(diǎn)自動(dòng)減少

      End If

      K值的不同,擬合的曲線有不同的效果,M不同,節(jié)點(diǎn)優(yōu)化量不一。

      2.2 中小比例尺曲線綜合拉直

      真實(shí)世界中地形地物千差萬(wàn)別,作為表現(xiàn)其特征的地圖不可能有統(tǒng)一表示,地圖創(chuàng)作的差別各源泉也主要反映在制圖綜合方面。本程序綜合拉直功能算法從兩方面進(jìn)行考慮:一是根據(jù)依次遞歸控制曲線特征的3個(gè)節(jié)點(diǎn)Nodes(1)、Nodes(2)和Nodes(3),取Nodes(2)距Nodes(1)、Nodes(3)連線間距離與Nodes(1)和Nodes(3)間線段長(zhǎng)度比值(與曲率相關(guān))作為控制Nodes(2)特征是否保留的依據(jù)。二是順序判斷相鄰節(jié)點(diǎn)間弧線長(zhǎng)度,小于預(yù)設(shè)值則舍棄節(jié)點(diǎn),可對(duì)彎折較多的特征點(diǎn)進(jìn)行適度的綜合拉直處理,如圖所示。主要代碼如下:

      n = sp(1).Nodes.count‘曲線上節(jié)點(diǎn)數(shù)

      For i= 2 To n - 1

      ‘獲得3個(gè)節(jié)點(diǎn)的坐標(biāo)

      ax = sp(1).Nodes(i - 1).PositionX

      ay = sp(1).Nodes(i - 1).PositionY

      bx = sp(1).Nodes(i).PositionXendprint

      by = sp(1).Nodes(i).PositionY

      cx = sp(1).Nodes(i + 1).PositionX

      cy = sp(1).Nodes(i + 1).PositionY4

      ‘獲得相間兩節(jié)點(diǎn)弧線長(zhǎng)度

      nr = sp(1).Nodes(i - 1).GetDistanceFrom(sp(1).Nodes(i + 1))

      ‘面積法計(jì)算中間點(diǎn)與相間隔節(jié)點(diǎn)間直線距離dis

      A = Math.Sqr((cx - ax) * (cx - ax) + (cy - ay) * (cy - ay))

      B = Math.Sqr((bx - ax) * (bx - ax) + (by - ay) * (by - ay))

      C = Math.Sqr((cx - bx) * (cx - bx) + (cy - by) * (cy - by))

      p = (A + B + C) / 2D = Math.Sqr(p * (p - A) * (p - B) * (p - C))

      dis = 2 * D / A

      ‘相間節(jié)點(diǎn)間距離小于0.2,則舍棄中間I 節(jié)點(diǎn)

      If nr < 0.2 Then

      sp(1).Nodes(i).Delete

      ‘點(diǎn)與線段間距離dis與線段長(zhǎng)度比值小于M則舍棄節(jié)點(diǎn)i

      Else: If dis / A < M Then sp(1).Nodes(i).Delete

      End If

      Next i

      3 結(jié)束語(yǔ)

      在實(shí)際數(shù)據(jù)庫(kù)線數(shù)據(jù)制圖自動(dòng)光滑綜合過(guò)程中發(fā)現(xiàn),本二次開(kāi)發(fā)對(duì)于折線轉(zhuǎn)曲線并減少節(jié)點(diǎn)光滑綜合效果和特征點(diǎn)保留很好,可很好地應(yīng)用于相近比例尺的制圖和縮編。然而,對(duì)于比例尺跨度較大,如1:10000縮編至1:100000以下時(shí),綜合拉直在一些特殊地方,如連續(xù)轉(zhuǎn)角過(guò)多地方還需進(jìn)行人工編輯和調(diào)整。

      參考文獻(xiàn):

      [1]王雷,趙冰雪.ArcGIS與CorelDraw數(shù)據(jù)格式轉(zhuǎn)換實(shí)現(xiàn)[J].宿州學(xué)院學(xué)報(bào),2016(10):107-109.

      [2]曾克明.Coreldraw軟件的二次開(kāi)發(fā)在地圖制圖中的應(yīng)用與實(shí)例[J].測(cè)繪通報(bào),2010(8):60-61.

      [3]焦靈,等.Coreldraw X7平面設(shè)計(jì)與制作[M].高等教育出版社,2017,3.

      [4]劉洋,郭慶勝,等.Coreldraw線狀地圖符號(hào)庫(kù)的設(shè)計(jì)[J].測(cè)繪工程,2017,26(7):66-70,75.

      [5]周園.地圖與地圖制圖[M].武漢大學(xué)出版社,2011,11.endprint

      和政县| 龙海市| 托克逊县| 武胜县| 蒲江县| 德阳市| 黄骅市| 博白县| 甘南县| 西畴县| 临洮县| 许昌市| 读书| 巴东县| 明溪县| 大余县| 尉氏县| 富源县| 邳州市| 泾源县| 洪洞县| 吉安县| 青田县| 马山县| 荣昌县| 建德市| 红安县| 水城县| 壶关县| 河津市| 大同县| 辽源市| 扬中市| 肇州县| 新蔡县| 南陵县| 西乌珠穆沁旗| 治县。| 孝感市| 东安县| 惠安县|