• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    AutoCAD生產(chǎn)平臺與GIS系統(tǒng)交互研究

    2018-03-15 03:29:37張小波陳凱石吉寶白曉明陳軍勝
    城市勘測 2018年1期
    關(guān)鍵詞:調(diào)用切片坐標(biāo)系

    張小波,陳凱,石吉寶,白曉明,陳軍勝

    (成都市勘察測繪研究院,四川 成都 610081)

    1 引 言

    測繪地理信息采集生產(chǎn)的平臺多基于AutoCAD,早期由于對數(shù)據(jù)要求不高,在生產(chǎn)平臺只進(jìn)行基本的圖形繪制與編輯,隨著地理信息技術(shù)的發(fā)展,在生產(chǎn)環(huán)節(jié)采集編輯的地理信息要素越來越多,生產(chǎn)時往往需要在外業(yè)采集的數(shù)據(jù)上疊加其他數(shù)據(jù)進(jìn)行綜合生產(chǎn)。

    生產(chǎn)平臺若能調(diào)用GIS系統(tǒng)的影像及地圖服務(wù),將極大地豐富基礎(chǔ)數(shù)據(jù)來源,為數(shù)據(jù)生產(chǎn)提供便利。Esri官方推出了ArcGIS for AutoCAD插件,其可以使AutoCAD作為ArcGIS Server的客戶端加載地圖服務(wù),并且可以作為GIS數(shù)據(jù)結(jié)構(gòu)編輯器來組織CAD數(shù)據(jù)。其功能雖然強(qiáng)大,但是由于其沿襲專業(yè)GIS軟件的風(fēng)格和體系,更側(cè)重GIS數(shù)據(jù)管理,若用于AutoCAD平臺進(jìn)行生產(chǎn),缺點十分明顯:一是需要手動輸入服務(wù)路徑等相關(guān)參數(shù),對使用人員要求較高;二是需要在本地進(jìn)行投影定義,不利于投影參數(shù)保密;三是不具備自動刷新及緩存機(jī)制,響應(yīng)速度慢。

    基于此,我們進(jìn)行了AutoCAD生產(chǎn)平臺與GIS系統(tǒng)交互的研究,使AutoCAD生產(chǎn)平臺能夠直接調(diào)用ArcGIS發(fā)布的服務(wù),雖然功能不及ArcGIS for AutoCAD強(qiáng)大,但是對運行效率和易用性方面進(jìn)行了優(yōu)化,并將關(guān)鍵參數(shù)內(nèi)置,而且內(nèi)建緩存機(jī)制,達(dá)到了比較理想的使用效果。

    2 實現(xiàn)方法

    服務(wù)器端利用ArcGIS Server發(fā)布地圖服務(wù)并進(jìn)行切片處理;在AutoCAD客戶端上開發(fā)插件:根據(jù)當(dāng)前窗口的顯示范圍匹配地圖服務(wù)的比例尺,按切片規(guī)則計算出相應(yīng)的緩存圖片集,將緩存圖片插入后置于底層作為底圖顯示,并進(jìn)行自動刷新檢測,實現(xiàn)實時更新。其基本流程如圖1所示。

    圖1 基本流程

    雖然通過ArcGIS Server的REST接口以HTTP指令的形式能夠直接獲取指定范圍的電子地圖[1],但是經(jīng)測試這種方式響應(yīng)速度相當(dāng)慢,在本場合不具備實用性,所以需要在客戶端另行開發(fā)。通過實時獲取當(dāng)前范圍和比例,依據(jù)ArcGIS Server的切片規(guī)則計算當(dāng)前比例下需要顯示的緩存圖片,直接從地圖服務(wù)的緩存目錄獲取對應(yīng)的文件,以底圖方式拼接顯示,同時在本地建立緩存機(jī)制,以提高速度。

    3 服務(wù)器配置

    服務(wù)器端對需要發(fā)布的地圖文檔正常進(jìn)行切片即可[2~4],切片完成后,根據(jù)客戶端調(diào)用方式將切片數(shù)據(jù)設(shè)置HTTP,F(xiàn)TP或者文件共享。

    需要注意的是ArcGIS Server 10.1之后發(fā)布地圖服務(wù)必須要對Mxd文檔添加地圖投影文件,用戶在調(diào)用地圖服務(wù)時候很容易獲取到坐標(biāo)系參數(shù),不利于參數(shù)保密,因而在對外發(fā)布地圖服務(wù)通常使用標(biāo)準(zhǔn)3度帶投影。為了保證發(fā)布的地圖數(shù)據(jù)位置正確,能和常用的坐標(biāo)系下數(shù)據(jù)疊合,需要先在常用坐標(biāo)系下進(jìn)行地圖發(fā)布和切片;接著提取發(fā)布數(shù)據(jù)的范圍線,去掉坐標(biāo)信息,在標(biāo)準(zhǔn)3度帶投影下配置mxd文檔,必須保證只有mxd文件帶有坐標(biāo)系信息,范圍線數(shù)據(jù)不能帶有坐標(biāo)系信息;然后使用配置好的mxd數(shù)據(jù)以同樣的參數(shù)(包括起始點、分辨率、切片大小、級別等)在標(biāo)準(zhǔn)3度帶投影下發(fā)布地圖服務(wù),再把常用坐標(biāo)系下的地圖切片數(shù)據(jù)拷貝過來,這樣發(fā)布出來的地圖坐標(biāo)位置就和常用坐標(biāo)系下坐標(biāo)位置一致。

    4 客戶端開發(fā)

    客戶端基本功能是根據(jù)切片配置和當(dāng)前顯示范圍,獲取GIS平臺的地圖服務(wù)作為底圖,其核心是緩存圖片的計算;由于面對一線生產(chǎn)人員,客戶端的易用性與顯示速度非常重要,因此加入了自動刷新檢測與緩存機(jī)制。為了方便與其他功能集成,本次客戶端基本的緩存圖片計算、顯示緩存機(jī)制等采用Visual LISP開發(fā),而自動刷新檢測采用ObjectARX技術(shù)編寫反應(yīng)器回調(diào)LISP函數(shù)。

    4.1 緩存圖片計算原理

    緩存目錄結(jié)構(gòu)如圖2所示,在_alllayers文件夾以下,是切片設(shè)置的從小到大多個比例尺級別;一個比例尺文件夾下,是切圖的“行”文件夾,命名規(guī)則是R加上16進(jìn)制8位行號,不足補(bǔ)0;每行文件夾下就是該行的所有緩存文件了,命名規(guī)則是C加上16進(jìn)制8位列號,不足補(bǔ)0。

    圖2 緩存目錄結(jié)構(gòu)

    在緩存目錄的conf.xml文件中,保存了切片的參數(shù),其中涉及計算緩存圖片的關(guān)鍵參數(shù)有切圖原點TileOrigin,圖片的DPI,每張圖片的長度和寬度,各級比例尺及對應(yīng)地圖單位長度。

    首先計算當(dāng)前屏幕顯示的比例尺Sins,并與切片參數(shù)中的各級比例尺進(jìn)行比較,匹配最接近的地圖比例尺。

    式中:Viewsize為按圖形單位存儲當(dāng)前視口的高度;ScreensizeY為以像素為單位存儲當(dāng)前視口的高度;Dpitch為顯示器點距,根據(jù)顯示效果取 0.1 mm~0.3 mm。

    再根據(jù)當(dāng)前坐標(biāo)計算緩存圖片的行列號:

    式中:Row,Col為緩存圖片的行列號;x,y為當(dāng)前坐標(biāo);XOrigin,YOrigin為切片原點坐標(biāo);TileRows,TileCols為圖片的長度和寬度;Resolution為當(dāng)前比例尺對應(yīng)的地圖單位長度。

    同時計算該緩存圖片的插入點坐標(biāo)Inx、Iny,按AutoCAD的規(guī)則,取圖片的左下角點為插入點,計算公式如下:

    Inx=XOrigin+Row×TileRows×Resolution

    Iny=YOrigin-(Col+1)×TileCols×Resolution

    4.2 自動刷新檢測

    電子地圖隨屏幕顯示范圍自動刷新的功能在GIS系統(tǒng)中可以通過地圖控件的事件接口直接調(diào)用,但是由于AutoCAD并未直接提供類似功能的接口,因而需要單獨開發(fā)。

    基于ObjectARX編寫一個反應(yīng)器[5~6],獲取窗口的中心點坐標(biāo),根據(jù)窗口長寬計算左下及右上角點坐標(biāo)進(jìn)行監(jiān)視,若窗口顯示范圍有變化則觸發(fā)一個事件,運行回調(diào)函數(shù)進(jìn)行緩存圖片更新。

    自定義一個派生于ACED庫中AcEdInputPointMonitor類的反應(yīng)器類DBLCTTooltips,通過重寫虛函數(shù)monitorInputPoint方法,以便在引發(fā)回調(diào)事件發(fā)生時對應(yīng)的回調(diào)函數(shù)能夠處理特定的事項。本項目重寫的回調(diào)函數(shù)功能為:當(dāng)光標(biāo)移動、輸入點等事件發(fā)生后,檢測當(dāng)前CAD活動文檔的活動視口中心坐標(biāo)是否移動,若移動了就在CAD命令行輸出當(dāng)前活動視口中心坐標(biāo)、獲得當(dāng)前視口兩個對角點坐標(biāo)、同時執(zhí)行CAD本地命令“myfun”。核心功能代碼如下:

    Acad::ErrorStatus DBLCTTooltips::monitorInputPoint (定義略)

    {

    struct resbuf rb;

    acedGetVar("VIEWCTR",&rb);

    if ((s_nowpoint.x == -100000)&&(s_nowpoint.y == -100000)){

    s_nowpoint.x = rb.resval.rpoint[X];

    s_nowpoint.y = rb.resval.rpoint[Y];

    }

    if (((fabs(rb.resval.rpoint[X] - s_nowpoint.x)) > 0) && ((fabs(rb.resval.rpoint[Y] - s_nowpoint.y)) > 0) ){

    s_perpoint.x = s_nowpoint.x;

    s_perpoint.y = s_nowpoint.y;

    s_nowpoint.x = rb.resval.rpoint[X];

    s_nowpoint.y = rb.resval.rpoint[Y];

    ads_point ptMin;

    ads_point ptMax;

    GetViewPortBound(ptMin,ptMax);

    //調(diào)用命令

    resbuf *rp = acutBuildList(RTSTR,"c:myfun",RTNONE);

    acedInvoke(rp,NULL);

    }

    return (Acad::eOk) ;

    }

    由于反應(yīng)器優(yōu)先級很高,在AutoCAD中利用鼠標(biāo)中鍵執(zhí)行窗口平移縮放時,一旦窗口變化即進(jìn)行更新,不必等到釋放鼠標(biāo),使用體驗與主流GIS平臺的電子地圖類似。

    4.3 顯示與緩存機(jī)制

    為了在客戶端實現(xiàn)良好的用戶體驗,對一些細(xì)節(jié)進(jìn)行了相應(yīng)開發(fā)。

    顯示控制:AutoCAD 2006以后,在當(dāng)前模型空間的ACAD_SORTENTS數(shù)據(jù)字典中存儲了對象的顯示順序,通過設(shè)置緩存圖片位于底層以確保待編輯圖形始終可見,功能代碼如下:

    ;ImgObj為圖片對象

    (setqedtab (VL-CATCH-ALL-APPLY

    'VLA-GETOBJECT

    (LIST edict "ACAD_SORTENTS")))

    (setqtestvar (vlax-make-safearray vlax-vbobject '(0 . 0)))

    (vlax-safearray-fill testvar (list ImgObj))

    (vla-movetobottom edtab testvar)

    當(dāng)前窗口緩存圖片計算:計算當(dāng)前窗口左下及右上角點對應(yīng)緩存圖片的行列號以后,即可得到待插入圖片的序列,依次插入即可[7~9];窗口刷新后,通過待插入圖片序列與當(dāng)前顯示的序列進(jìn)行比對,只對變化的圖片進(jìn)行刷新;

    本地緩存:在本地建立緩存目錄,從服務(wù)器獲取緩存圖片后,在緩存目錄備份,下次再調(diào)用該圖片可直接在本地加載,大大提高速度;

    網(wǎng)絡(luò)檢測:網(wǎng)絡(luò)不通時,客戶端直接獲取服務(wù)器的遠(yuǎn)程圖片需要很長時間才會返回出錯信息,在此期間AutoCAD會處于“假死機(jī)”狀態(tài)無法操作,因此程序運行時首先進(jìn)行網(wǎng)絡(luò)檢測,最簡便的方法是獲取一張服務(wù)器特定路徑的問題,若成功則表明網(wǎng)絡(luò)正常,否則有問題直接提示,檢測代碼如下:

    (vl-catch-all-error-p

    (vl-catch-all-apply

    'vla-GetRemoteFile

    (listutil "ftp://192.168.10.10/layers/_alllayers/test.png" 'tmp :vlax-true)

    )

    )

    圖3 AutoCAD與GIS系統(tǒng)交互示例

    5 結(jié) 語

    AutoCAD生產(chǎn)平臺中調(diào)用GIS系統(tǒng)的地圖服務(wù),可以方便地實現(xiàn)矢量圖和影像圖等電子地圖的疊加比對分析,廣泛應(yīng)用于中小比例尺地形圖更新、專項調(diào)查、生產(chǎn)質(zhì)檢等方面,取得了良好的效果。

    [1] 黃夢龍. 瓦片地圖技術(shù)在桌面端GIS中的應(yīng)用[J]. 地理空間信息,2011(4):149~151.

    [2] 郭藝歌,王新云,李學(xué)斌. 基于ArcEngine的CAD圖中GIS柵格影像數(shù)據(jù)的自動處理[J]. 地理空間信息,2012,10(6):89~90,93,3,2.

    [3] 蘇旭明,譚建成. WebGIS中瓦片地圖關(guān)鍵技術(shù)研究[J]. 北京測繪,2012(2):9~12.

    [4] 張廣春,仲偉政. 基于ArcGIS Engine組件實現(xiàn)瓦片地圖的應(yīng)用[J]. 測繪通報,2015(3):115~116,120.

    [5] 施立瑾,張賀忻. 面向?qū)ο蟮腁utoCAD開發(fā)工具ARX Notification機(jī)制及Reactor類的使用[J]. 智能建筑與城市信息,2001(11):59~61.

    [6] 趙清清,王建勇. ARX反應(yīng)器智能關(guān)聯(lián)技術(shù)在BIM施工圖中的應(yīng)用[J]. 土木建筑工程信息技術(shù),2013(6):111~114.

    [7] 張鵬程. 常用CAD與GIS平臺影像自動配準(zhǔn)方法及實現(xiàn)[J]. 地理空間信息,2010,8(4):28~31.

    [8] 徐昌榮,周春波. 在AutoCAD中瀏覽Google衛(wèi)星地圖的方法研究[J]. 測繪通報,2013(1):77~79.

    [9] 馮連好,單湛波,陳振宇. 地形圖柵格化批量處理的實現(xiàn)與應(yīng)用[J]. 東北測繪,2012(3):211~212,216.

    猜你喜歡
    調(diào)用切片坐標(biāo)系
    核電項目物項調(diào)用管理的應(yīng)用研究
    LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
    解密坐標(biāo)系中的平移變換
    坐標(biāo)系背后的故事
    基于重心坐標(biāo)系的平面幾何證明的探討
    基于系統(tǒng)調(diào)用的惡意軟件檢測技術(shù)研究
    基于SDN與NFV的網(wǎng)絡(luò)切片架構(gòu)
    腎穿刺組織冷凍切片技術(shù)的改進(jìn)方法
    冰凍切片、快速石蠟切片在中樞神經(jīng)系統(tǒng)腫瘤診斷中的應(yīng)用價值比較
    極坐標(biāo)系下移動機(jī)器人的點鎮(zhèn)定
    三都| 峨边| 偏关县| 吉首市| 贵南县| 孟津县| 双流县| 马山县| 三河市| 台前县| 左贡县| 扎鲁特旗| 朝阳县| 潢川县| 开江县| 称多县| 冀州市| 曲阳县| 东阳市| 乌什县| 乌兰浩特市| 东乡县| 南康市| 霍邱县| 明溪县| 砀山县| 霍林郭勒市| 遵化市| 五峰| 富宁县| 修文县| 台山市| 汝南县| 怀宁县| 镇沅| 兴仁县| 新蔡县| 葫芦岛市| 革吉县| 卢氏县| 镇赉县|