国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Unity的館藏書目導(dǎo)航系統(tǒng)設(shè)計研究

2021-12-29 03:55:34曾妮麗
現(xiàn)代計算機 2021年31期
關(guān)鍵詞:書架書目圖書

曾妮麗

(南京科技職業(yè)學(xué)院信息工程學(xué)院,南京 210048)

0 引言

明晰的標識或?qū)Ш较到y(tǒng)總是能夠讓我們相對快速的找到目標,從而節(jié)省時間。早前一些生活場景中我們更多的是通過圖文標識來指引我們的用戶,幫助他們快速找尋目標。隨著信息技術(shù)的發(fā)展,尤其是智能終端設(shè)備的普遍應(yīng)用,利用便攜式終端設(shè)備來創(chuàng)建導(dǎo)航系統(tǒng),已有較多的研究并有了一些應(yīng)用。

信息知識、文獻數(shù)量急劇增加,使得各地方館藏圖書數(shù)量激增,一些新建成的圖書館體量也變得越來越大,通過移動終端設(shè)備導(dǎo)航系統(tǒng)來尋找圖書,可以讓用戶查詢目標書目,并根據(jù)路線圖快速查找到圖書的位置。

1 系統(tǒng)需求分析與設(shè)計

目前,大部分圖書館服務(wù)系統(tǒng)主要是提供常規(guī)的借閱和查詢服務(wù),用戶查詢到圖書后雖然能很方便的獲取圖書的索書號等信息,但是對于不熟悉圖書館館藏結(jié)構(gòu)的用戶而言,想要快速的找到目標圖書,還需要再費一番周折。

圖書導(dǎo)航系統(tǒng)的主要功能是,在傳統(tǒng)檢索的基礎(chǔ)上,讓讀者快速地找到圖書。具體包含用戶的登錄功能,該功能又包含管理員登錄和普通用戶登錄。普通用戶登錄后,提供查詢功能;同時可以為用戶在館內(nèi)找到書目提供導(dǎo)航路徑支持。管理員登錄后,可以對數(shù)據(jù)庫書目信息表進行操作管理,操作主要包含書目的增加、刪除、查詢等。

1.1 客戶端模塊

根據(jù)需求分析得到客戶端需要的模塊和所需的模塊的簡要說明(表1)。

表1 客戶端主要功能設(shè)計說明

1.2 后臺管理模塊

主要包含管理員登錄及管理模塊。管理員登錄后,進入管理界面,可以選擇數(shù)據(jù)庫表,針對表中記錄進行查詢、刪除、增加記錄等操作。

1.3 系統(tǒng)功能模塊交互方式

根據(jù)需求分析得到的客戶端的模塊和各個模塊之間執(zhí)行的順序得到如圖1所示的流程圖。

圖1 系統(tǒng)功能交互

其中書目導(dǎo)航服務(wù)作為系統(tǒng)設(shè)計的主要功能部分,我們首先需要進行圖書館館內(nèi)書架陳設(shè)平面圖的繪制,同時將現(xiàn)實書架及圖書的位置與平面地圖建立映射,該映射關(guān)系以數(shù)據(jù)庫表的形式存儲。系統(tǒng)通過書架的信息可以轉(zhuǎn)化為地圖上的位置信息。

主要業(yè)務(wù)流程是用戶通過掃描或手動輸入起始書架位置,其中書架信息在各書架處已經(jīng)事先進行標注,有對應(yīng)的提示信息;然后輸入目標書目的索書號信息。起始位置可以通過地圖數(shù)據(jù)庫表直接轉(zhuǎn)化為地圖上的起始位置信息,目標書目索書號獲取后先從書目數(shù)據(jù)庫表獲取書架信息,然后在地圖數(shù)據(jù)庫表里匹配映射的地圖目標位置信息,最終通過A*尋路算法計算出行走的最優(yōu)路徑,并以路徑圖的方式疊加進行顯示。

2 數(shù)據(jù)庫設(shè)計

根據(jù)該圖書書目信息查詢及導(dǎo)航功能,三個主要數(shù)據(jù)庫表設(shè)計如下:

(1)用戶信息表。存儲注冊用戶姓名、學(xué)號、手機號碼、和密碼等信息。

(2)圖書書目信息表。該表主要存儲圖書館館藏書目的基本信息,具體包含圖書ID、圖書書目名稱、圖書索書號信息、圖書所在書架信息等。

(3)導(dǎo)航地圖數(shù)據(jù)映射信息表。該表存儲地圖與館內(nèi)書架布局映射數(shù)據(jù)信息,主要包含ID、書架、映射地圖橫向坐標、映射地圖縱向坐標等字段。

3 系統(tǒng)主要功能實現(xiàn)過程及關(guān)鍵技術(shù)

3.1 開發(fā)環(huán)境的配置

項目使用SQLite數(shù)據(jù)庫存儲數(shù)據(jù)信息,因此首先需要在項目創(chuàng)建初期進行SQLite相應(yīng)文件的配置。同時使用SQLite Studio數(shù)據(jù)庫可視化工具,幫助我們快速方便進行數(shù)據(jù)庫表的創(chuàng)建以及管理。同時安裝SQLite4Unity3d插件,可以快速對數(shù)據(jù)庫表中的信息進行操作。

3.2 客戶端主要功能的實現(xiàn)

客戶端主要功能是用戶進行傳統(tǒng)檢索和2D導(dǎo)航。常用的查詢方式包含書名、關(guān)鍵詞、索書號等,以下主要介紹通過書名、索書號關(guān)鍵詞進行查詢的實現(xiàn)過程。在進行導(dǎo)航功能的實現(xiàn)過程中,用戶需要獲取到起始位置的書架信息以及目標圖書的索書號信息,將這些信息輸入界面方可實現(xiàn)導(dǎo)航路徑的生成。

3.2.1 書目信息查詢功能

書目查詢功能主要實現(xiàn)了讀者可通過圖書書名等信息查找整條記錄信息。讀者登錄查詢界面后,在關(guān)鍵詞后文本框輸入需要查找的圖書的書名信息,單擊確定后會在下面的顯示區(qū)域輸出涉及圖書書名的相關(guān)記錄的詳細信息。

查詢功能代碼實現(xiàn)的過程,首先是需要在創(chuàng)建的數(shù)據(jù)庫操作管理腳本文件中創(chuàng)建讀取方法,此方法接收輸入的關(guān)鍵詞,通過where方法在數(shù)據(jù)庫的表中找到相應(yīng)的圖書。語句如下:

public IEnumerableGetBooksNamed(){

return_connection.Table().where(x=>x.name==inputkeyword);}

接著創(chuàng)建查詢腳本,需要先連接數(shù)據(jù)庫,之后獲取界面中讀者輸入的書名信息,利用Get?BooksNamed()函數(shù)查找信息。此時顯示的所有記錄,可以利用forech(){}循環(huán)語句遍歷所有的記錄,并且將記錄依次顯示出來。之后再利用To?Control()函數(shù)將記錄以一定的方式顯示。

3.2.2 2D導(dǎo)航路徑生成功能

2D導(dǎo)航路徑生成功能主要方便讀者能夠快速的在圖書館內(nèi)找到所需要的書目,這一功能首先需要進行平面地圖的繪制,建立與現(xiàn)實環(huán)境的映射關(guān)系,然后再使用A*尋路算法生成導(dǎo)航路徑。

(1)地圖的制作。平面地圖的制作主要有兩種方式,一種是直接繪制一張地圖,直接在這張地圖上進行映射。該方法直接顯示地圖,不能對地圖進行縮放。另一種是采用瓦片系統(tǒng)來制作,這種方式可以實現(xiàn)對地圖的縮放,分級顯示地圖效果,能夠方便讀者查詢細節(jié)效果。本項目采用了第一種方式進行地圖的設(shè)計。

在A*尋路算法中,會將地圖劃分為若干個小圖塊,并以網(wǎng)格的形式表示整個地圖,最終在代碼中會以2D數(shù)組來表示我們的地圖。簡單來說,繪制的地圖將會由若干個圖塊組成,算法需要解決的就是如何從起始圖塊以較優(yōu)路徑找到目標圖塊,如圖2所示。

圖2 2D網(wǎng)格表示的地圖

因此在進行圖書館館藏環(huán)境平面地圖的繪制時,需要思考系統(tǒng)地圖中網(wǎng)格是如何劃分的,也就是網(wǎng)格的基本像素單位。通過研究系統(tǒng)中A*尋路算法的網(wǎng)格,同時考慮系統(tǒng)中圖片單位像素的設(shè)置。在實際的繪制中,將書架的長度繪制為160像素,寬度設(shè)置為32像素,書架的橫向主要間距設(shè)置為64像素,主要間距寬度設(shè)置為32像素。這樣的操作一方面為了保證和系統(tǒng)中A*算法的網(wǎng)格進行匹配,另一方面也要考慮書架的實際長寬比。

除了考慮書架具體的形狀和大小外,還需要考慮圖書館實際的情況。需要了解我校圖書館書目類別以及各個類別的數(shù)量等,還需要了解書架擺放的規(guī)律等。通過走訪和實地考察,學(xué)校圖書館館藏書目基本涉及所有圖書學(xué)科類別,根據(jù)我們學(xué)校的專業(yè)特點,如我們學(xué)校早前是化工專業(yè)為主,這類圖書較多;另外同其他圖書館一樣文學(xué)類、計算機類等類別圖書數(shù)量也會比較多。在圖書館館內(nèi)實地觀察得知,圖書館書架正反兩面均可放置圖書,每個書架分成左右5格,每格又分為上下5層;書架的放置分為左右兩大組,左邊是按從右到左的順序,右邊按從左往右的順序排放。具體的繪制效果如圖3所示。

圖3 圖書館館藏平面地圖

(2)地圖映射數(shù)據(jù)庫建立。地圖繪制完成后,需要建立現(xiàn)實中書架與系統(tǒng)中地圖坐標的映射關(guān)系。首先確定地圖中系統(tǒng)坐標原點的位置,將坐標原點設(shè)置在地圖的中心位置(具體如圖4),根據(jù)系統(tǒng)的設(shè)置,每個單位是32像素這樣第一個書架右上角的坐標為(-10,8),其他可以依次類推。

圖4 地圖坐標系及書架碰撞區(qū)設(shè)置

由于每個書架又分為正反兩面,均可擺放圖書,同時每個書架左右分為5欄,因此每一大類的書目我們又會分為子類,擺放在對應(yīng)的豎格中。以下將以A類書目在第一個書架中的擺放以及對應(yīng)的映射情況為例進行介紹,如圖5所示。

圖5 書目A大類書架信息

圖書館館藏圖書中A大類圖書數(shù)量不是很多,我們將其集中在一個書架上,書架的兩面按照豎格依次存放子類A10,A20,A30,A40,A50,A60,A70,A80,A90等子類的書目,根據(jù)網(wǎng)格像素數(shù)及坐標原點的位置,系統(tǒng)中地圖映射的坐標依次為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)。其他類別下,如果書目較少,采取同樣的方式進行書架的劃分以及書目的擺放,如果書目較多,則分多個書架進行擺放,每個書架每豎格書目的安排劃分更加細致。

采取這樣的方法,我們最終將得到整個地圖的數(shù)據(jù)庫映射信息表,該地圖映射數(shù)據(jù)庫表主要包含書架bookshelf字段(如A10),映射系統(tǒng)中的橫向坐標位置信息bookshelf_x字段(-10),映射系統(tǒng)中的縱向坐標位置信息bookshelf_y。其中地圖映射數(shù)據(jù)庫表具體結(jié)構(gòu)如下圖,地圖映射數(shù)據(jù)庫表具體數(shù)據(jù)信息表如圖6所示。

圖6 圖書館地圖映射數(shù)據(jù)庫表中數(shù)據(jù)信息

4 A*尋路及導(dǎo)航路徑的生成

圖書書目導(dǎo)航路徑的生成,主要采用A*尋路算法。要求讀者在系統(tǒng)的當(dāng)前位置文本框中輸入自身所在的圖書館中書架的信息,然后在系統(tǒng)界面的查找書目后面的文本框中輸入需要查找的圖書的完整索書號信息,之后系統(tǒng)會利用A*尋路算法生成最優(yōu)路徑并將路徑繪制在地圖上。

此項功能的實現(xiàn)我們主要使用了AstarPath?finding插件。利用該插件實現(xiàn)這一功能的主要方法和步驟如下:

(1)場景界面的搭建。主要是將地圖放置在界面中間,然后利用UI文本字段等創(chuàng)建搜索區(qū)域。

(2)利用A*尋路插件提供的功能進行當(dāng)前位置和查詢圖書兩個對象在場景中的基本設(shè)置。

(3)將文本框中的書架和書目信息轉(zhuǎn)化為系統(tǒng)地圖中的坐標數(shù)據(jù)。其中書目索書號轉(zhuǎn)書架以及系統(tǒng)地圖坐標信息轉(zhuǎn)化的代碼如下:

public InputField inputEnd;

//找尋的圖書索書號輸入文本框

public Transform searchBook;

//定義要找尋的圖書的對象

DataService ds=new DataService("existing.db");

//創(chuàng)建連接數(shù)據(jù)庫實例

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();

//獲取找尋圖書的書架信息

IEnumerablemaptile=ds.GetMapBookshelf();

//通過書架從數(shù)據(jù)庫地圖map表中獲取記錄信息}

private void ToConsole(IEnumerablebookshelf?Search){

//將索書號轉(zhuǎn)化為書架信息

forearch(var books in bookshelfSearch){

ds.inputkeyword=books.bookshelf;}}

private void ToConsole(IEnumerablemaptile){

//將書架信息轉(zhuǎn)化為映射地圖坐標信息

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)通過地圖上的坐標起始位置和結(jié)束位置,利用A*尋路算法生成路徑并進行繪制。圖7表示從起始位置書架A50,查詢索書號為D100的圖書的較優(yōu)路徑。

圖7 書目查詢導(dǎo)航路徑生成界面

4 結(jié)語

利用館藏圖書查詢導(dǎo)航系統(tǒng),能夠方便學(xué)生進行圖書傳統(tǒng)檢索的同時,可以在館藏平面地圖的基礎(chǔ)上讓學(xué)生按照路徑圖快速地找到圖書,極大地方便了學(xué)生,提升了圖書館數(shù)字化水平。文中采用的導(dǎo)航方式,盡管是一種低成本的方式,同時也具備較高的精度,但是2D的形式對用戶的空間想象力仍然有較高的要求。

猜你喜歡
書架書目圖書
推薦書目《初春之城》
都市人(2022年3期)2022-04-27 00:44:57
圖書推薦
南風(fēng)(2020年22期)2020-09-15 07:47:08
歡迎來到圖書借閱角
班里有個圖書角
新書架
中國火炬(2015年7期)2015-07-31 17:40:10
新書架
中國火炬(2015年11期)2015-07-31 17:28:57
新書架
中國火炬(2015年6期)2015-07-31 17:25:56
本刊郵購書目
桌上書架
《全國新書目》2009年1月薦書榜
全國新書目(2009年1期)2009-04-13 06:58:24
通辽市| 阜康市| 南昌县| 绍兴县| 张家港市| 灵丘县| 文安县| 苍梧县| 巫溪县| 建阳市| 广西| 万年县| 大理市| 集安市| 三明市| 吉安县| 巴中市| 都匀市| 大理市| 永昌县| 永寿县| 且末县| 乌鲁木齐县| 石首市| 瑞金市| 盱眙县| 治县。| 定远县| 灵武市| 泸溪县| 新巴尔虎右旗| 武宁县| 广南县| 女性| 南漳县| 张家川| 凤凰县| 临桂县| 黄冈市| 五常市| 怀安县|