張 龍
(甘肅省地圖院,甘肅 蘭州 730000)
像控點(diǎn)測(cè)量是指根據(jù)像片上內(nèi)業(yè)的布點(diǎn)方案,在實(shí)地根據(jù)影像的灰度和形狀找到并確定像控點(diǎn)的位置,測(cè)量并記錄該點(diǎn)平面坐標(biāo)及其高程。
在經(jīng)濟(jì)飛速發(fā)展的今天,航測(cè)數(shù)字化成圖已成為我國城市測(cè)繪的一種主要手段,而隨著航空攝影測(cè)量在各個(gè)測(cè)繪應(yīng)用領(lǐng)域的普及,關(guān)于影像像控點(diǎn)的測(cè)量任務(wù)在各生產(chǎn)單位也日趨增多。像控點(diǎn)之記成果作為影像處理所需的重要參考資料,其內(nèi)容的準(zhǔn)確性及制作效率直接影響到后續(xù)生產(chǎn)進(jìn)度,空三轉(zhuǎn)刺像控點(diǎn)的精度、效率,繼而影響到測(cè)繪4D產(chǎn)品的生產(chǎn)精度和效率。目前不少單位在外業(yè)像控點(diǎn)測(cè)量時(shí),仍舊是由作業(yè)人員拿著紙質(zhì)相片到野外根據(jù)設(shè)計(jì)的位置選點(diǎn)、測(cè)量,然后在相片上刺點(diǎn),并在相片反面繪制點(diǎn)位略圖和點(diǎn)位說明。這樣的工作模式不僅會(huì)增加成本,還會(huì)使影像細(xì)節(jié)常常難以辨認(rèn),影響刺點(diǎn)精度,甚至導(dǎo)致返工。在接下來的成果整理時(shí),由于點(diǎn)之記的內(nèi)容屬性眾多,加之在測(cè)繪項(xiàng)目中所需像控點(diǎn)數(shù)量較多,人工完成點(diǎn)之記成果文件的制作,耗時(shí)較長且容易出錯(cuò)[1-4]。
針對(duì)上面問題,本文通過引入個(gè)人數(shù)字助理終端(Personal Digital Assistant,PDA)解決像控點(diǎn)導(dǎo)航和外業(yè)刺點(diǎn)問題,再引入Word類庫通過C#語言編程開發(fā)了點(diǎn)之記自動(dòng)生成的程序,能夠?qū)⑽淖峙c圖片等對(duì)象自動(dòng)化寫入點(diǎn)之記模板并批量輸出,大大提高了工作效率和準(zhǔn)確率。
本文介紹的方法設(shè)計(jì)流程圖如圖1所示,設(shè)計(jì)思路總共分為三個(gè)階段。
圖 1 設(shè)計(jì)流程圖
利用已有資料如像控點(diǎn)成果或者DLG、DOM通過影像匹配技術(shù)或者光速法平差技術(shù)將航攝區(qū)影像納入坐標(biāo)系中。這一過程要盡可能的保證幾何精度,以便提高外業(yè)使用PDA導(dǎo)航找點(diǎn)的效率。然后在該影像上規(guī)劃刺點(diǎn)區(qū)域并命名,刺點(diǎn)區(qū)域應(yīng)合理分布整個(gè)測(cè)區(qū),如圖2圖中綠色區(qū)域所示。最后將影像和刺點(diǎn)區(qū)域?qū)隤DA外業(yè)調(diào)繪軟件中,如圖3所示。
利用PDA外業(yè)調(diào)繪軟件的導(dǎo)航定位和影像自由縮放功能,快速準(zhǔn)確地找到預(yù)選刺點(diǎn)區(qū)域,確定好點(diǎn)位后便可架設(shè)儀器施測(cè),在PDA上將該點(diǎn)的實(shí)際位置準(zhǔn)確地刺在相對(duì)應(yīng)的影像位置上,并將其記錄在外業(yè)調(diào)繪軟件中預(yù)先建立好的實(shí)測(cè)點(diǎn)SHP圖層,同時(shí)將點(diǎn)號(hào)、刺點(diǎn)者、作業(yè)日期、檢查者、所在地、點(diǎn)位描述等屬性信息填寫到屬性表中,可按照如表1所示的格式記錄。
圖 2 預(yù)處理影像規(guī)劃刺點(diǎn)區(qū)域
圖 3 PDA
表 1 點(diǎn)位文件屬性表
圖4為像控點(diǎn)之記快速制作工具的主界面,下面著重介紹開發(fā)環(huán)境和點(diǎn)之記生成要點(diǎn)。
圖 4 像控點(diǎn)之記快速制作工具界面
1.3.1 開發(fā)環(huán)境
采用C#語言,在VS2010平臺(tái)上添加Microsoft.Office.Interop.Word和Microsoft.Office.Interop.Excel的引用和ArcEngine10.1類庫。
1.3.2 點(diǎn)之記生成
點(diǎn)之記文件的生成主要有以下幾個(gè)關(guān)鍵點(diǎn):
(1)以模板word為基礎(chǔ),創(chuàng)建點(diǎn)之記文檔
以模板文件為基準(zhǔn),創(chuàng)建word文檔,其主要實(shí)現(xiàn)方式是對(duì)_Document類的操作,其個(gè)數(shù)要與像控點(diǎn)個(gè)數(shù)一致。關(guān)鍵代碼如下:
//oFileName為模板word路徑,打開點(diǎn)之記word模板,保證格式一致。
oDoc = oWord.Documents.Open(ref oFileName, ref oMissing, ref oReadOnly, ref oMissing, ref oMissing,ref oMissing, ref oMissing, ref oMissing, ref oMissing,ref oMissing,ref oMissing,ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);
//獲取模板word對(duì)象
word.Table nowTable = oDoc.Tables[1];
//獲取模板word文檔X行Y列的單元格的值:nowTable.Cell(X,Y).Range.Text
打開模板后,可以用程序?qū)懭雮€(gè)像控點(diǎn)的屬性信息和點(diǎn)位影像,保存成與點(diǎn)名一致的word文件即可。關(guān)鍵代碼如下:
//每個(gè)像控點(diǎn)填完信息后批量保存。
Object saveChanges=word.WdSaveOptions.wdPromptToSaveChanges;
oWord.ActiveDocument.SaveAs(ref odocpath,ref oMissing,ref oMissing,ref oMissing,ref oMissing,ref oMissing,ref oMissing,ref oMissing,ref oMissing,ref oMissing,ref oMissing,ref oMissing,ref oMissing,ref oMissing,ref oMissing,ref oMissing);
oWord.ActiveDocument.Close(ref saveChanges, ref oMissing, ref oMissing);
(2)采用ArcEngine類庫裁切點(diǎn)位影像
需要外業(yè)PDA中記錄點(diǎn)位的SHP文件,可將影像底圖按1:500比例尺裁切作為點(diǎn)位略圖,按1:1 500比例尺裁切作為概略點(diǎn)位影像,這里的影像是PDA中的影像底圖。關(guān)鍵代碼如下:
//獲取指定比例尺的影像分辨率。
pActiveView.FocusMap.MapScale = double.Parse(comboBoxScale.Text);
int pResolution = (int)pActiveView.ScreenDisplay.DisplayTransformation.Resolution;
private void ExportMapToImage(IActiveView pView, tagRECT ptagRECT, IEnvelope pEnv, string path, int Resolution)
{IExport pExporter = new ExportPNGClass();//裁切影像的主要對(duì)象
IEnvelope pEnvelope = new EnvelopeClass();
pEnvelope.PutCoords(ptagRECT.left, ptagRECT.bottom, ptagRECT.right, ptagRECT.top);
ITrackCancel pTrackCancel = new CancelTrackerClass();
IExportImage pExportType = pExporter as IExportImage;
pExportType.ImageType = esriExportImageType.esriExportImageTypeTrueColor;
pExporter.Resolution = Resolution;
pExporter.ExportFileName = path;
pExporter.PixelBounds = pEnvelope;//根據(jù)分辨率、長和寬計(jì)算出的待裁切區(qū)域的空間范圍。
//裁切影像,并輸出到指定的路徑中。
pView.Output(pExporter.StartExporting(),Resolution, ref ptagRECT, pEnv, pTrackCancel);
pExporter.FinishExporting();pExporter.Cleanup();}
(3)屬性信息讀寫
ArcEngine類庫讀取點(diǎn)位SHP文件屬性表中的點(diǎn)名和點(diǎn)之記描述;Excel類庫讀取像控點(diǎn)解算XLS文件中外業(yè)測(cè)量的控制點(diǎn)解算出的東坐標(biāo)、北坐標(biāo)和正常高。兩者文件中記錄的點(diǎn)名必須一一對(duì)應(yīng)。關(guān)鍵代碼如下:
將雙創(chuàng)教育與專業(yè)教育有機(jī)融合,全過程滲透,培養(yǎng)學(xué)生的創(chuàng)造性思維,提升學(xué)生的開拓進(jìn)取能力和鍥而不舍的態(tài)度,避免雙創(chuàng)教育和專業(yè)教育的相對(duì)獨(dú)立及脫節(jié)問題,這才是雙創(chuàng)教育的根本目的。
//oExcelName為像控點(diǎn)Excel解算文件路徑,打開它獲取每個(gè)像控點(diǎn)結(jié)算后的空間坐標(biāo)。
wb=app.Workbooks.Open(oExcelName,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,
Nothing,Nothing,Nothing);
//獲取Excel對(duì)象
excel.Worksheet s=(excel.Worksheet)wb.Worksheets[1];
//獲取Excel文件中某一單元格的值(X為Excel表格中的行號(hào),Y為Excel表格中的列號(hào)):((excel.Range)s.Cells["X", "Y"]).Text
//讀取SHP文件
IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactory();
IWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(pFolder, 0);
IFeatureWorkspace pFeatureWorkspace = pWorkspace as IFeatureWorkspace;
IFeatureClass pFC = pFeatureWorkspace.OpenFeatureClass(pFileName);
//讀取SHP文件字段值。
string pvalue = pFeat.get_Value(indexv).ToString();
(4)插入圖片
Word文檔中存儲(chǔ)的圖片包括Shape和Inlineshapes兩種,本文中使用的是Inlineshapes。嵌入文本中的圖片可以在table對(duì)象中的Range的Inlineshapes集合中獲取。圖片名稱應(yīng)與點(diǎn)名保持一致。
//圖片插入第X行第Y列
newTable.Cell(X,Y).Select();
object LinkToFile = false;
object SaveWithDocument = true;
object Anchor = WordDoc.Application.Selection.Range;
WordDoc.Application.ActiveDocument.InlineShapes.AddPicture(ImagePath , ref LinkToFile, ref SaveWithDocument, ref Anchor);
(5)內(nèi)存處理
在處理過程中發(fā)現(xiàn),雖然程序已經(jīng)關(guān)閉了Word和Excel對(duì)象,但其對(duì)應(yīng)的后臺(tái)進(jìn)程仍在運(yùn)行,隨著數(shù)據(jù)處理數(shù)量的增加,這些進(jìn)程越來越多,占用了大量的內(nèi)存,計(jì)算機(jī)反應(yīng)速度越來越慢,會(huì)出現(xiàn)黑屏現(xiàn)象。經(jīng)研究,需增加關(guān)閉Word和Excel后臺(tái)進(jìn)程的功能。關(guān)鍵代碼如下:
//關(guān)閉Word后臺(tái)進(jìn)程
Process myProcess = new Process();Process[]wordProcess = Process.GetProcessesByName("WINWORD");
Try {foreach (Process pro in wordProcess)
{IntPtr ip = pro.MainWindowHandle;
string str = pro.MainWindowTitle;
if(string.IsNullOrEmpty(str)) {pro.Kill();}}}
//關(guān)閉Excel后臺(tái)進(jìn)程
private void KillOffice(excel.Application pp)
{IntPtr t = new IntPtr(pp.Hwnd);int k = 0;
GetWindowThreadProcessId(t, out k);Process p = Process.GetProcessById(k);p.Kill();}
以點(diǎn)之記模板文件為基準(zhǔn),通過以上五步完成對(duì)點(diǎn)之記成果文件的制作,如表2所示。
表2點(diǎn)之記模板
選取甘南藏族自治州合作市縣1:1 000基礎(chǔ)測(cè)繪項(xiàng)目作為試驗(yàn)區(qū)域,對(duì)比分析使用該工具與傳統(tǒng)方法在制作無人機(jī)像控點(diǎn)之記成果上的優(yōu)劣性。
測(cè)區(qū)位于甘南高原的合作市區(qū)境內(nèi),群山環(huán)繞,平均海拔2 700 m以上。項(xiàng)目采用無人機(jī)航攝,設(shè)計(jì)地面分辨率0.1 m,航攝面積大約30 km2,共有24條航線,1 926張航片。為了達(dá)到生產(chǎn)要求,野外平均每隔3條基線布設(shè)一個(gè)像控點(diǎn),共布設(shè)了478個(gè)像控點(diǎn)。
表3為兩種方法制作相同數(shù)量點(diǎn)之記成果所使用的時(shí)間和錯(cuò)誤率統(tǒng)計(jì)情況??梢钥闯觯合啾葌鹘y(tǒng)方法,使用該工具后制作相同數(shù)量點(diǎn)之記成果時(shí)花費(fèi)的時(shí)間減少了約90%,生產(chǎn)速度提高的效果顯著;準(zhǔn)確率能達(dá)到100%,極大提高了控制成果的可靠性。
表 3 成果制作時(shí)間和錯(cuò)誤率統(tǒng)計(jì)表
本文提出了一種全新的點(diǎn)之記快速制作的方法,既有前期的規(guī)劃設(shè)計(jì)要求,又引入了PDA輔助外業(yè)測(cè)量,后期數(shù)據(jù)整理時(shí),又開發(fā)了基于Word文檔自動(dòng)化操作的處理程序,能夠?qū)崿F(xiàn)點(diǎn)之記成果的快速準(zhǔn)確高效制作。通過多種測(cè)量項(xiàng)目實(shí)踐證明,應(yīng)用該工具之后,點(diǎn)之記成果的制作效率大大提高,能在減輕數(shù)據(jù)處理人員工作量的同時(shí),提高了數(shù)據(jù)成果的準(zhǔn)確率,并且大大減少該環(huán)節(jié)時(shí)間成本的投入,完全達(dá)到了提質(zhì)增效的目的,獲得了比較好的效果,可以在基礎(chǔ)測(cè)繪、國情普查和三調(diào)等各種像控點(diǎn)數(shù)據(jù)采集項(xiàng)目中推廣應(yīng)用。