APP下载

一种面向空间分析的开源GeoServer服务自动发布与切片方法

2022-03-24陈建华甘先霞张洪吉

物探化探计算技术 2022年1期
关键词:栅格切片客户端

刘 旭, 赵 铮, 陈建华, 甘先霞, 张洪吉

(1.成都理工大学 地球物理学院,成都 610059;2.四川省自然资源科学研究院,成都 610015)

0 引言

随着互联网技术的快速发展,地理信息系统(Geographic Information System,GIS)与互联网相结合形成的网络地理信息系统(WebGIS),为地理信息数据发布、共享和交流协作提供了良好的基础[1]。WebGIS已经融入到人们的日常生活和工作中,在城市交通、环境检测[2]、地质灾害等领域都有着良好地应用。但是目前WebGIS还存在着如下问题:①空间分析能力较弱,特别是涉及遥感图像计算的空间分析;②地理信息数据发布步骤复杂,需要繁琐的发布流程。

空间分析作为地理信息系统的核心功能,目前WebGIS已经实现了一些基本的基于矢量的空间分析功能,包括路径规划、缓冲区分析、空间查询[3]等,但是对于遥感图像的空间分析还较为薄弱。遥感图像具有数据量大,像素点多的特点,导致遥感图像处理和分析通常运算复杂,占用大量运行内存,在过去服务器性能较低时,遥感图像分析通常在桌面端完成,其运算速度取决于硬件的好坏。云计算的出现提高了服务器性能,其通过网络集中计算资源并按需调配,达到节约经济地利用计算资源的目的,能够快速地实现大规模计算,其效率远高于本地进行遥感图像分析。因此笔者针对在服务器开展遥感图像的空间分析进行了研究。

GIS服务用于处理客户端读取GIS数据的请求[4],将地理信息数据发布在服务器是WebGIS客户端访问数据的基础,对于服务器的空间分析结果也应该能够发布到服务器以便于其共享。但空间分析结果具有动态变化的特点,其数据参数随着输入数据不同而不同,因此需要一种能自动发布空间分析结果的方法。

GIS服务一般由GIS服务发布工具提供,GIS服务发布工具主要有ESRI的ArcGIS Server和开源的GeoServer等[5]。ArcGIS Server能够提供数据访问服务,以及有限的空间分析服务,但是价格昂贵,并且由于是商业软件,功能扩展能力较弱;GeoServer能够提供数据访问服务,空间分析服务能力较弱,但具有软件开源、扩展能力强[6]的优点。

基于上述需求,笔者面向开源GIS服务器GeoServer,在其基础上扩展空间分析能力,为客户端提供动态空间分析服务,实现全自动将动态空间分析结果发布为GeoServer服务,并为了加速数据访问速度在此基础上对发布的数据自动切片。

1 服务自动发布与切片方法

1.1 服务器端体系结构

服务端体系结构见图1,服务端提供了两种服务:①处理基本业务逻辑和执行空间分析功能的空间分析服务;②基于GeoServer的GIS服务。

图1 体系结构设计图

空间分析服务是由基本的Web服务器提供,负责处理普通的数据管理业务和执行空间分析功能。空间分析服务能够接受客户端的HTTP请求,并将处理结果返回给客户端;能够调用GeoServer实现对分析数据的自动发布和自动切片;可以读写数据库及数据文件。客户端向空间分析服务发送空间分析操作请求以及需要分析的数据,空间分析服务根据操作请求调用相应的处理函数,实现对数据的空间分析,并将空间分析的结果根据其类型分别存入数据库和数据文件。在空间分析完成后,空间分析服务自动将结果文件的路径等参数信息利用HTTP请求的方法,发送给GeoServer服务,调度GeoServer发布结果数据并将其切片。

GeoServer服务由开源GIS服务器GeoServer提供,负责各种地理信息数据发布。GeoServer服务只能接收客户端对于获取地理信息数据的请求;不能接收客户端上传的地理信息文件;不能接收客户端发送的服务发布请求,发布服务只能通过空间分析服务调用;只具备读取数据文件的权限,不能修改数据文件。

1.2 空间分析服务

由于GeoServer服务并不具有空间分析能力,因此需要一个单独的提供空间分析的服务,它能够接收客户端请求和客户端上传的各种地理信息数据,将上传的数据按照一定的组织结构有序地存放在服务器端的文件系统中,并根据客户端请求对文件执行相应的空间分析功能,得到分析后的结果。

空间分析又分为基于栅格的空间分析和基于矢量的空间分析。基于栅格的空间分析可以通过由开源地理空间数据抽象库(Geospatial Data Abstraction Library,GDAL)编码实现,其是一个在X/MIT协议下的开源栅格空间数据转换库,具有开源、高效、跨平台的优点,能够读取、写入、转换、处理大多数栅格格式文件[7]。基于矢量的空间分析服务,可以通过开源地理信息数据库PostGIS或GDAL的子项目OGR(OpenGIS Simple Features Reference Implementation)库实现。综上GDAL库相比PostGIS的空间分析功能更加强大,兼容栅格数据和矢量数据,因此我们使用Python作为基础编程语言,结合GDAL实现了一系列的空间分析功能,其中包括栅格计算、线性变换、栅格分类、栅格图像生成、空间插值等。

论文中针对于栅格数据的空间分析,具体的方法为:使用GDAL提取栅格数据波段信息,其主要代码如下:

band= self.dataset.GetRasterBand(nband)

data = band.ReadAsArray(0, 0, self.cols, self.rows)

其中第一行是获取波段对象;第二行是获取波段信息,ReadAsArray将读取的波段信息存入数组。

在获取两幅影像的波段信息之后,对两幅影像的DN值求差,但值得注意的是由于图像DN值没有负数,因此求差结果需要去绝对值,其主要代码如下:

data = ds.getRasterInformation(n)[0:ds.computeRows(),0:db.computeCols()-computoffset(ds,db)[0]]

result=abs(data2-data1)

其中,第一行主要是读取影像的DN值,第二行是获取到两幅影像的DN值之后对其求差并取绝对值。

1.3 GeoServer服务自动发布

GeoServer是遵循OpenGIS规范实现的开源地图服务器,其允许用户对地理数据(包括矢量数据和栅格数据)进行更新、删除及插入操作,支持WMTS、WCS、WFS和WMS服务,方便用户发布地图数据并共享地理空间信息[8]。GeoServer是轻量级的GIS服务器,其自带的功能满足多数Web地图应用开发,且与前端框架OpenLayers集成较好[9],但是其空间分析功能相对ArcGIS Server较弱,因此需要扩展实现空间分析功能,以增强GeoServer的分析能力。

假定GeoServer已经在计算机中配置完成,GeoServer没有可视化用户界面,其会构建一个服务,通过浏览器访问IP地址对GeoServer进行管理。GeoServer手动发布服务的步骤为通过浏览器访问GeoServer提供的IP地址,选择自己需要发布的服务类型,然后填写对应的参数,包括基本资源信息、坐标参考系统、覆盖参数、波段计算细节等。参数配置过程繁琐,且需要根据数据信息选择参数,这些配置的选择要求发布人员具有一定的专业知识,限制了GeoServer发布服务的灵活性。

为了提高GeoServer发布服务的灵活性、简化相关人工工作步骤,空间分析动态生成结果的自动发布显得十分迫切。GeoServer提供了一种REST接口,用户可以通过这个接口检索有关实例的信息并进行配置更改,使用REST接口接收HTTP请求,可以达成配置GeoServer服务的目的,无需再通过浏览器访问Web管理界面。REST接口实质上对应一个HTTP地址,通过get、post、put、delete四种不同的请求方式达成对GeoServer实例的读取、增加、修改、删除的目的。REST接口为自动化发布GeoServer服务提供了基础。

在空间分析服务接收到客户端发送的请求数据以及发送过来的文件后,从请求数据中解析出需要执行的空间分析功能,调用对应的封装好的空间分析接口,对数据进行空间分析,得到空间分析结果并保存到文件系统中。由于发布服务需要用到发布数据的相关参数信息,包括基本资源信息、坐标参考系统、边界矩形等,因此需要利用GDAL读取待发布数据的对应基本信息。

以读取影像数据的参数为例,获取包括影像的波段信息、影像数据范围以及影像仿射变换矩阵,在获取到参数之后,按照一定组织规律生成影像的配置文件。在生成配置文件之后,根据具体的发布需求,在配置文件中加上服务配置参数,包括影像背景值、发布后影像的数据格式等,从而完成对配置文件的设置。

将配置文件绑定到HTTP请求中,向GeoServer REST接口发送请求,在发布成功之后GeoServer服务会将发送结果返回给空间分析服务,最后将结果返回给客户端,以栅格计算为例,自动发布服务流程图如图2所示。

图2 自动发布流程图

以空间分析服务向GeoServer REST接口发送新增图层的方法为例,利用Python发送请求的主要代码如下:

ps=requests.post(url=url,auth=('admin','geoserver'),data=open(coveragepath+'/coverage.xml').read(), headers=headers)

该方法使用post请求向Geoserver发送数据,其中url参数指定了Geoserver服务器的IP地址,auth参数指定了Geoserver服务器的用户名和密码;data参数指定了配置文件的路径以及名称;headers参数指定了http请求的头部信息。

1.4 GeoServer自动切片

地理信息数据往往包含大量信息,因此地理信息数据占用的空间都是比较大的,如果要一次性加载全部信息,会导致服务器压力大、客户端等待时间长、客户端使用卡顿的问题。因此,可以将较大的地理信息数据采用金字塔结构(四叉树)进行组织和存储,切分成大量不同级别、分辨率不同的小幅数据,每提高一个浏览级别,就用四张更高分辨率的数据代替较低分辨率的一张数据。用户在客户端查看数据的时,一次仅对少量需要的数据进行请求,服务器发送响应数据即可满足用户需求,这样减少了网络数据量,可大大减少系统响应时间,改善用户体验。

GeoServer提供了对数据切片的功能,在客户端加载数据时,GeoServer在实时的对数据进行切片,切片之后再根据请求范围返回对应的数据,实时切片的方式增加了服务器的响应时间。如果能在服务发布之后自动将服务数据切片,在访问之前预先完成切片将减小服务响应时间。

由于GeoServer REST接口并不提供执行切片功能的接口,因此之前使用REST接口自动发布的方式在自动切片部分不再适用。对于已经发布的数据,可以通过访问GeoServer提供的对应IP地址在可视化页面中交互式的操作数据(图3)。在对数据进行切片时,需要选择切片级数范围、数据的坐标系、切片后的数据格式等,参数设置完成后,点击“Submit”按钮开始对数据进行切片。

图3 自动切片可视化界面

分析发现,GeoServer管理界面的URL固定,以IP地址加问号加图层ID构成,并且每次访问的页面保持一致且易于登录,因此可以通过Web自动化测试工具(Web爬虫)完成自动切片。Web自动化测试工具通过编写脚本代码,在执行脚本时,自动生成一个模拟的浏览器,并访问给定的URL,按照脚本代码做出点击、输入、打开、验证等操作。

因此,采用Python语言结合自动化测试工具Selenium,通过添加Geoserver用户名密码代理验证,代理验证通过后,通过驱动模拟浏览器自动访问服务地址,将相应的参数通过代码自动填入到对应的位置,如图3所示的参数中Grid Set设置切片的格网方案、Format设置切片的格式、Zoom start和Zoom stop设置切片的级别范围、Bounding box设置了切片的边界范围。在参数设置完成后,模拟点击“Submit”按钮实现数据自动切片,自动切片流程如图4所示。

图4 自动切片流程图

2 实例与分析

针对河流水质动态监测的现实需求,以开源GeoServer为基础,结合上述提出的GeoServer服务自动化方法,设计、实现了一套面向Web的高分遥感河流水质动态监测系统。

高分遥感河流水质动态监测系统通过对相应河流区域遥感图像进行反演之后,将任两期反演结果栅格图像上传到服务器,在服务器进行差异性分析,从而判断水质变化,具体流程如下。

对原始多期国产高分遥感数据作处理,包括辐射定标、大气校正、正射校正、图像配准、图像融合、图像拼接、图像裁剪、水体提取。依据水体影像不同波段组合,反演出单波段水质指标浓度(包括叶绿素a、总磷、总氮、高锰酸盐、悬浮物及透明度等)。由各指标反演结果计算其营养状态指数,并计算综合营养状态指数。将所有反演结果、营养状态指数、综合营养状态指数导出为包含浓度信息的栅格图像数据。

客户端将任两期高分遥感河流水质反演结果栅格图像上传到服务器,并选择自动发布、自动切片的相关参数。

利用空间分析服务对客户端上传的两期结果图像依次进行如下计算:

1)栅格计算,获取两期河流水质反演结果图像的DN值,对两者作求差计算处理。

2)线性变换,将DN值按一定的比例对数据进行线性变化。

3)栅格分类,按照一定的分类规则对生成的差异栅格图像进行分类、着色。

4)栅格图像生成,在分类完成后生成新的差异栅格图像并保存至文件系统。

在差异栅格图像生成基础上,读取其文件系统中栅格图像相关参数信息(坐标系统、边界矩形等一系列相关信息),调用根据GeoServer服务自动发布原理构建的自动发布接口,完成栅格图像发布,并根据参数决定是否自动切片,在执行完成后服务器向客户端返回发布结果(图5)。

图5 差异栅格图像自动生成、自动发布、自动切片流程图

基于上述原理,实现的面向Web的高分遥感河流水质动态监测系统整体效果(图6),差异栅格图像在自动切片后不同显示级别的效果(图7)。

图6 系统整体效果

图7 切片显示栅格图像效果

系统实现差异栅格图像自动生成、自动发布、自动切片功能,取代复杂的传统发布过程,具有显著的省时、省力、自动化等特点。客户端访问服务,加载差异栅格图像并叠加栅格影像数据更加真实的反应了河流水质变化(图7),图7(a)~图7(d)为四个不同展示级别的结果,四个图像具有不同的分辨率。表明:将图像自动发布、自动切片是提升WebGIS服务质量的有效途径。

3 结论

这里提出了一种面向空间分析的开源GeoServer服务自动发布与自动切片方法,运用Python与GDAL构建空间分析服务,弥补了GeoServer空间分析能力不足的弱点,针对空间分析结果动态变化的特点,实现了结果的自动服务发布、自动切片。该方法显著提升了基于GeoServer的WebGIS系统的灵活性,解决了传统GIS服务需要专业人士手动发布、手动配置,无法动态发布等问题。将该方法运用到面向Web的高分遥感河流水质动态监测系统,能够有效实现差异栅格图像动态生成并对其自动发布、自动切片,实现了水质监测结果快速生成、持久保存、快速加载显示的目的。

猜你喜欢

栅格切片客户端
你的手机安装了多少个客户端
“人民网+客户端”推出数据新闻
——稳就业、惠民生,“数”读十年成绩单
栅格环境下基于开阔视野蚁群的机器人路径规划
超声速栅格舵/弹身干扰特性数值模拟与试验研究
新局势下5G网络切片技术的强化思考
5G网络切片技术增强研究
网络切片标准分析与发展现状
反恐防暴机器人运动控制系统设计
浅析5G网络切片安全
基于栅格地图中激光数据与单目相机数据融合的车辆环境感知技术研究