張 龍
(甘肅省地圖院,甘肅 蘭州 730000)
像控點測量是指根據像片上內業(yè)的布點方案,在實地根據影像的灰度和形狀找到并確定像控點的位置,測量并記錄該點平面坐標及其高程。
在經濟飛速發(fā)展的今天,航測數字化成圖已成為我國城市測繪的一種主要手段,而隨著航空攝影測量在各個測繪應用領域的普及,關于影像像控點的測量任務在各生產單位也日趨增多。像控點之記成果作為影像處理所需的重要參考資料,其內容的準確性及制作效率直接影響到后續(xù)生產進度,空三轉刺像控點的精度、效率,繼而影響到測繪4D產品的生產精度和效率。目前不少單位在外業(yè)像控點測量時,仍舊是由作業(yè)人員拿著紙質相片到野外根據設計的位置選點、測量,然后在相片上刺點,并在相片反面繪制點位略圖和點位說明。這樣的工作模式不僅會增加成本,還會使影像細節(jié)常常難以辨認,影響刺點精度,甚至導致返工。在接下來的成果整理時,由于點之記的內容屬性眾多,加之在測繪項目中所需像控點數量較多,人工完成點之記成果文件的制作,耗時較長且容易出錯[1-4]。
針對上面問題,本文通過引入個人數字助理終端(Personal Digital Assistant,PDA)解決像控點導航和外業(yè)刺點問題,再引入Word類庫通過C#語言編程開發(fā)了點之記自動生成的程序,能夠將文字與圖片等對象自動化寫入點之記模板并批量輸出,大大提高了工作效率和準確率。
本文介紹的方法設計流程圖如圖1所示,設計思路總共分為三個階段。
圖 1 設計流程圖
利用已有資料如像控點成果或者DLG、DOM通過影像匹配技術或者光速法平差技術將航攝區(qū)影像納入坐標系中。這一過程要盡可能的保證幾何精度,以便提高外業(yè)使用PDA導航找點的效率。然后在該影像上規(guī)劃刺點區(qū)域并命名,刺點區(qū)域應合理分布整個測區(qū),如圖2圖中綠色區(qū)域所示。最后將影像和刺點區(qū)域導入PDA外業(yè)調繪軟件中,如圖3所示。
利用PDA外業(yè)調繪軟件的導航定位和影像自由縮放功能,快速準確地找到預選刺點區(qū)域,確定好點位后便可架設儀器施測,在PDA上將該點的實際位置準確地刺在相對應的影像位置上,并將其記錄在外業(yè)調繪軟件中預先建立好的實測點SHP圖層,同時將點號、刺點者、作業(yè)日期、檢查者、所在地、點位描述等屬性信息填寫到屬性表中,可按照如表1所示的格式記錄。
圖 2 預處理影像規(guī)劃刺點區(qū)域
圖 3 PDA
表 1 點位文件屬性表
圖4為像控點之記快速制作工具的主界面,下面著重介紹開發(fā)環(huán)境和點之記生成要點。
圖 4 像控點之記快速制作工具界面
1.3.1 開發(fā)環(huán)境
采用C#語言,在VS2010平臺上添加Microsoft.Office.Interop.Word和Microsoft.Office.Interop.Excel的引用和ArcEngine10.1類庫。
1.3.2 點之記生成
點之記文件的生成主要有以下幾個關鍵點:
(1)以模板word為基礎,創(chuàng)建點之記文檔
以模板文件為基準,創(chuàng)建word文檔,其主要實現方式是對_Document類的操作,其個數要與像控點個數一致。關鍵代碼如下:
//oFileName為模板word路徑,打開點之記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對象
word.Table nowTable = oDoc.Tables[1];
//獲取模板word文檔X行Y列的單元格的值:nowTable.Cell(X,Y).Range.Text
打開模板后,可以用程序寫入個像控點的屬性信息和點位影像,保存成與點名一致的word文件即可。關鍵代碼如下:
//每個像控點填完信息后批量保存。
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類庫裁切點位影像
需要外業(yè)PDA中記錄點位的SHP文件,可將影像底圖按1:500比例尺裁切作為點位略圖,按1:1 500比例尺裁切作為概略點位影像,這里的影像是PDA中的影像底圖。關鍵代碼如下:
//獲取指定比例尺的影像分辨率。
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();//裁切影像的主要對象
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;//根據分辨率、長和寬計算出的待裁切區(qū)域的空間范圍。
//裁切影像,并輸出到指定的路徑中。
pView.Output(pExporter.StartExporting(),Resolution, ref ptagRECT, pEnv, pTrackCancel);
pExporter.FinishExporting();pExporter.Cleanup();}
(3)屬性信息讀寫
ArcEngine類庫讀取點位SHP文件屬性表中的點名和點之記描述;Excel類庫讀取像控點解算XLS文件中外業(yè)測量的控制點解算出的東坐標、北坐標和正常高。兩者文件中記錄的點名必須一一對應。關鍵代碼如下:
將雙創(chuàng)教育與專業(yè)教育有機融合,全過程滲透,培養(yǎng)學生的創(chuàng)造性思維,提升學生的開拓進取能力和鍥而不舍的態(tài)度,避免雙創(chuàng)教育和專業(yè)教育的相對獨立及脫節(jié)問題,這才是雙創(chuàng)教育的根本目的。
//oExcelName為像控點Excel解算文件路徑,打開它獲取每個像控點結算后的空間坐標。
wb=app.Workbooks.Open(oExcelName,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,
Nothing,Nothing,Nothing);
//獲取Excel對象
excel.Worksheet s=(excel.Worksheet)wb.Worksheets[1];
//獲取Excel文件中某一單元格的值(X為Excel表格中的行號,Y為Excel表格中的列號):((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文檔中存儲的圖片包括Shape和Inlineshapes兩種,本文中使用的是Inlineshapes。嵌入文本中的圖片可以在table對象中的Range的Inlineshapes集合中獲取。圖片名稱應與點名保持一致。
//圖片插入第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)內存處理
在處理過程中發(fā)現,雖然程序已經關閉了Word和Excel對象,但其對應的后臺進程仍在運行,隨著數據處理數量的增加,這些進程越來越多,占用了大量的內存,計算機反應速度越來越慢,會出現黑屏現象。經研究,需增加關閉Word和Excel后臺進程的功能。關鍵代碼如下:
//關閉Word后臺進程
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();}}}
//關閉Excel后臺進程
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();}
以點之記模板文件為基準,通過以上五步完成對點之記成果文件的制作,如表2所示。
表2點之記模板
選取甘南藏族自治州合作市縣1:1 000基礎測繪項目作為試驗區(qū)域,對比分析使用該工具與傳統方法在制作無人機像控點之記成果上的優(yōu)劣性。
測區(qū)位于甘南高原的合作市區(qū)境內,群山環(huán)繞,平均海拔2 700 m以上。項目采用無人機航攝,設計地面分辨率0.1 m,航攝面積大約30 km2,共有24條航線,1 926張航片。為了達到生產要求,野外平均每隔3條基線布設一個像控點,共布設了478個像控點。
表3為兩種方法制作相同數量點之記成果所使用的時間和錯誤率統計情況。可以看出:相比傳統方法,使用該工具后制作相同數量點之記成果時花費的時間減少了約90%,生產速度提高的效果顯著;準確率能達到100%,極大提高了控制成果的可靠性。
表 3 成果制作時間和錯誤率統計表
本文提出了一種全新的點之記快速制作的方法,既有前期的規(guī)劃設計要求,又引入了PDA輔助外業(yè)測量,后期數據整理時,又開發(fā)了基于Word文檔自動化操作的處理程序,能夠實現點之記成果的快速準確高效制作。通過多種測量項目實踐證明,應用該工具之后,點之記成果的制作效率大大提高,能在減輕數據處理人員工作量的同時,提高了數據成果的準確率,并且大大減少該環(huán)節(jié)時間成本的投入,完全達到了提質增效的目的,獲得了比較好的效果,可以在基礎測繪、國情普查和三調等各種像控點數據采集項目中推廣應用。