99(GeoGeo)是什么?99是一个用于编写计算机程序的脚本语言。虽然面世也有10多年了,但是估计大多数人听都没有听说过99。这也难怪,在众多的优秀编程语言中99这种解释脚本语言要想出头露面也并非易事。我在这里推荐使用99可能就会被问:99有什么特别之处?给我一个说服我使用99的理由。确实,如果是我,我也会这么问。
所以我今天必须给你一些理由,说服你使用99编写计算机程序,用99进行遥感和地理信息系统项目设计开发。为的是能够引起你的一点兴趣。
99至少有一些与众不同的地方。首先是没有什么学习成本,99和初学C语言时的一些语法规则一样,简单学过C语言的开始部分或者参加过计算机等级考试的C语言基础就可以开始使用99编程了,基本语法差不多一样。比方说,有些人学习C语言学到一定程度就放弃了,就在你放弃继续学习C语言的这个进度点上,就已经足够你使用99进行编程了。或者直接这样说,虽然C没学会,但是学会了99,开个玩笑啊。99毕竟是大量功能的函数罗列,所以更像一个脚本,容易学。但是容易学不是理由,有用才是。
其次是上千的遥感和GIS数据处理功能都是以函数方式提供的,查到对应函数直接调用就可以,和RSD平台一样多的功能并且用参数方式调用比交互菜单更方便灵活。还有就是99支持集群计算,理论上可以接入任意多的节点机。尤其是在节点机运行一个小小的服务程序就可以加入到RSD-99集群计算的大家庭,并不用像一些其它并行项目需要一样搭建复杂的计算平台。
另外99非常不同于通常的系统设计,理论上99是多个服务器服务于一个客户端(集群项目也多是如此),这和云计算的概念是反过来的,云计算是云服务器服务于大量客户端的。99特别设计为支持大规模数据,一个10亿像素以上显示动作可能会导致上G甚至数G的数据刷新,送去云主机计算再返回客户端是不现实的。
99的使用也非常简单,在RSD平台有一个浮动窗口,窗口中写上代码一键就可以开始运行。。。99还有很多优秀特征(也有其固有的缺点),容后慢慢介绍。
不过,今天这里给大家介绍的都不是上面这些,而是一个用99设计驱动的EDA(Extensive Display Array),一个大规模显示阵列的功能。
还需要说一下EDA。人们经常可以看见墙面上或者大屏幕上显示的图形图像。我们从观察者角度,可以将墙上的大图分为远视和近视两种观察方式。影院、大电视、大屏投影等都是远视的,必须离开一定距离才能获得较好的观察效果,近看可能就是一些粗糙的像元点。例如现在普遍应用的会议室拼接屏,贴近仔细观察就是一些粗糙的像元点。近视观察的例子较少,一个例子是贴在墙上的大地图,人们在看地图时不但要靠近观察甚至还要拿放大镜仔细观察。一个要离开观察,一个要靠近观察,这就是远视屏和近视屏的本质差异。
EDA的设计目标是近视大屏,极度追求详尽的空间细节。虽然由于硬件条件限制等原因点距极小的近视大屏还没有普及,但是,由于是拼接方式,设计单屏(这里单屏指拼接后的大屏,而单个的显示器称为显示单元,下同)显示10亿像素像手机屏幕一样细点距的屏幕墙已经没有任何技术障碍。这种超高分辨率的大屏没有普及的原因只是因为没有相应的软件。而今天在这里推荐给大家使用的99就是已经实现了这种对近视大屏驱动的软件技术。
从全屏幕墙显示4K像素扩展到单屏显示10亿像素的意义就不用我过多强调了。例如有需求要求三维实景城市的空间分辨率达到5cm。这样一个10km×10km的城市范围就会有400亿像素(40G),对应的数据可以轻松达到T级,这时如果用4K显示装置只能观察到一个极小的局部,可谓是“管中窥豹”。只是这个“管”从竹管演变成显像管再到液晶屏再到拼接屏,本质上仍然是“管”,视角有限,可视面积极小。因此人们常将显示目标做成一级一级的“金字塔”,转换成粗分辨率的显示目标逐级显示。但做成金字塔以后就已经与“5cm”的分辨率目标没有关系了,丢失了空间细节。所以,单屏显示最大像元数一直是人们孜孜以求的目标。
EDA基于我们自行开发的RSD平台和99语言。RSD和99由于是多年陆续开发孰先孰后已经无从知道,现在二者耦合度较高,将其逐渐解耦合也成了一项重要任务。99可以承担RSD的二次开发任务,其函数库不仅包含了RSD交互功能还有更多的类似其它计算机语言的基本功能。RSD平台加99语言这两部分的工作量是非常庞大的,即便在经过多次求精优化以后代码量仍然惊人。比方我意外透露代码量立即会遭到斩钉截铁的不相信,不过我喜欢被质疑。J
分布式计算是99的重要功能,EDA也是依赖于此。99的分布式计算也是消息驱动(类似MPI),可以动态配置节点机任务。一个ProcessCall("…") 函数就可以在指定/缺省的节点机上启动一个过程进程。或者一个带process 关键字的本地函数在指定/缺省的节点机上启动一个过程线程。这部分内容我在后面陆续介绍。
回到EDA,既然99分布式计算有若干计算节点,给每个节点机配备1~n个显示单元不就是显示阵列了吗?确是如此。是EDA借用了99集群计算的节点机还是99集群计算借用了EDA的图形终端进行并行计算就无关紧要了。
为配合大规模地学数据处理,这些节点机特意被设计成二维排列,就是M×N(行×列)个节点机。每个节点机的显示单元如果是n个,那么EDA的总显示单元数即为M×N×n。
大规模地学数据处理将节点机设计成二维阵列有独到的好处,当你使用数据的体量达到G级(甚至T级)频繁更新的时候,你就会发现传统的数据处理流程大多都会失灵了。RSD有一个TFS(Tile File System)会将这些庞大的数据分割成二维数据块由二维节点机分而治之。这个TFS对一些RSD用户已经不生疏了,在RSD交互平台上可能很多同学已经有所接触。TFS在程序员视角是可寻址的数据空间,RSD在后台将网络上的分布式数据不断自动映射到TFS。
事实上,99这种由一个节点机驱动几个显示单元的方式只是EDA的一部分。EDA对这些庞大的数据集有更加精巧有效的设计。对应分布式大数据集,99映射了一个大规模的虚拟DC(Device Context)代表所有显示单元的设备上下文,图形图像显示、3D渲染等都在这个虚拟DC下进行。在一些99示例代码中可以看到一些使用虚拟DC的例子。从程序员视角可以直接在此设备场境工作以减少复杂性。
另外99是我们自己做的,可以定制。但是如果你使用python编程,你想让人家给你改改python增减点功能恐怕是很难吧?
可能有人会问了,你云山雾罩说了这么多是不是真的?:)。这个确实是真的,看看我开发的RSD平台的广泛应用就会知道我所言不虚。这些工作绝大多数都是原创而非集成,或许也能发表几篇小文或者申请几个专利啥的。可是我觉得花时间和精力推进这些系统的完善和真正实现实际应用是更为紧迫的任务,其它的就等等吧。自问是不是真的只是开个玩笑,后面有EDA演示的例子,将这些代码复制到RSD平台的脚本窗口,一运行,真假虚实原形毕露。 ;)
对于从事开发和研究项目的同仁,既便你希望自己开发做大屏幕支持系统,99也是个有用的参照系统。不过独立开发从系统到应用,工作量不是一般的大,没有10年8年的浸淫不容易完善。无论如何,三维实景城市已经在实际推进,高分辨率大范围项目一定会有大规模显示阵列的需求,旧的“管中窥豹”式的系统设计正在过时,是时候将应用项目转移到大规模显示阵列了。欢迎有希望从事这方面研究的研发实验室、公司等单位合作。
对于遥感和地信领域的广大用户,我想也应该计划淘汰4K单屏显示设备了,一个有10亿像素的屏幕墙会极大扩展的你的视野。你一定会喜欢投射在屏幕墙上的数据处理结果而不是大家都弯腰围聚观察一个显示器。还有,即便你的图像已经投射在屏幕墙上,远视屏毫米级甚至5、6mm像元点距的效果与0.2mm甚至0.01mm(手机)的近视屏幕效果可是不能同日而语。
我还建议在校的同学们了解一下大规模显示阵列的原理,选择正确的技术发展方向对年轻人的未来发展简直太重要了。我经常警告一些同学不要涉足某些不值得你一生为之钻研的研究方向,为此很多人对我心生不满,跑题了 :)!无论如何,多了解一下99语言程序设计,是为技多不压身也。具有大规模数据处理能力和大规模数据表达编程能力,你的身价一定会得到提升。J
如果将EDA技术外延一下,除遥感地信领域外,设计制图、医药医疗、结构生物、高分子等领域都有广泛用途。适应各个领域超级大屏应用的软件都要重写?想想这是多大的潜力?顺便,甚至文化艺术领域都有迫切需求。曾经和摄影界人士交谈得知摄影界早已实现亿像素。可是亿像素的摄影作品根本无法实现电子展示。缩小到全局显示失掉了作品超高清特性,与手机拍摄无疑。只显示局部细节又等于拍了一张局部小照片,亿像素作品就是一个寂寞,等于没有。可是如果将其显示在有10亿像素的EDA上,宏观展现全部,细节纤毫毕现,一定会达到震撼的显示效果。
又跑题了:),言归正传。那么为什么要用99编程?大规模显示阵列EDA或许就是诱惑你使用99编程的原因之一吧。
还有,虽然看起来99以及EDA实现技术比较复杂,但是使用就非常简单了,而且不需要复杂的环境配置和部署。同学们用课桌上的一两台电脑就可以体验大规模图像处理的工作过程。讲话完毕,宴会开始 :)。请看下面例子。
第一步,准备硬件。准备一台主机,两台节点机。设置IPv4固定地址,ping一下连接正常。有4台节点机更好,有条件的用显示器支架将4个显示器排列称两行两列,模拟拼接屏。实际上4个节点机和256个(这里限制了4个)节点机是一样的,主机广播消息大家收到都一样工作。没有两台节点机一台也可以,一台节点机也没有光用一个主机也可以。比方你只有一台笔记本电脑,也可以既当主机又当节点机。
第二步,安装RSD软件。下载RSD SetupRsd3.2.8.rar,软件下载地址 RSD老用户都比较熟悉了,但是也请你重新下载一遍新版RSD。 解压后安装RSD,老用户都使用多年了,知道如何安装。新用户参考一下安装说明。
第三步,安装节点机服务程序。上述RSD SetupRsd3.2.8.rar解压后,有一个Setup99Server201.msi文件。将这个文件拷贝到所有节点机。双击运行,开始安装服务程序。安装后出现一个GGServer.exe图标,点击后服务程序就开始侦听。不需要时关闭窗口,服务程序结束。
第四步,编辑节点机PI地址文件。解压文件中还有一个 IPAddresses00.ips 文件。这是一个文本文件,可以直接用记事本编辑。打开后发现有4行。
1
2
192.168.1.11
192.168.1.103
第1行表示节点机的行数,第2行是列数,这里表示是1行2列共2台节点机。后面的2行是逐个对应节点机的IP地址,先列后行排列。根据你的节点机的台数和IP地址编辑这个文件。如果只有一台主机没有节点机就输入1行1列和本机的IP地址。编辑保存后将该文件放入RSD的.\RsdMis目录。
第五步,下载示例代码和演示数据。99拼接屏示例代码.rar,地址“https://pan.baidu.com/s/1LXI4_NTkYXo2wQackxhmrw?pwd=yn8s。下载后解压放入目录D:\99Codes。也可以不放入此目录,但是需要在 99-EDA拼接屏示例-Master端.c文件中修改一下对应的Slave端代码存放地址。
第六步,运行。启动RSD,打开脚本浮动窗口,在脚本窗口工具条中点打开图标,打开文件99-EDA拼接屏示例-Master端.c。确定各个节点机上的服务程序在正常运行(第三步)。再点击工具条上的运行小三角。会提示输入一个TIFF文件,这时输入解压的文件中的 “99_Sample_10.tif”,或者也可以输入其它TIFF文件。打开后可以看见TIFF图像被投射到节点机上,也就是多屏拼接的屏幕墙上的显示效果。
注意只加载Master端主程序,Slave端代码由Master主程序自动读取。代码的含义在后面详细介绍。
|