APP下载

基于RESTful Web API服务架构的遥感影像检索技术研究*

2021-05-29特日根

电子技术应用 2021年5期
关键词:代码检索架构

王 昊 ,特日根 ,3

(1.长光卫星技术有限公司,吉林 长春 130000;2.吉林省卫星遥感应用技术重点实验室,吉林 长春 130000;3.中国科学院 长春光学精密机械与物理研究所,吉林 长春 130000)

0 引言

随着我国对地观测卫星技术不断的发展,其空间、时间、谱段分辨率均得到大幅度的提升,影像数据呈爆炸式的增长。遥感数据本身又有属性复杂的特点,传统的管理和检索方式正面临着挑战[1]。当前主流的GIS软件对于海量的遥感数据缺乏高效的统一检索和管理功能,且无法完成互联网用户直接查询的需求,基于此种形势,研究用户通过网络检索和管理遥感影像的技术就变得尤为重要。

在传统的Web服务架构中,数据的操作和页面的渲染都由服务端负责处理,这种架构的缺点较为明显,就是拓展和维护的成本较高,开发者需要同时拥有两种差别较大的技术储备。所以后来出现了将两者解耦的架构技术——前后端分离技术:两者通过约定API和数据格式进行交互,前端仅仅关心页面的渲染,后端则负责数据的操作。自从表现层状态转化(Representational State Transfer,REST)这一概念被提出后,被广泛认可为Web应用架构设计应遵守的指导原则[2]。而RESTful是使用REST概念构造而来的,是用于规范API的一种约束,遵循其原则便可以设计出易于理解、方便调用的API。

将RESTful Web API作为主要的后端服务架构应用于改善传统遥感影像检索的体验,无论在科研还是商业化的应用中,都可以提高当前海量遥感数据的共享水平和效率。

1 面向资源的RESTful风格

区别于基于SOAP的Web服务,REST是一种面向资源的架构风格,其更简单,且贴近Web的原意。REST是目前业界更为推崇的构建新一代Web服务(或者Web API)的架构风格[3]。RESTful采用了面向资源的架构,所以在设计之初首先需要考虑的是有哪些资源可供操作。因此,所有存在于后端服务中可供操作的元素都可以被视为资源,既可以是具体的,也可以是抽象的。

RESTful使用“链接”关联相关的资源,它推荐资源采用具有可寻址性的URL来标识,一般一个RESTful Web API只关心实现一个资源的管理。它与基于SOAP的Web服务的另一个外在表现上的区别在于是否采用统一接口。REST使用HTTP协议传输资源的状态转换,一般使用GET、POST、PUT、DELETE这4种动作和资源的CRUD操作对应起来[4]。

充分利用REST的特点和设计原则,可以将服务端的业务进行前后端分离,客户端的实现变得简单起来,接口变动不再是影响升级的理由,长期来看提高了兼容性。这种架构上面的提升应用在遥感影像检索系统中,会使其更加简洁和高效。

2 RESTful Web API服务架构的SSM框架实践

2.1 相关框架

本文构建RESTful Web API使用到了SSM框架,也就是Spring、Springboot和MyBatis框架[5]。其中Spring作为核心,是一个轻量级的控制反转(Inversion of Control,IOC)和面向切面编程(Aspect Oriented Programming,AOP)的容器框架。IOC意味着将设计好的对象交给容器控制,而传统的方式是使用者在对象内部直接控制。AOP的概念类似于面向对象编程,是针对公用过程进行统一操作[6]。如想在增删改查(Create,Retrieve,Update,Delete,CRUD)操作前加入权限验证,就可以通过AOP在运行时动态的注入到CRUD前。

Spring框架的配置比较繁杂,同时他的配置需要使用者频繁的复制粘贴。Spring Boot使得Spring应用变得更轻量化[7]。MyBatis是一个轻量级的持久层框架,使用MyBatis不再需要编写JDBC代码、手工设置参数以及封装结果集。其可以通过简单的XML或注解实现配置和原始映射,并将接口和普通的Java对象映射成数据库中的记录。

使用项目构建工具maven构建一个Spring的Web项目,同时通过pom的配置依赖,可以将上述三者框架引入项目中并开始使用。

2.2 服务请求的设计与分层

在一个Web项目中,通常将一次请求的处理分为4层:Controller层、Service层、DAO(Mapper) 层和Entity(Model)层[8]。

Controller层主要负责业务逻辑和流程的控制,通过调用Service层中的接口来完成。Service层主要负责业务模块的逻辑应用设计,使用注入的DAO层对象进行功能上的组合。DAO层主要负责数据库的持久化操作。Entity层是实体层,是数据库表在项目中的实体类和包装类。各层之间的关系如图1所示。

2.3 敏捷开发

在实际的项目开发中,Springboot中有大量类型相似、写法一致的代码,所以引用lombok这个插件来自动生成和注释代码,可提高效率。同时,可以在持久层中使用MyBatis Plus框架替代MyBatis框架,因为前者在易用性和简洁性方面都更具优势。

在水利工程机电安装造价管理过程中,必须要在实行方案设计、工程设计的招投标等工作中落实造价管理思想,因此工程项目单位在设计阶段的造价管理中,可以引入竞争机制,将工程项目的机电安装工作分包给具体单位,通过这种方法让其成本管理可以达到预期水平。在实施过程中,可以先开展机电安装的招标设计方案,并在其中选择合理的设计方案,并在机电安装施工图的设计过程中通过委托或者招标等方法,确保中标单位的相关能力可以满足机电安装要求。

在前后端联调和后端自测阶段,会使用类似Postman的REST测试工具,这就需要在工具中维护开发文档和使用说明。因此引入工具swagger,可在代码中自动生成其注释,然后在项目运行中通过Web页面的方式展示接口相关文档,方便联调和测试。

3 遥感影像检索服务

3.1 元数据处理

用于检索的遥感影像数据,除原始图像外,其缩略图文件和meta文件中包含多种属性和地理信息,可用于建立检索服务。

通过编写程序对meta的XML文件进行解析,可以得到影像的相关遥感信息,如拍摄时间、位置和分辨率等,并使用结构化数据库Postgres将其存储。Postgis空间数据库可将空间地理信息(卫星影像四角点经纬度)保存为一个十六进制数格式的对象[9]。以多边形为例,将四脚点坐标转换为Postgis的Geography对象的语句如以下代码所示,POLYGON中的元素为顺时针四脚点坐标的封闭集合。

图1 服务请求的设计与分层

因空间对象同样也支持索引,所以在数据量较大的情况下,通常也需要添加索引以提高检索效率[10]。

3.2 空间地理信息关系查询

在卫星影像的元数据处理完成之后,编写可提供服务的接口,虽然通过2.3节中的敏捷开发方法能得到简单实现CRUD的代码,但是想要实现更为具体复杂的空间检索逻辑,仍然需要对生成的代码进行重写或者改写。

GeoJSON是基于JavaScript对象表示法的地理空间信息数据交换格式[11],支持下面几何类型:点、线、面、多点、多线、多面和几何集合。其格式如以下代码所示(以多边形要素为例)。

后端在接收到JSON格式的请求体后,在持久层使用Postgis的空间位置函数对数据库中的空间对象和GeoJSON表示的对象进行位置判断[12],Postgis支持的位置关系函数的功能有相交、包含和覆盖等[13]。下面以st_intersects()为例进行相交判断,关键SQL语句如以下代码所示。

SELECT * FROM TABLE

3.3 检索服务的应用场景

后端检索服务部署后,前端可以使用多种空间信息形式来检索影像。检索用的空间信息可以选择这几种形式:使用WebGIS框架进行矢量图形绘制;上传带有空间位置的shp文件;行政区域的选择;自定义区域或者对全球进行网格分隔;使用网格作为空间检索范围[14]。这几种形式最终都可以转换为GeoJSON对象,通过Web API传递给后台进行空间检索。图2和图3分别为检索服务在前端的应用场景和检索结果。

图2 多种空间检索方式的前端应用场景

图3 检索结果

4 结论

本文叙述了基于RESTful Web API服务架构的遥感影像检索关键技术和步骤,并分别从服务请求设计、敏捷开发和空间地理信息查询等方面进行了细致的介绍。可以看出,基于RESTful Web API架构的检索服务对比传统的Web架构的服务,具有更加简单、直接的优势,可以有效提高遥感影像检索系统的开发效率及检索效率。

猜你喜欢

代码检索架构
基于FPGA的RNN硬件加速架构
功能架构在电子电气架构开发中的应用和实践
创世代码
创世代码
创世代码
创世代码
WebGIS架构下的地理信息系统构建研究
专利检索中“语义”的表现
一种基于FPGA+ARM架构的μPMU实现
国际标准检索