时间:2024-05-04
曾妮丽
(南京科技职业学院信息工程学院,南京 210048)
明晰的标识或导航系统总是能够让我们相对快速的找到目标,从而节省时间。早前一些生活场景中我们更多的是通过图文标识来指引我们的用户,帮助他们快速找寻目标。随着信息技术的发展,尤其是智能终端设备的普遍应用,利用便携式终端设备来创建导航系统,已有较多的研究并有了一些应用。
信息知识、文献数量急剧增加,使得各地方馆藏图书数量激增,一些新建成的图书馆体量也变得越来越大,通过移动终端设备导航系统来寻找图书,可以让用户查询目标书目,并根据路线图快速查找到图书的位置。
目前,大部分图书馆服务系统主要是提供常规的借阅和查询服务,用户查询到图书后虽然能很方便的获取图书的索书号等信息,但是对于不熟悉图书馆馆藏结构的用户而言,想要快速的找到目标图书,还需要再费一番周折。
图书导航系统的主要功能是,在传统检索的基础上,让读者快速地找到图书。具体包含用户的登录功能,该功能又包含管理员登录和普通用户登录。普通用户登录后,提供查询功能;同时可以为用户在馆内找到书目提供导航路径支持。管理员登录后,可以对数据库书目信息表进行操作管理,操作主要包含书目的增加、删除、查询等。
根据需求分析得到客户端需要的模块和所需的模块的简要说明(表1)。
表1 客户端主要功能设计说明
主要包含管理员登录及管理模块。管理员登录后,进入管理界面,可以选择数据库表,针对表中记录进行查询、删除、增加记录等操作。
根据需求分析得到的客户端的模块和各个模块之间执行的顺序得到如图1所示的流程图。
图1 系统功能交互
其中书目导航服务作为系统设计的主要功能部分,我们首先需要进行图书馆馆内书架陈设平面图的绘制,同时将现实书架及图书的位置与平面地图建立映射,该映射关系以数据库表的形式存储。系统通过书架的信息可以转化为地图上的位置信息。
主要业务流程是用户通过扫描或手动输入起始书架位置,其中书架信息在各书架处已经事先进行标注,有对应的提示信息;然后输入目标书目的索书号信息。起始位置可以通过地图数据库表直接转化为地图上的起始位置信息,目标书目索书号获取后先从书目数据库表获取书架信息,然后在地图数据库表里匹配映射的地图目标位置信息,最终通过A*寻路算法计算出行走的最优路径,并以路径图的方式叠加进行显示。
根据该图书书目信息查询及导航功能,三个主要数据库表设计如下:
(1)用户信息表。存储注册用户姓名、学号、手机号码、和密码等信息。
(2)图书书目信息表。该表主要存储图书馆馆藏书目的基本信息,具体包含图书ID、图书书目名称、图书索书号信息、图书所在书架信息等。
(3)导航地图数据映射信息表。该表存储地图与馆内书架布局映射数据信息,主要包含ID、书架、映射地图横向坐标、映射地图纵向坐标等字段。
项目使用SQLite数据库存储数据信息,因此首先需要在项目创建初期进行SQLite相应文件的配置。同时使用SQLite Studio数据库可视化工具,帮助我们快速方便进行数据库表的创建以及管理。同时安装SQLite4Unity3d插件,可以快速对数据库表中的信息进行操作。
客户端主要功能是用户进行传统检索和2D导航。常用的查询方式包含书名、关键词、索书号等,以下主要介绍通过书名、索书号关键词进行查询的实现过程。在进行导航功能的实现过程中,用户需要获取到起始位置的书架信息以及目标图书的索书号信息,将这些信息输入界面方可实现导航路径的生成。
3.2.1 书目信息查询功能
书目查询功能主要实现了读者可通过图书书名等信息查找整条记录信息。读者登录查询界面后,在关键词后文本框输入需要查找的图书的书名信息,单击确定后会在下面的显示区域输出涉及图书书名的相关记录的详细信息。
查询功能代码实现的过程,首先是需要在创建的数据库操作管理脚本文件中创建读取方法,此方法接收输入的关键词,通过where方法在数据库的表中找到相应的图书。语句如下:
public IEnumerable
return_connection.Table
接着创建查询脚本,需要先连接数据库,之后获取界面中读者输入的书名信息,利用Get⁃BooksNamed()函数查找信息。此时显示的所有记录,可以利用forech(){}循环语句遍历所有的记录,并且将记录依次显示出来。之后再利用To⁃Control()函数将记录以一定的方式显示。
3.2.2 2D导航路径生成功能
2D导航路径生成功能主要方便读者能够快速的在图书馆内找到所需要的书目,这一功能首先需要进行平面地图的绘制,建立与现实环境的映射关系,然后再使用A*寻路算法生成导航路径。
(1)地图的制作。平面地图的制作主要有两种方式,一种是直接绘制一张地图,直接在这张地图上进行映射。该方法直接显示地图,不能对地图进行缩放。另一种是采用瓦片系统来制作,这种方式可以实现对地图的缩放,分级显示地图效果,能够方便读者查询细节效果。本项目采用了第一种方式进行地图的设计。
在A*寻路算法中,会将地图划分为若干个小图块,并以网格的形式表示整个地图,最终在代码中会以2D数组来表示我们的地图。简单来说,绘制的地图将会由若干个图块组成,算法需要解决的就是如何从起始图块以较优路径找到目标图块,如图2所示。
图2 2D网格表示的地图
因此在进行图书馆馆藏环境平面地图的绘制时,需要思考系统地图中网格是如何划分的,也就是网格的基本像素单位。通过研究系统中A*寻路算法的网格,同时考虑系统中图片单位像素的设置。在实际的绘制中,将书架的长度绘制为160像素,宽度设置为32像素,书架的横向主要间距设置为64像素,主要间距宽度设置为32像素。这样的操作一方面为了保证和系统中A*算法的网格进行匹配,另一方面也要考虑书架的实际长宽比。
除了考虑书架具体的形状和大小外,还需要考虑图书馆实际的情况。需要了解我校图书馆书目类别以及各个类别的数量等,还需要了解书架摆放的规律等。通过走访和实地考察,学校图书馆馆藏书目基本涉及所有图书学科类别,根据我们学校的专业特点,如我们学校早前是化工专业为主,这类图书较多;另外同其他图书馆一样文学类、计算机类等类别图书数量也会比较多。在图书馆馆内实地观察得知,图书馆书架正反两面均可放置图书,每个书架分成左右5格,每格又分为上下5层;书架的放置分为左右两大组,左边是按从右到左的顺序,右边按从左往右的顺序排放。具体的绘制效果如图3所示。
图3 图书馆馆藏平面地图
(2)地图映射数据库建立。地图绘制完成后,需要建立现实中书架与系统中地图坐标的映射关系。首先确定地图中系统坐标原点的位置,将坐标原点设置在地图的中心位置(具体如图4),根据系统的设置,每个单位是32像素这样第一个书架右上角的坐标为(-10,8),其他可以依次类推。
图4 地图坐标系及书架碰撞区设置
由于每个书架又分为正反两面,均可摆放图书,同时每个书架左右分为5栏,因此每一大类的书目我们又会分为子类,摆放在对应的竖格中。以下将以A类书目在第一个书架中的摆放以及对应的映射情况为例进行介绍,如图5所示。
图5 书目A大类书架信息
图书馆馆藏图书中A大类图书数量不是很多,我们将其集中在一个书架上,书架的两面按照竖格依次存放子类A10,A20,A30,A40,A50,A60,A70,A80,A90等子类的书目,根据网格像素数及坐标原点的位置,系统中地图映射的坐标依次为A10(-10,8),A20(-11,8),A30(-12,8),A40(-13,8),A50(-14,8),A60(-10,7),A70(-11,7),A80(-12,7),A90(-13,7)。其他类别下,如果书目较少,采取同样的方式进行书架的划分以及书目的摆放,如果书目较多,则分多个书架进行摆放,每个书架每竖格书目的安排划分更加细致。
采取这样的方法,我们最终将得到整个地图的数据库映射信息表,该地图映射数据库表主要包含书架bookshelf字段(如A10),映射系统中的横向坐标位置信息bookshelf_x字段(-10),映射系统中的纵向坐标位置信息bookshelf_y。其中地图映射数据库表具体结构如下图,地图映射数据库表具体数据信息表如图6所示。
图6 图书馆地图映射数据库表中数据信息
图书书目导航路径的生成,主要采用A*寻路算法。要求读者在系统的当前位置文本框中输入自身所在的图书馆中书架的信息,然后在系统界面的查找书目后面的文本框中输入需要查找的图书的完整索书号信息,之后系统会利用A*寻路算法生成最优路径并将路径绘制在地图上。
此项功能的实现我们主要使用了AstarPath⁃finding插件。利用该插件实现这一功能的主要方法和步骤如下:
(1)场景界面的搭建。主要是将地图放置在界面中间,然后利用UI文本字段等创建搜索区域。
(2)利用A*寻路插件提供的功能进行当前位置和查询图书两个对象在场景中的基本设置。
(3)将文本框中的书架和书目信息转化为系统地图中的坐标数据。其中书目索书号转书架以及系统地图坐标信息转化的代码如下:
public InputField inputEnd;
//找寻的图书索书号输入文本框
public Transform searchBook;
//定义要找寻的图书的对象
DataService ds=new DataService("existing.db");
//创建连接数据库实例
private float End_x,End_y;
//找寻图书映射在地图上的坐标信息
void Start(){searchBook=GameObject.Find("search⁃Book").transform; //赋值查找找寻图书}
public void GetEndPosition(){
ds.inputkeyword=input End.text;
//获取找寻图书的索书号
var bookshelfSearch=ds.Get BooksNamenum();
//获取找寻图书的书架信息
IEnumerable
//通过书架从数据库地图map表中获取记录信息}
private void ToConsole(IEnumerable
//将索书号转化为书架信息
forearch(var books in bookshelfSearch){
ds.inputkeyword=books.bookshelf;}}
private void ToConsole(IEnumerable
//将书架信息转化为映射地图坐标信息
foreach(var booktile in maptile){
End_x=booktile.bookshelf_x;
End_y=booktile.bookshelf_y;
searchBook.position=new Vector3(End_x,End_y,0);}}
(4)通过地图上的坐标起始位置和结束位置,利用A*寻路算法生成路径并进行绘制。图7表示从起始位置书架A50,查询索书号为D100的图书的较优路径。
图7 书目查询导航路径生成界面
利用馆藏图书查询导航系统,能够方便学生进行图书传统检索的同时,可以在馆藏平面地图的基础上让学生按照路径图快速地找到图书,极大地方便了学生,提升了图书馆数字化水平。文中采用的导航方式,尽管是一种低成本的方式,同时也具备较高的精度,但是2D的形式对用户的空间想象力仍然有较高的要求。
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!