本申請(qǐng)涉及地圖生成技術(shù)領(lǐng)域,具體涉及一種生成室內(nèi)地圖的方法及裝置。
背景技術(shù):
室內(nèi)地圖一般指大型室內(nèi)建筑的內(nèi)部地圖,例如商場、機(jī)場等建筑物內(nèi)的內(nèi)部地圖,用戶通過移動(dòng)終端查看室內(nèi)地圖可以在建筑物內(nèi)部仍能較為便捷地找到要去的店鋪、衛(wèi)生間、電梯、休息區(qū)、出入口等。
在現(xiàn)有技術(shù)中,室內(nèi)地圖一般都是以比較簡單的平面區(qū)塊信息進(jìn)行顯示,展示的室內(nèi)場景與真實(shí)環(huán)境差異較大,因此,在現(xiàn)有技術(shù)中缺乏一種展示室內(nèi)真實(shí)場景的室內(nèi)地圖生成方法。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本申請(qǐng)?zhí)峁┮环N生成室內(nèi)地圖的方法及裝置,以解決現(xiàn)有技術(shù)中存在的室內(nèi)地圖與真實(shí)環(huán)境差異較大的技術(shù)問題。
為解決上述問題,本申請(qǐng)?zhí)峁┑募夹g(shù)方案如下:
一種生成室內(nèi)地圖的方法,所述方法應(yīng)用于服務(wù)器,所述方法包括:
獲取建筑物的第一三維模型;
將所述第一三維模型進(jìn)行壓縮,生成第二三維模型;
確定所述建筑物在平面地圖上的位置信息,將所述建筑物在平面地圖上的位置信息與所述第二三維模型對(duì)應(yīng)保存,以使終端在接收到包括所述建筑物在平面地圖上的位置信息的室內(nèi)地圖查詢指令時(shí),獲取所述第二三維模型進(jìn)行所述建筑物的室內(nèi)地圖展示。
相應(yīng)的,所述將所述第一三維模型進(jìn)行壓縮,生成第二三維模型,包括:
從所述第一三維模型中提取室內(nèi)地圖所需的三維建筑信息,獲得第三三維模型;
將所述第三三維模型的各個(gè)頂點(diǎn)坐標(biāo)進(jìn)行壓縮,生成第二三維模型。
相應(yīng)的,所述將所述第三三維模型的各個(gè)頂點(diǎn)坐標(biāo)進(jìn)行壓縮,生成第二三維模型,包括:
計(jì)算所述第三三維模型的包圍球,將所述包圍球的中心點(diǎn)作為所述第三三維模型的中心點(diǎn);
分別計(jì)算所述第三三維模型的各個(gè)頂點(diǎn)坐標(biāo)與所述第三三維模型的中心點(diǎn)坐標(biāo)之差,獲得所述第三三維模型的各個(gè)頂點(diǎn)與所述第三三維模型的中心點(diǎn)之間的相對(duì)坐標(biāo);
將各個(gè)所述相對(duì)坐標(biāo)除以所述包圍球半徑后乘以預(yù)設(shè)固定值,獲得各個(gè)轉(zhuǎn)換后的頂點(diǎn)坐標(biāo),各個(gè)所述轉(zhuǎn)換后的頂點(diǎn)坐標(biāo)的坐標(biāo)值均為整數(shù)型;
各個(gè)所述轉(zhuǎn)換后的頂點(diǎn)坐標(biāo)作為第二三維模型的頂點(diǎn)坐標(biāo),生成所述第二三維模型。
一種生成室內(nèi)地圖的方法,所述方法應(yīng)用于終端,所述方法包括:
接收包括建筑物在平面地圖上的位置信息的室內(nèi)地圖查詢指令;
從服務(wù)器獲取所述位置信息對(duì)應(yīng)的第二三維模型;
將所述第二三維模型進(jìn)行壓縮還原,生成第三三維模型;
對(duì)所述第三三維模型進(jìn)行渲染顯示,以進(jìn)行所述建筑物的室內(nèi)地圖展示。
相應(yīng)的,所述將所述第二三維模型進(jìn)行壓縮還原,生成第三三維模型,包括:
將所述第二三維模型的頂點(diǎn)坐標(biāo)除以預(yù)設(shè)固定值后乘以包圍球半徑,獲得第三三維模型的各個(gè)頂點(diǎn)與所述第三三維模型的中心點(diǎn)之間的相對(duì)坐標(biāo);
將各個(gè)所述相對(duì)坐標(biāo)加上所述第三三維模型的中心點(diǎn)坐標(biāo),獲得所述第三三維模型的各個(gè)頂點(diǎn)坐標(biāo),生成所述第三三維模型,所述預(yù)設(shè)固定值、所述包圍球半徑以及所述第三三維模型的中心點(diǎn)坐標(biāo)是從所述服務(wù)器獲取的。
一種生成室內(nèi)地圖的裝置,所述裝置應(yīng)用于服務(wù)器,所述裝置包括:
獲取單元,用于獲取建筑物的第一三維模型;
壓縮單元,用于將所述第一三維模型進(jìn)行壓縮,生成第二三維模型;
保存單元,用于確定所述建筑物在平面地圖上的位置信息,將所述建筑物在平面地圖上的位置信息與所述第二三維模型對(duì)應(yīng)保存,以使終端在接收到包括所述建筑物在平面地圖上的位置信息的室內(nèi)地圖查詢指令時(shí),獲取所述第二三維模型進(jìn)行所述建筑物的室內(nèi)地圖展示。
相應(yīng)的,所述壓縮單元包括:
提取子單元,用于從所述第一三維模型中提取室內(nèi)地圖所需的三維建筑信息,獲得第三三維模型;
壓縮子單元,用于將所述第三三維模型的各個(gè)頂點(diǎn)坐標(biāo)進(jìn)行壓縮,生成第二三維模型。
相應(yīng)的,所述壓縮子單元包括:
第一計(jì)算子單元,用于計(jì)算所述第三三維模型的包圍球,將所述包圍球的中心點(diǎn)作為所述第三三維模型的中心點(diǎn);
第二計(jì)算子單元,用于分別計(jì)算所述第三三維模型的各個(gè)頂點(diǎn)坐標(biāo)與所述第三三維模型的中心點(diǎn)坐標(biāo)之差,獲得所述第三三維模型的各個(gè)頂點(diǎn)與所述第三三維模型的中心點(diǎn)之間的相對(duì)坐標(biāo);
第三計(jì)算子單元,用于將各個(gè)所述相對(duì)坐標(biāo)除以所述包圍球半徑后乘以預(yù)設(shè)固定值,獲得各個(gè)轉(zhuǎn)換后的頂點(diǎn)坐標(biāo),各個(gè)所述轉(zhuǎn)換后的頂點(diǎn)坐標(biāo)的坐標(biāo)值均為整數(shù)型;
生成子單元,用于各個(gè)所述轉(zhuǎn)換后的頂點(diǎn)坐標(biāo)作為第二三維模型的頂點(diǎn)坐標(biāo),生成所述第二三維模型。
一種生成室內(nèi)地圖的裝置,所述裝置應(yīng)用于終端,所述裝置包括:
接收單元,用于接收包括建筑物在平面地圖上的位置信息的室內(nèi)地圖查詢指令;
獲取單元,用于從服務(wù)器獲取所述位置信息對(duì)應(yīng)的第二三維模型;
壓縮還原單元,用于將所述第二三維模型進(jìn)行壓縮還原,生成第三三維模型;
顯示單元,用于對(duì)所述第三三維模型進(jìn)行渲染顯示,以進(jìn)行所述建筑物的室內(nèi)地圖展示。
相應(yīng)的,所述壓縮還原單元包括:
第一計(jì)算子單元,用于將所述第二三維模型的頂點(diǎn)坐標(biāo)除以預(yù)設(shè)固定值后乘以包圍球半徑,獲得第三三維模型的各個(gè)頂點(diǎn)與所述第三三維模型的中心點(diǎn)之間的相對(duì)坐標(biāo);
第二計(jì)算子單元,用于將各個(gè)所述相對(duì)坐標(biāo)加上所述第三三維模型的中心點(diǎn)坐標(biāo),獲得所述第三三維模型的各個(gè)頂點(diǎn)坐標(biāo),生成所述第三三維模型,所述預(yù)設(shè)固定值、所述包圍球半徑以及所述第三三維模型的中心點(diǎn)坐標(biāo)是從所述服務(wù)器獲取的。
由此可見,本申請(qǐng)實(shí)施例具有如下有益效果:
本申請(qǐng)實(shí)施例通過獲取建筑物的三維模型,將三維模型進(jìn)行壓縮后與該建筑物在平面地圖上的位置信息對(duì)應(yīng)保存,在使用終端的用戶需要顯示該建筑物的室內(nèi)地圖時(shí),終端可以加載壓縮后的三維模型作為室內(nèi)地圖顯示,由于三維模型包括的建筑物室內(nèi)信息非常全面,可以以更多的顯示要素展示室內(nèi)場景,從而使室內(nèi)地圖的展示與建筑物內(nèi)部的真實(shí)環(huán)境較為接近。
附圖說明
圖1為現(xiàn)有技術(shù)中室內(nèi)地圖的示意圖;
圖2為本申請(qǐng)實(shí)施例提供的生成室內(nèi)地圖的方法實(shí)施例一的流程圖;
圖3為本申請(qǐng)實(shí)施例提供的生成第二三維模型的方法實(shí)施例的流程圖;
圖4為本申請(qǐng)實(shí)施例中三維模型的示意圖;
圖5為本申請(qǐng)實(shí)施例提供的生成室內(nèi)地圖的方法實(shí)施例二的流程圖;
圖6為本申請(qǐng)實(shí)施例提供的生成室內(nèi)地圖的裝置實(shí)施例一的示意圖;
圖7為本申請(qǐng)實(shí)施例提供的生成室內(nèi)地圖的裝置實(shí)施例二的示意圖。
具體實(shí)施方式
為使本申請(qǐng)的上述目的、特征和優(yōu)點(diǎn)能夠更加明顯易懂,下面結(jié)合附圖和具體實(shí)施方式對(duì)本申請(qǐng)實(shí)施例作進(jìn)一步詳細(xì)的說明。
參見圖1所示,是現(xiàn)有技術(shù)中室內(nèi)地圖的示意圖,可以看出現(xiàn)有的室內(nèi)地圖均是以比較簡單的平面區(qū)塊信息進(jìn)行顯示,例如地圖中某個(gè)區(qū)塊對(duì)應(yīng)于某個(gè)店鋪等等,該室內(nèi)地圖的展示與室內(nèi)真實(shí)環(huán)境差異較大。為此,本申請(qǐng)實(shí)施例中提供了一種生成室內(nèi)地圖的方法及裝置,利用建筑物的三維模型以生成該建筑物的室內(nèi)地圖,由于三維模型包括的建筑物室內(nèi)信息非常全面,可以以更多的顯示要素展示室內(nèi)場景,從而使室內(nèi)地圖的展示與建筑物內(nèi)部的真實(shí)環(huán)境較為接近。
參見圖2所示,示出了本申請(qǐng)實(shí)施例中提供的生成室內(nèi)地圖的方法實(shí)施例一,本實(shí)施例可以應(yīng)用于服務(wù)器,可以包括以下步驟:
步驟201:獲取建筑物的第一三維模型。
建筑物的三維模型包括了通過數(shù)字信息仿真模擬建筑物所具有的真實(shí)信息,三維模型可以為bim(建筑信息模型,buildinginformationmodeling,或者建筑信息管理,buildinginformationmanagement,)或者3dmax模型等各類三維模型。其中,bim是以建筑工程項(xiàng)目的各項(xiàng)相關(guān)信息數(shù)據(jù)作為基礎(chǔ),建立起三維的建筑模型。由于三維模型中建筑物的室內(nèi)信息非常詳盡,因此本實(shí)施例選擇建筑物的三維模型作為室內(nèi)地圖的數(shù)據(jù)來源。
在本實(shí)施例中,建筑物的第一三維模型可以理解為建筑物的原始三維模型,該第一三維模型所包括的信息較多,數(shù)據(jù)量較大,由于室內(nèi)地圖一般是由終端進(jìn)行顯示,而終端的處理能力有限,因此需要對(duì)第一三維模型進(jìn)行壓縮處理。
步驟202:將第一三維模型進(jìn)行壓縮,生成第二三維模型。
在本實(shí)施例中,第二三維模型可以理解為對(duì)第一三維模型進(jìn)行壓縮后的模型,第二三維模型數(shù)據(jù)量相較于第一三維模型數(shù)據(jù)量小,適合在終端進(jìn)行加載渲染,以進(jìn)行室內(nèi)地圖的展示。
在本申請(qǐng)一些可能的實(shí)現(xiàn)方式中,將第一三維模型進(jìn)行壓縮,生成第二三維模型的具體實(shí)現(xiàn)可以包括:從第一三維模型中提取室內(nèi)地圖所需的三維建筑信息,獲得第三三維模型;將第三三維模型的各個(gè)頂點(diǎn)坐標(biāo)進(jìn)行壓縮,生成第二三維模型。
在第一三維模型中可能還包括一些不用于顯示室內(nèi)地圖的要素,例如建筑物內(nèi)關(guān)于管線的相關(guān)信息,因此首先需要將第一三維模型進(jìn)行輕量化處理,可以把第一三維模型中室內(nèi)地圖不需要的三維建筑信息刪除,將第一三維模型中的其他信息提取為室內(nèi)地圖所需的三維建筑信息,獲得第三三維模型,或者直接提取室內(nèi)地圖所需的三維建筑信息,獲得第三三維模型。室內(nèi)地圖所需的三維建筑信息的類型或者室內(nèi)地圖不需要的三維建筑信息的類型均可以預(yù)先設(shè)置,例如預(yù)先將管線信息設(shè)置為室內(nèi)地圖不需要的三維建筑信息,則可以在第一三維模型中將管線信息刪除。
對(duì)于得到的第三三維模型,可以利用本申請(qǐng)實(shí)施例中提供的頂點(diǎn)壓縮算法將第三三維模型的各個(gè)頂點(diǎn)坐標(biāo)進(jìn)行壓縮,生成第二三維模型,關(guān)于頂點(diǎn)壓縮算法的相關(guān)說明可以參見后續(xù)實(shí)施例。
步驟203:確定建筑物在平面地圖上的位置信息,將建筑物在平面地圖上的位置信息與第二三維模型對(duì)應(yīng)保存,以使終端在接收到包括建筑物在平面地圖上的位置信息的室內(nèi)地圖查詢指令時(shí),獲取第二三維模型進(jìn)行建筑物的室內(nèi)地圖展示。
建筑物在平面地圖上的位置信息可以為gps(全球定位系統(tǒng),globalpositioningsystem)坐標(biāo),也可以為平面地圖的區(qū)塊信息,以標(biāo)識(shí)該建筑物在平面地圖上的位置。將建筑物在平面地圖上的位置信息與第二三維模型對(duì)應(yīng)保存,同時(shí)可以保存該位置信息具有室內(nèi)地圖的標(biāo)識(shí),以使用戶在終端查看該位置信息對(duì)應(yīng)的平面地圖時(shí),可以獲知該位置信息存在室內(nèi)地圖,可以對(duì)該位置信息的室內(nèi)地圖進(jìn)行查看。在終端接收到包括建筑物在平面地圖上的位置信息的室內(nèi)地圖查詢指令時(shí),可以獲取該位置信息對(duì)應(yīng)的第二三維模型進(jìn)行室內(nèi)地圖展示。在實(shí)際應(yīng)用中,平面地圖可以使用擴(kuò)展的geojson格式,并以http(超文本傳輸協(xié)議,hypertexttransferprotocol)服務(wù)的形式將平面地圖以及第二三維模型放置于服務(wù)器之上,供終端使用,其中g(shù)eojson是一種對(duì)各種地理數(shù)據(jù)結(jié)構(gòu)進(jìn)行編碼的格式。
這樣,本申請(qǐng)實(shí)施例通過獲取建筑物的三維模型,將三維模型進(jìn)行壓縮后與該建筑物在平面地圖上的位置信息對(duì)應(yīng)保存,在使用終端的用戶需要顯示該建筑物的室內(nèi)地圖時(shí),終端可以加載壓縮后的三維模型作為室內(nèi)地圖顯示,由于三維模型包括的建筑物室內(nèi)信息非常全面,可以以更多的顯示要素展示室內(nèi)場景,從而使室內(nèi)地圖的展示與建筑物內(nèi)部的真實(shí)環(huán)境較為接近。
參見圖3所示,在本申請(qǐng)一些可能的實(shí)現(xiàn)方式中,在上述實(shí)施例中提到可以利用頂點(diǎn)壓縮算法將第三三維模型的各個(gè)頂點(diǎn)坐標(biāo)進(jìn)行壓縮,生成第二三維模型,其具體實(shí)現(xiàn)可以包括以下步驟:
步驟301:計(jì)算第三三維模型的包圍球,將包圍球的中心點(diǎn)作為第三三維模型的中心點(diǎn)。
在本實(shí)施例中,為了壓縮第三三維模型,主要考慮將第三三維模型的頂點(diǎn)坐標(biāo)數(shù)據(jù)進(jìn)行壓縮,例如將頂點(diǎn)坐標(biāo)中每個(gè)方向的坐標(biāo)值由采用32位浮點(diǎn)型數(shù)據(jù)保存壓縮為采用16位整數(shù)型數(shù)據(jù)保存,從而頂點(diǎn)坐標(biāo)的數(shù)據(jù)量可以減少一半。
在壓縮過程中,首先計(jì)算第三三維模型的包圍球,第三三維模型的包圍球可以理解為第三三維模型的最小外切球,包圍球可以以包圍球的中心點(diǎn)坐標(biāo)+包圍球半徑的形式表示。在實(shí)際應(yīng)用中可以利用第三三維模型中各個(gè)頂點(diǎn)坐標(biāo)計(jì)算第三三維模型的包圍球,具體的,可以遍歷第三三維模型中各個(gè)頂點(diǎn)坐標(biāo),確定各個(gè)頂點(diǎn)坐標(biāo)中的最大坐標(biāo)和最小坐標(biāo),最大坐標(biāo)和最小坐標(biāo)對(duì)應(yīng)于所有頂點(diǎn)中的兩個(gè)頂點(diǎn),將這兩個(gè)頂點(diǎn)連線的中點(diǎn)作為包圍球的中心點(diǎn),將這兩個(gè)頂點(diǎn)之間的距離作為包圍球直徑,包圍球直徑的一半即為包圍球半徑。其中,頂點(diǎn)坐標(biāo)可以以(x,y,z)的形式表示,x可以表示橫軸坐標(biāo)值,y可以表示垂直軸坐標(biāo)值,z可以表示縱軸坐標(biāo)值。
參見圖4所示,以一個(gè)正方體三維模型為例,進(jìn)行相關(guān)計(jì)算的說明。
假設(shè)該正方體三維模型的8個(gè)頂點(diǎn)坐標(biāo)分別為:
(-100,-100,-100)、
(-100,100,-100)、
(100,100,-100)、
(100,-100,-100)、
(-100,-100,100)、
(-100,100,100)、
(100,100,100)、
(100,-100,100)
在本例中,為了便于書寫,將各個(gè)頂點(diǎn)坐標(biāo)中三個(gè)方向的坐標(biāo)值小數(shù)點(diǎn)后的位數(shù)均省略,實(shí)際上在壓縮前以上各個(gè)坐標(biāo)值均可以以32位浮點(diǎn)型數(shù)據(jù)進(jìn)行保存。則在這些頂點(diǎn)坐標(biāo)中,坐標(biāo)(-100,-100,-100)為最小坐標(biāo),坐標(biāo)(100,100,100)為最大坐標(biāo),將這兩個(gè)頂點(diǎn)連線的中點(diǎn)作為包圍球的中心點(diǎn),將這兩個(gè)頂點(diǎn)之間的距離作為包圍球直徑,則此正方體三維模型的包圍球中心點(diǎn)坐標(biāo)為(0,0,0),也即此正方體三維模型的中心點(diǎn)坐標(biāo)為(0,0,0),包圍球半徑為141,則計(jì)算得到了該正方體三維模型的包圍球。
步驟302:分別計(jì)算第三三維模型的各個(gè)頂點(diǎn)坐標(biāo)與第三三維模型的中心點(diǎn)坐標(biāo)之差,獲得第三三維模型的各個(gè)頂點(diǎn)與第三三維模型的中心點(diǎn)之間的相對(duì)坐標(biāo)。
將第三三維模型的每個(gè)頂點(diǎn)坐標(biāo)分別與第三三維模型的中心點(diǎn)坐標(biāo)做差,得到的一組坐標(biāo)為第三三維模型的各個(gè)頂點(diǎn)與第三三維模型的中心點(diǎn)之間的相對(duì)坐標(biāo)。
繼續(xù)以上述舉例為例,將正方體三維模型的各個(gè)頂點(diǎn)坐標(biāo)分別減去正方體三維模型的中心點(diǎn)坐標(biāo)(0,0,0),得到該正方體三維模型的各個(gè)頂點(diǎn)與正方體三維模型的中心點(diǎn)之間的相對(duì)坐標(biāo)為:
(-100,-100,-100)、
(-100,100,-100)、
(100,100,-100)、
(100,-100,-100)、
(-100,-100,100)、
(-100,100,100)、
(100,100,100)、
(100,-100,100)
步驟303:將各個(gè)相對(duì)坐標(biāo)除以包圍球半徑后乘以預(yù)設(shè)固定值,獲得各個(gè)轉(zhuǎn)換后的頂點(diǎn)坐標(biāo),各個(gè)轉(zhuǎn)換后的頂點(diǎn)坐標(biāo)的坐標(biāo)值均為整數(shù)型。
為了將各個(gè)頂點(diǎn)坐標(biāo)轉(zhuǎn)換為整數(shù)型而不損失太多精度,可以將得到的各個(gè)相對(duì)坐標(biāo)除以包圍球半徑后乘以預(yù)設(shè)固定值,預(yù)設(shè)固定值為一整數(shù)值可以根據(jù)經(jīng)驗(yàn)設(shè)定,得到的一組坐標(biāo)即為轉(zhuǎn)換后的一組頂點(diǎn)坐標(biāo)。
繼續(xù)以上述舉例為例進(jìn)行計(jì)算,將該正方體三維模型的各個(gè)頂點(diǎn)與正方體三維模型的中心點(diǎn)之間的相對(duì)坐標(biāo)分別除以包圍球半徑141可以得到如下的一組坐標(biāo):
(-0.70921985,-0.70921985,-0.70921985)、
(-0.70921985,0.70921985,-0.70921985)、
(0.70921985,0.70921985,-0.70921985)、
(0.70921985,-0.70921985,-0.70921985)、
(-0.70921985,-0.70921985,0.70921985)、
(-0.70921985,0.70921985,0.70921985)、
(0.70921985,0.70921985,0.70921985)、
(0.70921985,-0.70921985,0.70921985)
然后乘以預(yù)設(shè)固定值轉(zhuǎn)換為整數(shù)型,例如預(yù)設(shè)固定值為8192,則得到的一組轉(zhuǎn)換后的頂點(diǎn)坐標(biāo)為:
(-5810,-5810,-5810)、
(-5810,5810,-5810)、
(5810,5810,-5810)、
(5810,-5810,-5810)、
(-5810,-5810,5810)、
(-5810,5810,5810)、
(5810,5810,5810)、
(5810,-5810,5810)
步驟304:各個(gè)轉(zhuǎn)換后的頂點(diǎn)坐標(biāo)作為第二三維模型的頂點(diǎn)坐標(biāo),生成第二三維模型。
各個(gè)轉(zhuǎn)換后的頂點(diǎn)坐標(biāo)可以作為第二三維模型的頂點(diǎn)坐標(biāo),同時(shí)第三三維模型各個(gè)頂點(diǎn)的紋理坐標(biāo)以及法向坐標(biāo)可以繼續(xù)作為第二三維模型各個(gè)頂點(diǎn)的紋理坐標(biāo)以及法向坐標(biāo),從而生成第二三維模型。另外,預(yù)設(shè)固定值、第三三維模型的中心點(diǎn)坐標(biāo)以及包圍球半徑需要保存在第二三維模型中,以便于終端在獲得第二三維模型后進(jìn)行壓縮還原處理。這樣以整數(shù)型存儲(chǔ)的三維模型是以字節(jié)對(duì)齊的方式來存儲(chǔ),比用為使用字節(jié)對(duì)齊方式來存儲(chǔ)浮點(diǎn)型三維模型數(shù)據(jù)量更小,更容易壓縮。
轉(zhuǎn)換后的頂點(diǎn)坐標(biāo)為整數(shù)型,從理論上來講,會(huì)比原來使用32位浮點(diǎn)型數(shù)據(jù)損失一定的精度,但其16位整數(shù)型的精度可以全部用于表達(dá)與模型尺寸相關(guān)的數(shù)值。也就是模型越大其精度越小,模型越小精度越高,其精度可以達(dá)到模型尺寸的萬分之二以內(nèi)。以上例中的正方體三維模型為例,對(duì)轉(zhuǎn)換后的頂點(diǎn)坐標(biāo)進(jìn)行逆操作,即除以預(yù)設(shè)固定值(例如8192),再乘以包圍球半徑141,加上正方體三維模型的中心點(diǎn)(0,0,0)可還原正方體三維模型的原有頂點(diǎn)坐標(biāo)為:
(-100.001220703125,-100.001220703125,-100.001220703125)、
(-100.001220703125,100.001220703125,-100.001220703125)、
(100.001220703125,100.001220703125,-100.001220703125)、
(100.001220703125,-100.001220703125,-100.001220703125)、
(-100.001220703125,-100.001220703125,100.001220703125)、
(-100.001220703125,100.001220703125,100.001220703125)、
(100.001220703125,100.001220703125,100.001220703125)、
(100.001220703125,-100.001220703125,100.001220703125)
由此可見損失的精度在模型尺寸的萬分之2以內(nèi),損失非常輕微,對(duì)終端渲染影響很小。而且,模型損失的精度與模型的尺寸有關(guān),不會(huì)因?yàn)槟P偷某叽鐦O端而導(dǎo)致模型的外形畸變。
這樣,本申請(qǐng)實(shí)施例對(duì)建筑物的三維模型進(jìn)行了充分壓縮,數(shù)據(jù)量較小,同時(shí)其存儲(chǔ)數(shù)據(jù)為字節(jié)對(duì)齊非常利于在數(shù)據(jù)傳輸時(shí)使用通用數(shù)據(jù)傳輸算法進(jìn)行壓縮傳輸,從而壓縮后的三維模型在由服務(wù)器到終端的傳輸過程中傳輸速度較快,并且壓縮后的頂點(diǎn)坐標(biāo)可以直接進(jìn)行顯示渲染而無須特殊處理,以使室內(nèi)地圖在終端顯示時(shí)加載速度較快。
參見圖5所示,示出了本申請(qǐng)實(shí)施例中提供的生成室內(nèi)地圖的方法實(shí)施例二,本實(shí)施例可以應(yīng)用于終端,終端具體可以為智能手機(jī)、平板電腦、電子書閱讀器、mp3(movingpictureexpertsgroupaudiolayeriii,動(dòng)態(tài)影像專家壓縮標(biāo)準(zhǔn)音頻層面3)播放器、mp4(movingpictureexpertsgroupaudiolayeriv,動(dòng)態(tài)影像專家壓縮標(biāo)準(zhǔn)音頻層面3)播放器、膝上型便攜計(jì)算機(jī)和臺(tái)式計(jì)算機(jī)等等,本實(shí)施例可以包括以下步驟:
步驟501:接收包括建筑物在平面地圖上的位置信息的室內(nèi)地圖查詢指令。
終端首先可以渲染顯示平面地圖,在進(jìn)行渲染時(shí)平面地圖可以動(dòng)態(tài)地取得平面地圖的位置信息,例如地圖的分塊信息。終端中的地圖渲染程序會(huì)根據(jù)用戶的操作調(diào)整視角,當(dāng)視角改變時(shí)會(huì)計(jì)算當(dāng)前終端屏幕需要顯示的地圖位置信息,并顯示該位置信息對(duì)應(yīng)的平面地圖。在進(jìn)行地圖渲染時(shí),如果當(dāng)前地圖位置信息保存有對(duì)應(yīng)的第二三維模型,即代表該位置信息對(duì)應(yīng)的建筑物可以顯示室內(nèi)地圖,則出現(xiàn)此處有室內(nèi)地圖信息的提示按鈕。用戶通過觸發(fā)該提示按鈕,從而終端可以接收到包括建筑物在平面地圖上的位置信息的室內(nèi)地圖查詢指令。
步驟502:從服務(wù)器獲取位置信息對(duì)應(yīng)的第二三維模型。
根據(jù)室內(nèi)地圖查詢指令中包括的建筑物在平面地圖上的位置信息,終端向服務(wù)器請(qǐng)求獲取該位置信息對(duì)應(yīng)的第二三維模型。
步驟503:將第二三維模型進(jìn)行壓縮還原,生成第三三維模型。
由于第二三維模型為一個(gè)壓縮后的三維模型,需要進(jìn)行本申請(qǐng)實(shí)施例中頂點(diǎn)壓縮算法的逆運(yùn)算,以進(jìn)行壓縮還原從而生成第三三維模型,用第三三維模型進(jìn)行室內(nèi)地圖展示。
在本申請(qǐng)一些可能的實(shí)現(xiàn)方式中,在上述實(shí)施例中將第二三維模型進(jìn)行壓縮還原,生成第三三維模型的具體實(shí)現(xiàn)可以包括:
將第二三維模型的頂點(diǎn)坐標(biāo)除以預(yù)設(shè)固定值后乘以包圍球半徑,獲得第三三維模型的各個(gè)頂點(diǎn)與第三三維模型的中心點(diǎn)之間的相對(duì)坐標(biāo);將各個(gè)相對(duì)坐標(biāo)加上第三三維模型的中心點(diǎn)坐標(biāo),獲得第三三維模型的各個(gè)頂點(diǎn)坐標(biāo),生成第三三維模型,預(yù)設(shè)固定值、包圍球半徑以及第三三維模型的中心點(diǎn)坐標(biāo)是從服務(wù)器獲取的。
繼續(xù)以上述舉例為例,第二三維模型中的各個(gè)頂點(diǎn)坐標(biāo)為:
(-5810,-5810,-5810)、
(-5810,5810,-5810)、
(5810,5810,-5810)、
(5810,-5810,-5810)、
(-5810,-5810,5810)、
(-5810,5810,5810)、
(5810,5810,5810)、
(5810,-5810,5810)
將第二三維模型中的各個(gè)頂點(diǎn)坐標(biāo)除以預(yù)設(shè)固定值(例如8192),再乘以包圍球半徑141,加上第三三維模型的中心點(diǎn)(0,0,0),獲得第三三維模型的各個(gè)頂點(diǎn)坐標(biāo):
(-100.001220703125,-100.001220703125,-100.001220703125)、
(-100.001220703125,100.001220703125,-100.001220703125)、
(100.001220703125,100.001220703125,-100.001220703125)、
(100.001220703125,-100.001220703125,-100.001220703125)、
(-100.001220703125,-100.001220703125,100.001220703125)、
(-100.001220703125,100.001220703125,100.001220703125)、
(100.001220703125,100.001220703125,100.001220703125)、
(100.001220703125,-100.001220703125,100.001220703125)
即還原后的頂點(diǎn)坐標(biāo)可以作為第三三維模型的頂點(diǎn)坐標(biāo),同時(shí)第二三維模型各個(gè)頂點(diǎn)的紋理坐標(biāo)以及法向坐標(biāo)可以繼續(xù)作為第三三維模型各個(gè)頂點(diǎn)的紋理坐標(biāo)以及法向坐標(biāo),從而生成第三三維模型。
步驟504:對(duì)第三三維模型進(jìn)行渲染顯示,以進(jìn)行建筑物的室內(nèi)地圖展示。
在實(shí)際應(yīng)用中,為了更好的展示室內(nèi)地圖,會(huì)將正常顯示的平面地圖作暗化處理,同時(shí)隱藏該室內(nèi)地圖所在的建筑的外輪廓圖,并拉低視角,通過對(duì)第三三維模型進(jìn)行渲染顯示,讓用戶在建筑物場景內(nèi)瀏覽。此時(shí)場景的瀏覽會(huì)做出限制,不能讓室內(nèi)地圖移出終端的顯示屏幕。
在實(shí)際應(yīng)用中,本申請(qǐng)實(shí)施例中第二三維模型是可以直接被現(xiàn)有的終端顯卡所支持的,可以直接用opengl渲染出來而無須做過多處理,而三維模型數(shù)據(jù)卻減少了一倍,極大地加快了三維模型的渲染速度。opengl渲染的具體方法是,將第三三維模型的中心點(diǎn)以及包圍球半徑傳入opengl渲染的頂點(diǎn)著色器中,然后頂點(diǎn)著色器根據(jù)信息將第二三維模型的各個(gè)頂點(diǎn)坐標(biāo)還原成世界坐標(biāo)系的頂點(diǎn)坐標(biāo)(即第三三維模型的頂點(diǎn)坐標(biāo)),從而實(shí)現(xiàn)對(duì)第三三維模型進(jìn)行渲染顯示,以進(jìn)行建筑物的室內(nèi)地圖展示。這樣第二三維模型的頂點(diǎn)坐標(biāo)并沒有做特別處理就可以直接利用顯卡的硬件特性進(jìn)行三維渲染。
另外,當(dāng)用戶點(diǎn)擊退出室內(nèi)地圖瀏覽時(shí),室內(nèi)地圖的顯示關(guān)閉,重新顯示平面地圖。
這樣,本申請(qǐng)實(shí)施例中在使用終端的用戶需要顯示該建筑物的室內(nèi)地圖時(shí),終端可以加載壓縮后的三維模型作為室內(nèi)地圖顯示,由于三維模型包括的建筑物室內(nèi)信息非常全面,可以以更多的顯示要素展示室內(nèi)場景,從而使室內(nèi)地圖的展示與建筑物內(nèi)部的真實(shí)環(huán)境較為接近。
參見圖6所示,示出了生成室內(nèi)地圖的裝置實(shí)施例一,該裝置實(shí)施例可以應(yīng)用于服務(wù)器,可以包括:
獲取單元601,用于獲取建筑物的第一三維模型。
壓縮單元602,用于將第一三維模型進(jìn)行壓縮,生成第二三維模型。
保存單元603,用于確定建筑物在平面地圖上的位置信息,將建筑物在平面地圖上的位置信息與第二三維模型對(duì)應(yīng)保存,以使終端在接收到包括建筑物在平面地圖上的位置信息的室內(nèi)地圖查詢指令時(shí),獲取第二三維模型進(jìn)行建筑物的室內(nèi)地圖展示。
在本申請(qǐng)一些可能的實(shí)現(xiàn)方式中,壓縮單元可以包括:
提取子單元,用于從第一三維模型中提取室內(nèi)地圖所需的三維建筑信息,獲得第三三維模型;
壓縮子單元,用于將第三三維模型的各個(gè)頂點(diǎn)坐標(biāo)進(jìn)行壓縮,生成第二三維模型。
在本申請(qǐng)一些可能的實(shí)現(xiàn)方式中,壓縮子單元可以包括:
第一計(jì)算子單元,用于計(jì)算第三三維模型的包圍球,將包圍球的中心點(diǎn)作為第三三維模型的中心點(diǎn);
第二計(jì)算子單元,用于分別計(jì)算第三三維模型的各個(gè)頂點(diǎn)坐標(biāo)與第三三維模型的中心點(diǎn)坐標(biāo)之差,獲得第三三維模型的各個(gè)頂點(diǎn)與第三三維模型的中心點(diǎn)之間的相對(duì)坐標(biāo);
第三計(jì)算子單元,用于將各個(gè)相對(duì)坐標(biāo)除以包圍球半徑后乘以預(yù)設(shè)固定值,獲得各個(gè)轉(zhuǎn)換后的頂點(diǎn)坐標(biāo),各個(gè)轉(zhuǎn)換后的頂點(diǎn)坐標(biāo)的坐標(biāo)值均為整數(shù)型;
生成子單元,用于各個(gè)轉(zhuǎn)換后的頂點(diǎn)坐標(biāo)作為第二三維模型的頂點(diǎn)坐標(biāo),生成第二三維模型。
參見圖7所示,示出了生成室內(nèi)地圖的裝置實(shí)施例二,該裝置實(shí)施例可以應(yīng)用于終端,可以包括:
接收單元701,用于接收包括建筑物在平面地圖上的位置信息的室內(nèi)地圖查詢指令。
獲取單元702,用于從服務(wù)器獲取位置信息對(duì)應(yīng)的第二三維模型。
壓縮還原單元703,用于將第二三維模型進(jìn)行壓縮還原,生成第三三維模型。
顯示單元704,用于對(duì)第三三維模型進(jìn)行渲染顯示,以進(jìn)行建筑物的室內(nèi)地圖展示。
在本申請(qǐng)一些可能的實(shí)現(xiàn)方式中,壓縮還原單元可以包括:
第一計(jì)算子單元,用于將第二三維模型的頂點(diǎn)坐標(biāo)除以預(yù)設(shè)固定值后乘以包圍球半徑,獲得第三三維模型的各個(gè)頂點(diǎn)與第三三維模型的中心點(diǎn)之間的相對(duì)坐標(biāo);
第二計(jì)算子單元,用于將各個(gè)相對(duì)坐標(biāo)加上第三三維模型的中心點(diǎn)坐標(biāo),獲得第三三維模型的各個(gè)頂點(diǎn)坐標(biāo),生成第三三維模型,預(yù)設(shè)固定值、包圍球半徑以及第三三維模型的中心點(diǎn)坐標(biāo)是從服務(wù)器獲取的。
這樣,本申請(qǐng)實(shí)施例通過獲取建筑物的三維模型,將三維模型進(jìn)行壓縮后與該建筑物在平面地圖上的位置信息對(duì)應(yīng)保存,在使用終端的用戶需要顯示該建筑物的室內(nèi)地圖時(shí),終端可以加載壓縮后的三維模型作為室內(nèi)地圖顯示,由于三維模型包括的建筑物室內(nèi)信息非常全面,可以以更多的顯示要素展示室內(nèi)場景,從而使室內(nèi)地圖的展示與建筑物內(nèi)部的真實(shí)環(huán)境較為接近。
需要說明的是,本說明書中各個(gè)實(shí)施例采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說明的都是與其他實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似部分互相參見即可。對(duì)于實(shí)施例公開的系統(tǒng)或裝置而言,由于其與實(shí)施例公開的方法相對(duì)應(yīng),所以描述的比較簡單,相關(guān)之處參見方法部分說明即可。
還需要說明的是,在本文中,諸如第一和第二等之類的關(guān)系術(shù)語僅僅用來將一個(gè)實(shí)體或者操作與另一個(gè)實(shí)體或操作區(qū)分開來,而不一定要求或者暗示這些實(shí)體或操作之間存在任何這種實(shí)際的關(guān)系或者順序。而且,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個(gè)……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設(shè)備中還存在另外的相同要素。
結(jié)合本文中所公開的實(shí)施例描述的方法或算法的步驟可以直接用硬件、處理器執(zhí)行的軟件模塊,或者二者的結(jié)合來實(shí)施。軟件模塊可以置于隨機(jī)存儲(chǔ)器(ram)、內(nèi)存、只讀存儲(chǔ)器(rom)、電可編程rom、電可擦除可編程rom、寄存器、硬盤、可移動(dòng)磁盤、cd-rom、或技術(shù)領(lǐng)域內(nèi)所公知的任意其它形式的存儲(chǔ)介質(zhì)中。
對(duì)所公開的實(shí)施例的上述說明,使本領(lǐng)域?qū)I(yè)技術(shù)人員能夠?qū)崿F(xiàn)或使用本申請(qǐng)。對(duì)這些實(shí)施例的多種修改對(duì)本領(lǐng)域的專業(yè)技術(shù)人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本申請(qǐng)的精神或范圍的情況下,在其它實(shí)施例中實(shí)現(xiàn)。因此,本申請(qǐng)將不會(huì)被限制于本文所示的這些實(shí)施例,而是要符合與本文所公開的原理和新穎特點(diǎn)相一致的最寬的范圍。