一种点之记快速制作方法
2020-03-31张龙
张 龙
(甘肃省地图院,甘肃 兰州 730000)
像控点测量是指根据像片上内业的布点方案,在实地根据影像的灰度和形状找到并确定像控点的位置,测量并记录该点平面坐标及其高程。
在经济飞速发展的今天,航测数字化成图已成为我国城市测绘的一种主要手段,而随着航空摄影测量在各个测绘应用领域的普及,关于影像像控点的测量任务在各生产单位也日趋增多。像控点之记成果作为影像处理所需的重要参考资料,其内容的准确性及制作效率直接影响到后续生产进度,空三转刺像控点的精度、效率,继而影响到测绘4D产品的生产精度和效率。目前不少单位在外业像控点测量时,仍旧是由作业人员拿着纸质相片到野外根据设计的位置选点、测量,然后在相片上刺点,并在相片反面绘制点位略图和点位说明。这样的工作模式不仅会增加成本,还会使影像细节常常难以辨认,影响刺点精度,甚至导致返工。在接下来的成果整理时,由于点之记的内容属性众多,加之在测绘项目中所需像控点数量较多,人工完成点之记成果文件的制作,耗时较长且容易出错[1-4]。
针对上面问题,本文通过引入个人数字助理终端(Personal Digital Assistant,PDA)解决像控点导航和外业刺点问题,再引入Word类库通过C#语言编程开发了点之记自动生成的程序,能够将文字与图片等对象自动化写入点之记模板并批量输出,大大提高了工作效率和准确率。
1 设计思路
本文介绍的方法设计流程图如图1所示,设计思路总共分为三个阶段。
图 1 设计流程图
1.1 数据准备
利用已有资料如像控点成果或者DLG、DOM通过影像匹配技术或者光速法平差技术将航摄区影像纳入坐标系中。这一过程要尽可能的保证几何精度,以便提高外业使用PDA导航找点的效率。然后在该影像上规划刺点区域并命名,刺点区域应合理分布整个测区,如图2图中绿色区域所示。最后将影像和刺点区域导入PDA外业调绘软件中,如图3所示。
1.2 外业测量
利用PDA外业调绘软件的导航定位和影像自由缩放功能,快速准确地找到预选刺点区域,确定好点位后便可架设仪器施测,在PDA上将该点的实际位置准确地刺在相对应的影像位置上,并将其记录在外业调绘软件中预先建立好的实测点SHP图层,同时将点号、刺点者、作业日期、检查者、所在地、点位描述等属性信息填写到属性表中,可按照如表1所示的格式记录。
图 2 预处理影像规划刺点区域
图 3 PDA
表 1 点位文件属性表
1.3 程序处理
图4为像控点之记快速制作工具的主界面,下面着重介绍开发环境和点之记生成要点。
图 4 像控点之记快速制作工具界面
1.3.1 开发环境
采用C#语言,在VS2010平台上添加Microsoft.Office.Interop.Word和Microsoft.Office.Interop.Excel的引用和ArcEngine10.1类库。
1.3.2 点之记生成
点之记文件的生成主要有以下几个关键点:
(1)以模板word为基础,创建点之记文档
以模板文件为基准,创建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类库裁切点位影像
需要外业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;//根据分辨率、长和宽计算出的待裁切区域的空间范围。
//裁切影像,并输出到指定的路径中。
pView.Output(pExporter.StartExporting(),Resolution, ref ptagRECT, pEnv, pTrackCancel);
pExporter.FinishExporting();pExporter.Cleanup();}
(3)属性信息读写
ArcEngine类库读取点位SHP文件属性表中的点名和点之记描述;Excel类库读取像控点解算XLS文件中外业测量的控制点解算出的东坐标、北坐标和正常高。两者文件中记录的点名必须一一对应。关键代码如下:
将双创教育与专业教育有机融合,全过程渗透,培养学生的创造性思维,提升学生的开拓进取能力和锲而不舍的态度,避免双创教育和专业教育的相对独立及脱节问题,这才是双创教育的根本目的。
//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)内存处理
在处理过程中发现,虽然程序已经关闭了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点之记模板
2 应用情况
选取甘南藏族自治州合作市县1:1 000基础测绘项目作为试验区域,对比分析使用该工具与传统方法在制作无人机像控点之记成果上的优劣性。
测区位于甘南高原的合作市区境内,群山环绕,平均海拔2 700 m以上。项目采用无人机航摄,设计地面分辨率0.1 m,航摄面积大约30 km2,共有24条航线,1 926张航片。为了达到生产要求,野外平均每隔3条基线布设一个像控点,共布设了478个像控点。
表3为两种方法制作相同数量点之记成果所使用的时间和错误率统计情况。可以看出:相比传统方法,使用该工具后制作相同数量点之记成果时花费的时间减少了约90%,生产速度提高的效果显著;准确率能达到100%,极大提高了控制成果的可靠性。
表 3 成果制作时间和错误率统计表
3 结 语
本文提出了一种全新的点之记快速制作的方法,既有前期的规划设计要求,又引入了PDA辅助外业测量,后期数据整理时,又开发了基于Word文档自动化操作的处理程序,能够实现点之记成果的快速准确高效制作。通过多种测量项目实践证明,应用该工具之后,点之记成果的制作效率大大提高,能在减轻数据处理人员工作量的同时,提高了数据成果的准确率,并且大大减少该环节时间成本的投入,完全达到了提质增效的目的,获得了比较好的效果,可以在基础测绘、国情普查和三调等各种像控点数据采集项目中推广应用。