本發(fā)明屬于android平臺定位技術(shù)領(lǐng)域,特別是涉及一種基于三點(diǎn)定位法的推送信息檢測機(jī)制。
背景技術(shù):
(1)定位技術(shù)
從技術(shù)的方面來看,目前國內(nèi)移動設(shè)備的定位技術(shù)可以分為如下3類:
1)網(wǎng)絡(luò)定位。網(wǎng)絡(luò)定位對設(shè)備的硬件要求和軟件需求比較低,只要能連接至網(wǎng)絡(luò)就可以。因此通過網(wǎng)絡(luò)定位獲得的地理位置的精度無法得到很好的保證。網(wǎng)絡(luò)定位根據(jù)網(wǎng)絡(luò)的不同又可以細(xì)分,常見的有基站定位和wi-fi定位。手機(jī)與基站的距離越遠(yuǎn),信號越差,反之越靠近基站,信號就越強(qiáng)?;径ㄎ痪褪峭ㄟ^計(jì)算設(shè)備發(fā)送的信息到達(dá)每個(gè)基站的時(shí)間來獲得設(shè)備與基站的距離及角度。由于基站的位置是由各個(gè)移動通訊運(yùn)營商所建造,因此它們的位置已知且明確。所以根據(jù)基站的位置和測量的距離與角度,就可以計(jì)算出設(shè)備的位置信息。wi-fi定位又稱為wi-fi熱點(diǎn)定位,它依賴于現(xiàn)有的wlan網(wǎng)絡(luò),采用rss定位方式,利用的是固定位置的無線ap(accesspoint,俗稱“熱點(diǎn)”)。每一個(gè)無線熱點(diǎn)都具有一個(gè)全球唯一的mac地址,并且一般來說,在一段時(shí)間內(nèi),這個(gè)無線熱點(diǎn)是不會移動的。然而,無線熱點(diǎn)的位置并不是通過現(xiàn)場精確測量得出的。當(dāng)一臺設(shè)備打開wi-fi功能時(shí),可以搜索到很多的wi-fi熱點(diǎn),無論是否加密,是否已連接,也可以測出每個(gè)熱點(diǎn)的信號強(qiáng)度,同時(shí)還能知道每個(gè)熱點(diǎn)的ssid(servicesetidentifier,服務(wù)集標(biāo)識)和mac(mediaaccesscontrol或者mediumaccesscontrol,媒體訪問控制,或者稱為物理地址)地址。當(dāng)這個(gè)設(shè)備打開了gps功能,設(shè)備會將這些能夠標(biāo)示熱點(diǎn)的數(shù)據(jù)發(fā)送到位置服務(wù)商的位置服務(wù)器。這樣就形成了一個(gè)大型的熱點(diǎn)坐標(biāo)數(shù)據(jù)庫。如果一個(gè)熱點(diǎn)能夠被不斷采集,那么此熱點(diǎn)的坐標(biāo)隨著采集次數(shù)的增多而不斷地迭代,其坐標(biāo)也會越來越精準(zhǔn)。當(dāng)一個(gè)設(shè)備打開wi-fi進(jìn)行定位時(shí),服務(wù)器能夠獲取周圍的wi-fi的mac地址和信號強(qiáng)弱。利用這些信息,在數(shù)據(jù)庫中進(jìn)行檢索,就可以反查出所在的位置。
2)gps定位。gps(globalpositionsystem,全球定位系統(tǒng))是由覆蓋地球的24顆衛(wèi)星組成的系統(tǒng)。gps定位就是通過設(shè)備與gps衛(wèi)星之間的通訊來獲取設(shè)備的位置信息。任意地點(diǎn)任意時(shí)間都能夠觀測到4顆衛(wèi)星,因此這種定位方式精確度較高。但是gps定位對移動設(shè)備的硬件和軟件要求也相對更高,必須有具有內(nèi)置的gps模塊。耗電量大也是它的一個(gè)不足之處。
3)混合定位。混合定位就是集成網(wǎng)絡(luò)定位和gps定位的綜合使用?;旌隙ㄎ患夹g(shù)把這兩項(xiàng)定位技術(shù)的優(yōu)勢進(jìn)行綜合,取長補(bǔ)短。定位的速度得到提高的同時(shí)也提高了定位的準(zhǔn)確性。定位速度和準(zhǔn)確性的提升,會引發(fā)更多相應(yīng)的拓展服務(wù)。因此,混合定位技術(shù)是定位技術(shù)之后的發(fā)展趨勢(石婷,2014)。
(2)地圖服務(wù)
依賴于位置的業(yè)務(wù)發(fā)展非??焖伲斯ど?、醫(yī)務(wù)、工作和生活的每個(gè)角落。這些業(yè)務(wù)給使用者提供了定位、追蹤和敏感地區(qū)警報(bào)等一連串的服務(wù)。例如谷歌地圖、百度地圖等,都需要通過位置服務(wù)才能夠使用。
電子地圖也稱為數(shù)字地圖。區(qū)別于一般的紙質(zhì)地圖,電子地圖運(yùn)用計(jì)算機(jī)技術(shù),使用數(shù)字化方法進(jìn)行儲存和瀏覽。通過網(wǎng)絡(luò)使用地圖數(shù)據(jù)庫的就能夠獲取使用者的位置所在信息。電子地圖的特征在于易于操作,不被時(shí)間和地域所約束,可以使用數(shù)據(jù)發(fā)送到任意的地點(diǎn)(石婷,2014)。相較于傳統(tǒng)的紙質(zhì)地圖,電子地圖成本低廉、更新速度快,而且可以進(jìn)行交互。采用虛擬現(xiàn)實(shí)技術(shù)實(shí)現(xiàn)三維地圖,讓人在視覺上獲得更舒適的享受。
電子地圖中常見的是二維地圖。開發(fā)電子地圖最重要的是將大量的地理信息數(shù)據(jù)組合在一起。數(shù)據(jù)結(jié)構(gòu)和模型是完整的電子地圖開發(fā)的基本。數(shù)據(jù)結(jié)構(gòu)包含矢量結(jié)構(gòu)、柵格結(jié)構(gòu)和矢柵集成結(jié)構(gòu),用于說明地圖上的信息在計(jì)算機(jī)中的邏輯結(jié)構(gòu)和物理存儲方法。數(shù)據(jù)模型包含關(guān)系數(shù)據(jù)模型及面向?qū)ο髷?shù)據(jù)模型,還有時(shí)空數(shù)據(jù)模型、多媒體數(shù)據(jù)模型等其他的一些數(shù)據(jù)模型。
平時(shí)生活中,電子地圖具有很大的作用。用戶可以通過電子地圖查詢?nèi)我獾胤降奈恢谩ふ页鲂械淖罴逊绞胶途€路。通過電子地圖還能夠知曉例如簡介、聯(lián)絡(luò)方式、用戶評價(jià)等包含在詳細(xì)位置之外的信息。通過電子地圖也能夠發(fā)送消息,進(jìn)行宣傳和互動。
(3)地圖模塊androidsdk
地圖模塊androidsdk是百度地圖針對android2.1及以上版本設(shè)備推出的應(yīng)用程序接口。開發(fā)人員能夠通過使用該接口,獲得百度地圖提供的服務(wù)和數(shù)據(jù)來實(shí)現(xiàn)基于android移動設(shè)備的地圖類應(yīng)用程序。目前地圖模塊androidsdk提供基礎(chǔ)地圖、poi檢索、地理編碼、測距、導(dǎo)航、定位、離線地圖、周邊雷達(dá)、lbs云、個(gè)性化地圖等特色功能,如圖1所示,表1顯示了本發(fā)明主要使用的地圖模塊androidsdk中的功能。
1)搜索服務(wù):百度地圖sdk提供了多種搜索業(yè)務(wù),包含位置搜索、周邊搜索、公交搜索等等。對mksearch類進(jìn)行初始化,注冊檢索結(jié)果的監(jiān)視對象mksearchlistener,就能夠非同步地完成檢索服務(wù)。搜索業(yè)務(wù)應(yīng)用結(jié)束之后,需要使用mksearch的destory()方法來解除資源的占用。
2)興趣點(diǎn)(poi)搜索:指的是在特定的一個(gè)長方形區(qū)域內(nèi),依據(jù)開發(fā)人員設(shè)置的特定關(guān)鍵字,1.使用poisearchinbounds(stringkey,geopointptlb,geopointptrt)方法檢索興趣點(diǎn)信息;2.使用poisearchincity(stringcity,stringkey)方法可以搜索一個(gè)城市內(nèi)的興趣點(diǎn)信息;3.以指定坐標(biāo)點(diǎn)為圓心,根據(jù)給定關(guān)鍵字查詢某一半徑范圍內(nèi)的全部興趣點(diǎn),應(yīng)用的方式是poisearchnearby(stringkey,geopointpt,intradius)。搜索的結(jié)果將通過mysearchlistener的ongetpoiresult顯示。
表1地圖模塊androidsdk的部分功能
3)地址信息查詢:根據(jù)地理坐標(biāo)查詢地址信息,通過reversegeocode()和geocode()方法實(shí)現(xiàn)逆地址解析和地址解析。其中地址解析和逆地址解析的返回結(jié)果都在mksearchlistener中的ongetaddrresult()方法里。需要根據(jù)mkaddrinfo中的type字段是為mkaddrinfo.mk_geocode還是為mkaddrinfo.mk_reversegeocode來具體區(qū)分是逆地址解析的結(jié)果還是地址解析的結(jié)果。
4)及時(shí)搜索建議:根據(jù)檢索的關(guān)鍵詞,在線給出建議詞。通過suggestionsearch(stringkey,stringcity)方法進(jìn)行實(shí)現(xiàn)。其中參數(shù)key為關(guān)鍵字,參數(shù)city為檢索城市。
技術(shù)實(shí)現(xiàn)要素:
針對媒體和公眾無法判斷社交媒體中發(fā)布的信息是否可信,本發(fā)明針對利用無法人為更改的客觀因素——位置信息,并設(shè)計(jì)了基于三點(diǎn)定位法的推送信息采信設(shè)置檢測機(jī)制,實(shí)現(xiàn)消息的可信度的檢測,力求達(dá)到“正確的信息在正確的時(shí)間在正確的位置上發(fā)生”的目的。
本發(fā)明提供的技術(shù)方案是一種基于三點(diǎn)定位法的推送信息采信設(shè)置檢測機(jī)制,包括以下步驟:
一種基于三點(diǎn)定位法的推送信息采信檢測方法,其特征是,包括以下步驟:
步驟1,搭建android系統(tǒng)開發(fā)環(huán)境,具體是:
配置android開發(fā)環(huán)境:安裝jdk配置windows上jdk的變量環(huán)境,其次下載eclipse并配置環(huán)境變量,然后下載安裝安卓sdk,最后為eclipse安裝adt插件
地圖模塊androidsdk:在工程里創(chuàng)建一個(gè)libs的文件夾,把開發(fā)包中的文件對應(yīng)復(fù)制到libs目錄下然后集成到自己的工程中。
步驟2,基于android系統(tǒng)的移動終端上的activity應(yīng)用程序,設(shè)計(jì)檢測機(jī)制結(jié)構(gòu)并實(shí)現(xiàn)主界面模塊,整個(gè)檢測機(jī)制的邏輯結(jié)構(gòu)可劃分成表現(xiàn)層、邏輯處理層以及數(shù)據(jù)存儲層三層,
表現(xiàn)層:提供消息發(fā)送者的軟件交互頁面,包括軟件的設(shè)置頁面、消息發(fā)送頁面以及地圖展示頁面。
邏輯處理層:負(fù)責(zé)系統(tǒng)整個(gè)檢測機(jī)制所有的數(shù)據(jù)處理和數(shù)據(jù)發(fā)送。包括參數(shù)修改的處理、消息發(fā)送者與測距點(diǎn)距離的計(jì)算、消息發(fā)送者定位的處理、消息可信度的判斷。
數(shù)據(jù)存儲層:主要實(shí)現(xiàn)對信息報(bào)道者報(bào)道的信息的接收和存儲。
步驟3,基于三點(diǎn)定位法的推送信息檢測機(jī)制,實(shí)現(xiàn)推送信息的檢測,
步驟3.1,對打開應(yīng)用程序的用戶進(jìn)行定位,獲取位置信息,即通過requestlocationupdates()對象設(shè)置一個(gè)位置改變條件。這個(gè)條件包括定位請求發(fā)起的最小時(shí)間間隔,以及定位請求發(fā)起時(shí)的最小位移變化。這兩個(gè)條件必須同時(shí)滿足,才能執(zhí)行回調(diào)函數(shù),觸發(fā)位置監(jiān)聽。避免多次重復(fù)的無用定位。人工進(jìn)行removeupdates()進(jìn)行位置信息的更新,onresume()中持續(xù)跟蹤,相應(yīng)的在onpause()中關(guān)閉跟蹤。
步驟3.2,用戶發(fā)送消息時(shí),判斷消息是否為空,同時(shí)查詢消息發(fā)生地點(diǎn),避免空白信息和無效信息的發(fā)送;
步驟3.3,三點(diǎn)定位法計(jì)算測量點(diǎn)距離,繪制圓形。
步驟3.4,信息檢測,依據(jù)幾何掃描算法,提出并采用計(jì)算報(bào)道消息發(fā)生地和消息發(fā)送者所在區(qū)域之間的距離算法。
在上述基于三點(diǎn)定位法的推送信息采信檢測方法,步驟3.3的實(shí)現(xiàn)方式為,使用百度地圖畫圓api類circle來創(chuàng)建圓覆蓋物,通過map.addoverlay(circle)可以增加一個(gè)圓形,以及其他方法個(gè)性化設(shè)置所畫的圖形。
在上述基于三點(diǎn)定位法的推送信息采信檢測方法,步驟3.4的實(shí)現(xiàn)方式為,依據(jù)幾何掃描算法,針對地址空間的點(diǎn)進(jìn)行研究,本發(fā)明提出了一種計(jì)算報(bào)道消息發(fā)生地和消息報(bào)道者所在區(qū)域間的距離的算法,輸入三個(gè)偵察點(diǎn)s1、s2、s3及其與消息發(fā)送者之間的距離l1、l2、l3,消息發(fā)生地p,即可得到消息發(fā)生地和消息報(bào)道者所在區(qū)域之間的距離l。
本發(fā)明具有如下優(yōu)點(diǎn):利用主觀消息中的位置信息這個(gè)客觀因素作為評價(jià)參考,無需添加新的評價(jià)標(biāo)準(zhǔn),降低檢驗(yàn)過程的復(fù)雜度;同時(shí)也可以與其他評價(jià)體系組合使用,具有可擴(kuò)展性;運(yùn)用普及的智能手機(jī)中常見的定位功能,使得該項(xiàng)技術(shù)有良好的便捷性,同時(shí)檢測的結(jié)果在消息發(fā)送和接收時(shí)就能夠獲得,具有及時(shí)性;提出對可信度評價(jià)的分級體系,為之后的研究提供發(fā)展方向。
附圖說明
圖1本發(fā)明實(shí)施例的地圖模塊androidsdk提供的開發(fā)資源。
圖2本發(fā)明實(shí)施例的基于三點(diǎn)定位法的消息檢測機(jī)制實(shí)現(xiàn)流程圖。
圖3本發(fā)明實(shí)施例的android平臺的基本架構(gòu)圖。
圖4本發(fā)明實(shí)施例的android工程目錄圖。
圖5本發(fā)明實(shí)施例的android工程目錄添加權(quán)限信息圖。
圖6本發(fā)明實(shí)施例的布局xml文件中添加地圖控件圖。
圖7本發(fā)明實(shí)施例的生命周期圖。
圖8本發(fā)明實(shí)施例的引入相關(guān)類圖。
圖9本發(fā)明實(shí)施例通過三點(diǎn)定位法檢測即時(shí)信息可信度流程圖。
圖10本發(fā)明實(shí)施例的檢測機(jī)制邏輯結(jié)構(gòu)圖。
圖11本發(fā)明實(shí)施例的實(shí)驗(yàn)主界面圖。
圖12本發(fā)明實(shí)施例的百度地圖拾取坐標(biāo)系統(tǒng)圖。
圖13本發(fā)明實(shí)施例的應(yīng)用設(shè)置頁面圖。
圖14本發(fā)明實(shí)施例的設(shè)置測量點(diǎn)坐標(biāo)成功圖。
圖15本發(fā)明實(shí)施例的還原默認(rèn)測量點(diǎn)坐標(biāo)成功圖。
圖16本發(fā)明實(shí)施例的避免空白信息和無效信息圖。
圖17本發(fā)明實(shí)施例的消息檢測頁面圖。
圖18本發(fā)明實(shí)施例的“災(zāi)難現(xiàn)場”定位頁面圖。
圖19本發(fā)明實(shí)施例的圓形切線劃分圖。
圖20本發(fā)明實(shí)施例的二維幾何掃描圖。
圖21本發(fā)明實(shí)施例的三點(diǎn)定位算法掃描圖。
圖22本發(fā)明實(shí)施例的武漢大學(xué)測試結(jié)果圖。
具體實(shí)施方式
本發(fā)明設(shè)計(jì)的基于三點(diǎn)定位法的消息檢測機(jī)制實(shí)現(xiàn)流程見圖2,可由本領(lǐng)域技術(shù)人員采用計(jì)算機(jī)軟件技術(shù)實(shí)現(xiàn)流程自動運(yùn)行。實(shí)施例具體實(shí)現(xiàn)過程如下:
步驟1,搭建android系統(tǒng)開發(fā)環(huán)境,配置android開發(fā)環(huán)境和地圖模塊androidsdk;
android開發(fā)環(huán)境主要分為以下4個(gè)步驟:
(1)安裝jdk,配置windows上jdk的變量環(huán)境;
(2)下載安裝eclipse,配置環(huán)境變量;
(3)下載安裝androidsdk;
(4)為eclipse安裝adt插件。
jdk(javasedevelopmentkit)是java語言的軟件開發(fā)工具包。jdk是java開發(fā)過程的重心,包括了java開發(fā)的執(zhí)行環(huán)境(javaruntimeenvironment)、一系列java開發(fā)的工具和給開發(fā)人員開發(fā)應(yīng)用程序時(shí)調(diào)用的java類庫。jdk包含的基本工具如表2所示,這些工具可以在jdk的安裝目錄下的bin目錄里面查看。
表2javasedevelopmentkit包含的基本工具
eclipse是跨平臺的集成開發(fā)環(huán)境,主要是為java應(yīng)用程序及android開發(fā)的ide,有著大量定制的接口和無數(shù)的插件。eclipse無需進(jìn)行安裝,將它解壓到想要安裝的目錄文件中就可以。假如沒有現(xiàn)成的ide(integrateddevelopmentenvironment,集成開發(fā)環(huán)境,主要指可以輔助開發(fā)程序的應(yīng)用軟件),可以直接下載sdk完整包。完整包里面包含了eclipse,不需要再另外下載安裝。
androidsdk是android應(yīng)用軟件開發(fā)包工具,提供了開發(fā)android應(yīng)用程序所需的api庫和組建、測試和調(diào)試android應(yīng)用程序需要的開發(fā)工具。
adt(androiddevelopertools,安卓開發(fā)者工具),是在eclipse集成開發(fā)環(huán)境上進(jìn)行android應(yīng)用開發(fā)的插件。這個(gè)插件實(shí)際上也就是在eclipse上用來開發(fā)android應(yīng)用程序的軟件工具。它能夠讓eclipse和androidsdk關(guān)聯(lián)起來,方便開發(fā)人員進(jìn)行android應(yīng)用程序的開發(fā)和調(diào)試。本發(fā)明主要開發(fā)環(huán)境是eclipse3.5.2,android平臺的基本架構(gòu)如附圖3所示。
配置地圖模塊androidsdk,附圖4展示了android主要的工程目錄。其中src文件夾用來放置java程序源代碼,assets文件夾放置原樣打包進(jìn)應(yīng)用程序中的文件。文件夾gen用于存放android開發(fā)工具所生成的源文件,其下有一個(gè)r.java文件是由開發(fā)工具自動生成和維護(hù)的,不需要我們進(jìn)行創(chuàng)建和修改。當(dāng)需要向res目錄中添加引用文件時(shí),r.java能夠自動完成引用的添加。同時(shí)r.java還能判斷程序編譯時(shí)是否用到了所有res目錄下的文件,未被使用的文件將不會被打包到應(yīng)用程序中,優(yōu)化了執(zhí)行空間。res目錄下的前幾個(gè)文件依次根據(jù)文件名存放由不同像素的圖片文件,layout和values分別存放用戶界面文件和界面上使用的文字。androidmanifest.xml是功能清單文件,在這里可以看到整個(gè)工程里有多少activity、services、providers、receivers,以及需要的安全授權(quán)uses-permission等。在完成了android開發(fā)環(huán)境的配置的工程里創(chuàng)建一個(gè)libs的文件夾后,把開發(fā)包中的文件對應(yīng)復(fù)制到libs目錄下然后集成到自己的工程中。
要顯示百度地圖,首先需在androidmanifest中加上開發(fā)密鑰、所需權(quán)限等信息。一般所需的權(quán)限主要為運(yùn)營商信息、網(wǎng)絡(luò)定位、gps定位、wi-fi網(wǎng)絡(luò)信息、wi-fi獲取權(quán)限并在布局xml文件中添加地圖控件。如附圖5,附圖6所示。
android中起到顯示作用的是四大主件之一—activity。activity是android中最基本的構(gòu)成組件之一,它提供了與用戶的交互界面。activity的一個(gè)生命周期是指它從創(chuàng)建到關(guān)閉的狀態(tài)。整個(gè)過程中一共可能經(jīng)歷運(yùn)行、狀態(tài)、狀態(tài)和銷毀四種狀態(tài),如附圖7所示。
當(dāng)activity第一次啟動時(shí)將使用oncreate()方法進(jìn)行activity的初始化,這是一個(gè)activity生命周期的起始。打開應(yīng)用程序時(shí),需要按順序運(yùn)行oncreateo、onstarto、onresume()這三個(gè)方法,這個(gè)時(shí)候activity已經(jīng)正常顯示了。如果在此時(shí)點(diǎn)擊回退鍵,先后調(diào)用onpauseo、onstopo、ondestory()三個(gè)方法,這個(gè)應(yīng)用程序就將結(jié)束;如果在此時(shí)按home鍵,去打開其他應(yīng)用,這個(gè)應(yīng)用程序并沒有結(jié)束或者銷毀,而是先后執(zhí)行了onpause()、onstop()這兩個(gè)方法,轉(zhuǎn)變成了停止?fàn)顟B(tài)。如果再次打開應(yīng)用程序,將會按順序運(yùn)行onrestarto、onstarto、onresume()三個(gè)方法變?yōu)檫\(yùn)行狀態(tài)。
百度地圖須在應(yīng)用程序建立時(shí)對sdk引用的context全局變量進(jìn)行初始化,在sdk各功能組件調(diào)用之前使用sdkinitializer.initialize(getapplicationcontext())方法。創(chuàng)建地圖activity,管理地圖生命周期,需要在打開時(shí)通過mmapview=(mapview)findviewbyid(r.id.bmapview)獲得對地圖控件的引入。針對暫停、停止和銷毀三個(gè)狀態(tài),百度地圖分別提供了mmapview.onpause()、mmapview.onresume()、mmapview.ondestroy()三種方法實(shí)現(xiàn)地圖生命周期管理。最后使用import引入相關(guān)的類,如附圖8所示。至此,整個(gè)的開發(fā)環(huán)境就已經(jīng)全部配置完成。
步驟2,基于android系統(tǒng)的移動終端上的activity應(yīng)用程序,設(shè)計(jì)檢測機(jī)制結(jié)構(gòu)并實(shí)現(xiàn)主界面模塊;
考慮到整個(gè)檢測機(jī)制的功能需求,我們對整個(gè)檢測機(jī)制進(jìn)行模塊的細(xì)分。我們將邏輯結(jié)構(gòu)組織成單獨(dú)的、職能相關(guān)的離散層,在主要方面加以內(nèi)聚,讓邏輯結(jié)構(gòu)變得更加明確。整個(gè)檢測機(jī)制的邏輯結(jié)構(gòu)可劃分成表現(xiàn)層、邏輯處理層以及數(shù)據(jù)存儲層三層,如圖9所示。
表現(xiàn)層:提供消息發(fā)送者的軟件交互頁面,包括軟件的設(shè)置頁面、消息發(fā)送頁面以及地圖展示頁面。
邏輯處理層:負(fù)責(zé)系統(tǒng)整個(gè)檢測機(jī)制所有的數(shù)據(jù)處理和數(shù)據(jù)發(fā)送。包括參數(shù)修改的處理、消息發(fā)送者與測距點(diǎn)距離的計(jì)算、消息發(fā)送者定位的處理、消息可信度的判斷。
數(shù)據(jù)存儲層:主要實(shí)現(xiàn)對信息報(bào)道者報(bào)道的信息的接收和存儲。
其中數(shù)據(jù)存儲層主要是在服務(wù)器端。其中消息id和報(bào)道者id均為整數(shù)類型,由系統(tǒng)在獲取消息和用戶注冊的時(shí)候按順序分配。消息發(fā)送時(shí)間為datetime類型,獲取信息發(fā)送時(shí)的服務(wù)器日期和時(shí)間并進(jìn)行記錄。消息發(fā)生地和消息內(nèi)容為字符型??紤]到一般報(bào)道的消息不會超出字符型數(shù)據(jù)的最長8000個(gè)字符的限制,因此沒有采用文本型數(shù)據(jù)存儲,以節(jié)省存儲空間??尚哦扰袛嘀挥袃煞N情況——消息可疑和消息較可靠,因此布爾型數(shù)據(jù)就可以表示。默認(rèn)的消息的可靠度為false不可靠。
表3數(shù)據(jù)存儲表
本檢測機(jī)制是在android系統(tǒng)的移動終端上進(jìn)行設(shè)計(jì)和實(shí)現(xiàn)的。android應(yīng)用程序是所有程序的入口文件,但是實(shí)際上應(yīng)用程序只是一個(gè)寬泛的概念,并沒有一個(gè)實(shí)際與之對應(yīng)的界面。而在一個(gè)應(yīng)用程序中,activity才表示相對應(yīng)的一個(gè)界面。一個(gè)activity的擴(kuò)展相當(dāng)于一個(gè)界面。大多數(shù)的應(yīng)用程序一般都會擁有多個(gè)界面,相應(yīng)的,程序中將包括多個(gè)activity類。因此,從實(shí)際顯示的角度來看,mainactivity.java文件才是程序的主界面。
本發(fā)明主界面主要完成兩個(gè)功能,其中一個(gè)功能是完成三個(gè)測量點(diǎn)設(shè)置和對可接受范圍劃定的應(yīng)用設(shè)置,另一個(gè)功能即是完成即時(shí)信息的發(fā)送。附圖11展示了程序的主界面。
有關(guān)三個(gè)測量點(diǎn)的設(shè)置我們是通過百度地圖拾取坐標(biāo)系統(tǒng)進(jìn)行選取的。百度地圖拾取坐標(biāo)系統(tǒng)是百度推出的一個(gè)可以讓用戶方便地獲得百度地圖上某個(gè)位置的精準(zhǔn)定位的地理位置信息(以經(jīng)緯度坐標(biāo)呈現(xiàn)),如圖12所示。
在搜索欄輸入想要搜索的地點(diǎn)后點(diǎn)擊搜索,地圖上就會出現(xiàn)相應(yīng)的標(biāo)記,點(diǎn)擊其中的某一個(gè)標(biāo)記點(diǎn),就能看到相應(yīng)的坐標(biāo);同時(shí)頁面右側(cè)也列出了查詢到的所有地點(diǎn)及其坐標(biāo)。在對具體地點(diǎn)名稱不了解的情況下,鼠標(biāo)放在地圖上滑動,鼠標(biāo)滑到每一個(gè)地方,都會同步顯示對應(yīng)的地圖坐標(biāo),點(diǎn)擊選定的坐標(biāo),右上角會記錄下選定的坐標(biāo)以備以后使用。
同時(shí)百度地圖拾取坐標(biāo)系統(tǒng)還提供了坐標(biāo)反查的功能。當(dāng)選擇這個(gè)功能后,在搜索欄中輸入已知點(diǎn)的坐標(biāo),該點(diǎn)就能顯示在地圖上。如果坐標(biāo)解析成功,還能返回一個(gè)地址。
地圖上兩點(diǎn)間的距離計(jì)算公式如式(1)所示,其中r=6370996.81,lng(longitude)為經(jīng)度,lat(latitude)為緯度。
因?yàn)楸緦?shí)驗(yàn)主要是在湖北省武漢市進(jìn)行,同時(shí)由于在地圖上“差之毫厘,謬以千里”,選取學(xué)校周邊的測量點(diǎn)在數(shù)據(jù)上太接近不便于數(shù)據(jù)分辨,因此本發(fā)明隨機(jī)在周邊地圖上選取了三個(gè)測量點(diǎn)(114.349802,30.535147)、(114.363457,30.545038)和(114.404498,30.511795)。
在可接受距離范圍的選取上,我們利用一個(gè)常用的距離判讀口訣——“五清六不清,七空八不空,千米看勞動”,選擇了500米。這個(gè)口訣的意思就是,人在距離500米時(shí)可以通過他們穿著的衣物和肢體動作辨明性別,當(dāng)距離增加到600米時(shí)就分不清男女了;在距離為700米時(shí),可以看到對方行走時(shí)兩腿間走路產(chǎn)生的空間,但在800米時(shí)就不能看到了;在距離為1000米的時(shí)候只能看到對方坐、站和勞動彎腰等幅度較大的動作改變,在2000米的時(shí)候人的身體就只是一個(gè)小黑點(diǎn),什么都沒有辦法分清了。為了細(xì)化對即時(shí)信息的檢測,我們選擇可以看到正常行為、分清身形性別的500米作為可接受的距離范圍。
以上的所有默認(rèn)數(shù)據(jù)都是可以在如圖12所示的應(yīng)用設(shè)置里面進(jìn)行修改。在三個(gè)測量點(diǎn)的選取上,只要保證兩點(diǎn)之間的距離在百米以上(避免存在無效測量點(diǎn)),即可,如果消息發(fā)送者在選取的三個(gè)測量點(diǎn)所形成的三角形以內(nèi),測量的效果會更加。如果對視覺可見的即時(shí)信息可接受距離范圍不同,也可以自行進(jìn)行填寫,不過本發(fā)明還是建議選擇500米相對精確。對默認(rèn)數(shù)據(jù)進(jìn)行設(shè)置修改成功如圖14所示。同時(shí),如果對設(shè)置的數(shù)據(jù)不滿意,希望還原為初始設(shè)置,也可以選擇還原默認(rèn)坐標(biāo),還原成功如圖15所示。
步驟3,基于三點(diǎn)定位法的推送信息檢測機(jī)制,實(shí)現(xiàn)推送信息的檢測,
步驟3.1,對打開應(yīng)用程序的用戶進(jìn)行定位,獲取位置信息。在用戶打開應(yīng)用程序的時(shí)候,我們會對用戶進(jìn)行定位,用于計(jì)算測量點(diǎn)的距離以便繪制圓形。由于人的位置會不斷改變,我們需要通過requestlocationupdates()對象設(shè)置一個(gè)位置改變條件。這個(gè)條件包括定位請求發(fā)起的最小時(shí)間間隔,以及定位請求發(fā)起時(shí)的最小位移變化。這兩個(gè)條件必須同時(shí)滿足,才能執(zhí)行回調(diào)函數(shù),觸發(fā)位置監(jiān)聽。這樣,我們就可以避免多次重復(fù)的無用定位。需要注意的是,由于我們要求不斷獲得位置更新,因此我們必須在人工進(jìn)行removeupdates()。我們只在activity運(yùn)行時(shí)進(jìn)行跟蹤,否則即使應(yīng)用中所有的activity都關(guān)閉,app仍繼續(xù)在不斷更新位置信息。這樣會導(dǎo)致應(yīng)用資源無法被回收。所以,我們在onresume()中持續(xù)跟蹤,相應(yīng)的在onpause()中關(guān)閉跟蹤。
步驟3.2,當(dāng)用戶發(fā)送消息時(shí),判斷消息是否為空,同時(shí)查詢消息發(fā)生地點(diǎn),避免空白信息和無效信息的發(fā)送,如圖16所示。由于日常使用百度地圖查詢地址時(shí),往往會出現(xiàn)多條查詢結(jié)果。本發(fā)明在查詢消息發(fā)生地時(shí),為了避免查詢結(jié)果的多樣性,默認(rèn)選取查詢結(jié)果中的第一條結(jié)果作為消息發(fā)生地點(diǎn)。因此,如果要保證消息發(fā)生地址的準(zhǔn)確性,發(fā)送消息的時(shí)候,地址寫得越詳細(xì)查詢結(jié)果才會越接近目標(biāo)地址。
步驟3.3,計(jì)算測量點(diǎn)距離,繪制圓形。百度地圖目前已經(jīng)提供了畫圓api類circle(center:point,radius:number[,opts:circleoptions])來創(chuàng)建圓覆蓋物,只要傳入圓的中心經(jīng)緯度、圓的半徑就可以實(shí)現(xiàn)畫圓。通過map.addoverlay(circle)可以新增加一個(gè)圓形,同時(shí)還提供了circle.setfillcolor()、circle.setstrokecolor()等方法來個(gè)性化設(shè)置所畫的圖形。
步驟3.4,信息檢測,依據(jù)幾何掃描算法,提出并采用計(jì)算報(bào)道消息發(fā)生地和消息發(fā)送者所在區(qū)域之間的距離算法。
本發(fā)明的難點(diǎn)主要存在于如何判斷消息發(fā)送者所在區(qū)域和報(bào)道消息發(fā)生地是否在可接受范圍內(nèi)。計(jì)算出的消息發(fā)送者所在區(qū)域是肯定存在的。該區(qū)域是三個(gè)圓交叉形成的區(qū)域,可能有如圖17所示的四種情況。將圖17中所示的區(qū)域進(jìn)行補(bǔ)全完整可以得到圖18,涂黑部分展示的是補(bǔ)全前設(shè)計(jì)的相交區(qū)域??梢钥闯?,圖17a、17b、17c分別與圖18a、18b、18c相互對應(yīng),圖17d則對應(yīng)圖18d、18e兩種情況。在圖18a、18b、18d這三種情況其實(shí)都?xì)w結(jié)到了圖18a這一種情況,而圖18c這種情況其實(shí)三個(gè)圓圈并沒有共同相交的區(qū)域,與我們之前所得出的“計(jì)算出的消息發(fā)送者所在區(qū)域是肯定存在的”觀點(diǎn)明顯不同,因此這種情況并不歸入本發(fā)明所討論的范圍里面。所以,本發(fā)明所需要討論的只有圖18a和圖18e這兩種情況。由于圖18中a)和e)這兩種情況所展示的共同區(qū)域都不是標(biāo)準(zhǔn)的多邊形,沒有直接處理的方法,因此我們需要對這些區(qū)域進(jìn)行近似處理。從圖19我們可以看出,三個(gè)圓形所相交的區(qū)域在圖中l(wèi)1、l2、l3、l4四條直線所劃定的長方形之內(nèi),其中l(wèi)1是三個(gè)圓形分別的最左邊的點(diǎn)中最靠近右邊的點(diǎn)的基于該點(diǎn)的該圓的切線,l2是三個(gè)圓形分別的最右邊的點(diǎn)中最靠近左邊的點(diǎn)的基于該點(diǎn)的該圓切線,l3是三個(gè)圓形分別的最下面的點(diǎn)中最靠近上面的點(diǎn)的基于該點(diǎn)的該圓的切線,l4是三個(gè)圓形分別的最上面的點(diǎn)中最靠近下面的點(diǎn)的基于該點(diǎn)的該圓的切線。這四條切線正好包含了三個(gè)圓形所相交的區(qū)域。同樣,這種情況對于圖18e也同樣適用,因此我們利用這個(gè)矩形來縮小我們需要查找的范圍。
考慮到本算法主要針對地圖二維空間的點(diǎn)進(jìn)行研究,本發(fā)明參考了相似的算法——幾何掃描算法。在幾何算法中,考慮的主要對象通常是二維、三維或者是更高維空間中的點(diǎn)、線段、多邊形和其他幾何體。有時(shí)候一個(gè)問題的解法需要通過“掃描”給出的輸入對象來收集信息以便找到可行的解決方案。這種技術(shù)在二維平面被稱為平面掃描,在三維空間上則被稱為空間掃描。在它的簡單形式中,一條垂直的直線在平面上從左向右進(jìn)行掃描,在每個(gè)對象(比如說一個(gè)點(diǎn))處逗留,從最左側(cè)的對象開始,一直向右掃描到最后測的對象。
例如,在平面上給出的一個(gè)有n個(gè)點(diǎn)的集合s中找出集合中的極大點(diǎn)??梢韵劝裺中的所有的點(diǎn)按照它們的x坐標(biāo)進(jìn)行非升序排列(如果兩個(gè)點(diǎn)具有相同的x坐標(biāo),那么將有較大y坐標(biāo)值的點(diǎn)排列在前面),那么最右側(cè)的點(diǎn)無疑是個(gè)極大點(diǎn),因?yàn)樗哂凶畲蟮膞坐標(biāo)值。根據(jù)幾何掃描算法,從最右側(cè)向左掃描這些點(diǎn),同時(shí)確定這些點(diǎn)的y坐標(biāo)是否是極大值。整個(gè)算法過程如圖20所示,極大集{a,b,c,d,e}形成了一個(gè)階梯的形狀。
本發(fā)明依據(jù)以上幾何掃描算法,提出了如下算法來計(jì)算報(bào)道消息發(fā)生地和消息發(fā)送者所在區(qū)域之間的距離。
算法的過程如圖21所示。掃描線從pl所在x坐標(biāo)值開始向右測掃描所有y坐標(biāo)值在pd和pu的y坐標(biāo)值之間的點(diǎn)至pr所在x坐標(biāo)值的切線處,判斷該點(diǎn)是否在三個(gè)圓相交的范圍內(nèi)。對于每個(gè)在x坐標(biāo)下三個(gè)圓相交范圍內(nèi)的點(diǎn),分別計(jì)算y坐標(biāo)值最大和最小兩個(gè)點(diǎn)與消息發(fā)生地之間的距離,記錄其中的最小距離并繼續(xù)進(jìn)行之后的掃描,直至整個(gè)掃描過程結(jié)束,最后得到的最小距離,就是報(bào)道消息發(fā)生地與消息發(fā)送者所在區(qū)域之間的距離。消息發(fā)生地的位置有三種情況:在l4上方;在l3下方;在l3和l4之間。根據(jù)不同的情況,針對同一個(gè)x值,我們需要進(jìn)行掃描的y值如式(2)所示。
當(dāng)pd·y<p·y<pu.y時(shí),y值方向需要先從pd.y開始向上掃描至第一個(gè)在相交范圍內(nèi)的點(diǎn)y1,然后從pu.y開始向下掃描至第一個(gè)在相交范圍內(nèi)的點(diǎn)y2。
(1)如果p.y≥y2,則此時(shí)最近距離為y2與p之間的距離;
(2)如果p.y<y1,則此時(shí)最近距離為y1與p之間的距離;
(3)如果y1≤p.y<y2,則此時(shí)最近距離為點(diǎn)(x,p.y)與p之間的距離。
地圖上所示的三個(gè)圓形為根據(jù)三個(gè)測量點(diǎn)的坐標(biāo)和與消息發(fā)送者之間的距離所畫,點(diǎn)擊“偵察點(diǎn)1”、“偵察點(diǎn)2”、“偵察點(diǎn)3”可以分別定位到三個(gè)測量點(diǎn)在地圖上的相應(yīng)位置。圖22展示了在武漢大學(xué)信息學(xué)部發(fā)送有關(guān)武漢大學(xué)文理學(xué)部消息的測試結(jié)果。
本發(fā)明中所描述的具體實(shí)施例僅僅是對本發(fā)明精神作舉例說明。本發(fā)明所屬技術(shù)領(lǐng)域的技術(shù)人員可以對所描述的具體實(shí)施例做各種各樣的修改或補(bǔ)充或采用類似的方式替代,但并不會偏離本發(fā)明的精神或者超越所附權(quán)利要求書所定義的范圍。