LBS應用中"附近的人"在伺服器端如何更高效快速地計算距離?

數字化校園的建設,已成為信息時代的必然趨勢。近年來,一方面,由於諸多高校的擴招和合併,學校規模越來越大,從位置上分為相距較遠的多個校區,校園設施和環境也在不斷地完善,眾多的機構分散在校園的不同地方,這使得高校信息量有龐雜、分散、更新速度快和信息不對稱的特點;另一方面,隨著移動互聯網的發展,用戶對隨時隨地獲取服務信息的需求越來越迫切,傳統的基於桌面終端瀏覽器的校園信息服務系統由於其空間數據和屬性數據缺乏實時的動態聯繫和統一管理,已不能很好地滿足服務對象及管理者的需求,而以基於位置的服務為技術基礎的校園信息服務系統能很好地滿足這一需求。LBS(Location Based Service)即通過移動通信運營商的無線通信網路(如GSM、CDMA)或外部定位方式(如GPS)獲取移動終端用戶的物理位置信息,並根據用戶的位置提供與之相匹配的服務。基於LBS的數字校園信息服務可以結合校園的各類實體資源,通過移動終端和PC端以地圖這種可視化的形式,將各種相關的信息和服務組織起來,為服務對象提供精準的信息推送,實現智能化的信息服務。


  需求分析

  校園信息服務的服務對象是校園師生、管理決策和後勤服務部門以及來訪人員等,其主要目的是通過定位、導航和查詢、索引等技術,為用戶提供智能化的信息服務。從用戶的角度出發可將其服務需求分為四大類:基於位置的基礎信息查詢服務、基於位置的可視化地圖導航服務、基於位置的個性化信息推薦服務和基於位置數據分析和挖掘的動態調度和規劃。

  總體設計

系統分層結構設計

數字校園是數字地球、數字城市的微觀的、具體的表現,但顯然又具有其教育行業和個性化特點。基於LBS的數字校園信息服務系統是在對這種特點進行具體分析的基礎上加以拓展實現的。

2011年,Kivera公司提出了一個在LBS平台集成服務的平台架構,該平台將靜態地理數據和動態數據結合為用戶提供實時動態的信息服務。基於這種思想,結合校園信息服務的實際需求,系統分層結構設計如圖1所示。

LBS應用中"附近的人"在伺服器端如何更高效快速地計算距離

其中數據是信息服務的基礎,可將數據分成兩大部分,一部分是提供基礎信息數據,包括校園地理空間信息數據,如校園教學區、辦公區等校園建築的地理位置坐標數據、教學信息、辦公信息、新聞通知、會議講座以及學生活動等相關的校園POI(Point of Interest)信息數據,還包括校園周邊公共交通信息等其他基礎數據;另一部分為動態獲取的用戶實時信息,包括批量性的大眾基礎位置信息和用戶基本信息。信息服務包括用戶定位,路徑規劃,周邊搜索,地理編碼,地圖繪製,反地理編碼等基於位置的核心服務和校園人流量分布分析,個人個性化位置服務定製等基於用戶軌跡挖掘的數據可視化服務和信息服務。最後在這些基礎上開發基於桌面端和移動端的應用工程,使得用戶通過互聯網獲取相關信息服務。

 系統運行流程設計

基於LBS的信息服務的主要工作是根據用戶的需求完成定位系統、伺服器和移動終端之間的信息交互,系統運行流程如圖2所示,系統運行的流程主要分為三個主要交互過程,首先,用戶通過移動設備的定位模塊接收由衛星導航系統或移動通信基站、Wi-Fi熱點發送的數據信息,並利用該信息計算出用戶的經緯度等信息;其次,將位置信息和查詢請求發送到綁定的伺服器,伺服器接收並根據GPRS或CDMA等移動網路傳輸回來的數據進行處理和計算後,將相應結果通過移動網路發送給移動終端;最後,用戶再根據請求結果在應用程序中進行可視化並在用戶端呈現相關內容。

LBS應用中"附近的人"在伺服器端如何更高效快速地計算距離

系統功能模塊設計

數字校園信息服務系統為廣大師生、校園管理人員、家長及其社會提供了一個方便、快捷、高效的校園信息化服務平台,也為校園的規劃、設計和管理、決策提供準確而詳細的數據。不僅囊括了校園常用的相關信息,諸如學校常用網站鏈接、校車通勤服務信息、招聘會議信息、生活服務信息等,還針對移動用戶增加了學校內部及周邊生活設施如銀行、商場、醫院等信息服務。結合實際需求分析與當前的技術發展,將整個基於LBS的數字化校園服務系統分為系統設置、定位導航、地圖顯示、信息諮詢、動態調度和推薦服務等六大模塊。系統功能模塊如圖3所示。

LBS應用中"附近的人"在伺服器端如何更高效快速地計算距離

信息服務系統的核心技術基於LBS數字校園信息服務的最終目標是使用戶通過移動終端獲取自己的位置,然後根據其位置來獲取所需的服務。具體的說,系統的設計需要從移動客戶端和伺服器端兩部分來進行分析。移動客戶端軟體的主要功能包括兩個部分,第一是利用其移動終端具備的功能模塊–GPS全球衛星定位模塊或移動通信基站定位、Wi-Fi定位獲取用戶當前所在位置的地理坐標,並使用Socket網路編程實現移動終端與伺服器端進行通信,利用移動數據網路向伺服器發送地理經緯度坐標及服務請求;第二是根據用戶的位置和伺服器發送過來的響應數據,在APP中進行展示和操作。伺服器端的主要功能分為兩個部分,第一個部分是開發一個伺服器端監聽軟體,對相應網路埠進行監聽,接收來自各個移動終端所發送過來的數據,並將數據解析後存入資料庫。第二個部分的功能是將數據進行挖掘和分析,並通過網頁以可視化的形式展示給相關人員。下面就系統的定位功能、地圖顯示和用戶軌跡挖掘模塊的設計進行詳細介紹。


  定位功能設計

獲取用戶位置是LBS系統提供服務的前提,常用的定位方式有基於GPS(全球定位系統)的定位方式、基於移動通信基站的定位方式和基於Wi-Fi的定位方式三種。基於GPS的定位方式是利用移動終端上的GPS定位模塊接收導航衛星發送的廣播信號,計算出用戶所在方位,該方式是目前最為精確、應用最為廣泛的定位導航技術,但它是採用終端計算,計算速度慢且終端能耗較高,此外,該方式在室內使用時由於存在信號接收的盲區,定位成功率低。基於移動通信基站的定位是根據移動設備偵測到的不同移動通信基站(Cell Tower)下行導頻的TOA(Time of Arrival,到達時刻)信息,結合資料庫中的基站坐標,計算其具體位置,這種方式具有覆蓋廣,適用於室、內外多種定位場景,定位速度快,能耗低的優點,但定位精確定位較低,一般為100m-300m,且用戶需要為定位過程中使用的流量付費。基於Wi-Fi的定位方式通過獲取附近周圍所有的無線網路熱點(Wi-Fi Access Point)的MAC地址,比對資料庫中該MAC地址對應的坐標,計算出用戶所在位置,它具有定位速度快,精度較高且能耗低的優勢,一般為30m-150m,但需要區域大量部署Wi-Fi熱點。

由於高校校園建築的布局相對集中,教學樓、辦公樓等分布較為密集,對定位的精度和成功率等要求較高,單一的某種定位方式無法滿足需求,需要採用綜合定位的方式。綜合定位即根據設備當前的實際情況,如是否開啟GPS,是否連接GPRS網路,是否掃描到Wi-Fi信息等生成定位依據,同時,根據用戶當前所處環境自動判斷並選擇一種最優的定位方式。當用戶處在室外時,採用GPS定位方式為主,其他定位方式為輔的定位策略,當用戶在室內時則使用Wi-Fi或者移動通信基站定位方式。

地圖顯示功能的實現

地圖服務可以直接選用谷歌、百度和高德等數字地圖服務提供商提供的公共地圖介面,研發人員遵循地圖介面的開發規範進行開發和使用即可獲得相應的地圖服務。但是,這些公共的地圖服務中的校園基礎數據不夠詳細,更新速度較慢,無法直接滿足服務需求。因此,需要將校園內的基礎信息,如教學樓棟信息,常用設施、設備信息和校園資訊等,進行統一收集、整合和分類管理,建立基礎信息資料庫並分類存儲,然後對外提供統一的介面,開發時調用該數據介面,獲得數據,最後再結合地圖公共介面進行二次開發,在地圖上實現位置標註,線路規劃,周邊查詢等功能。這樣既能滿足數字化校園服務的個性化需求又能最大程度地降低研發成本。

  用戶軌跡挖掘的實現

當今校園的發展使校園管理層面臨三大挑戰:第一,目前校園的基礎設施和相關服務都處在不斷變化和擴展的階段,校園管理者如何全面、及時地把握物理空間和人員的動態,簡單直接地獲取校園信息,為校園教學、科研和管理活動提供精確、可靠的資料;第二,校園人口活躍度不斷變化,管理人員如何全面、及時地了解校園不同區域的人口活動及其規模,通過數字化的直觀呈現和科學預測,從而優化校園管理和應對突發事件;第三,在以往的校園信息化歷程中,在各個部門,領域都積累了一些原始數據,校園管理者如何將這些數據進行收集、整合和挖掘,進一步為用戶提供更智能的服務。基於位置的信息服務系統可以獲取所有用戶的屬性及位置信息,因此,可以通過建立用戶位置信息庫,針對用戶的軌跡進行挖掘,分析校園各個時間段的人流量密度分布情況,並在地圖中繪製歷史和當前人流量密度分布地圖,管理人員便可直觀清晰地查看校園動態信息,並據此制定調度和管理策略。

除此以外,還可以針對單個的用戶屬性信息,如究竟是學生還是老師,是新生還是畢業生等,針對個性化用戶軌跡進行挖掘,進而根據用戶的需求主動提供服務。由於用戶軌跡記錄了用戶所關注的活動場所,而這些活動場所能夠在一定程度上反映出了個人的意圖、興趣和行為模式。如某個用戶的軌跡經常出現在校園大型會議廳講堂區域,表明該用戶可能對大型會議、學術講座有一定的興趣等;而那些經常出現在運動場所的路線也表徵用戶對體育運動的偏好。通過挖掘用戶軌跡中的信息,實現根據用戶的需求主動提供服務的目的需要三個主要步驟:第一,要根據每項具體的服務建立經驗模型,如希望針對應屆畢業生提供智能服務,就應該根據已有的信息建立模型,如常用招聘場所的位置坐標等;第二,從每個用戶軌跡中提取停留點,利用基於密度的聚類演算法,針對這個停留點的集合進行層次化聚類,在不同的地理尺度上,將相近的停留點劃分到同一個聚類;第三,選擇合適的粒度,將用戶停留點的數據與經驗模型進行匹配,如果兩者能達到一定程度的相似性,則可以將用戶劃分為具有同一屬性。這樣,便可向該用戶推送與校園招聘相關的信息,如當用戶進入招聘區域附近時,便主動為其推送該區域的最新招聘信息,如招聘公司介紹,招聘會召開時間、所需職位等用戶關心的信息。

  系統的實現

通過對基於LBS校園信息服務的整體需求、系統總體架構(系統分層結構,系統運行流程和系統功能模塊)以及系統涉及的核心技術的全面研究,初步建立了中南大學LBS信息服務系統,實現了系統中的部分核心功能。中南大學校區分布相對分散,全校由分布在長沙市區的六個校區和三個附屬醫院組成,對位置服務的需求較大。學校已建成繞城的萬兆光纖網,通過「數字中南」的建設,校園網路以光纖、無線等方式基本覆蓋學校全部園區,為信息服務的建設提供了很好的條件。系統的客戶端是基於Android平台實現的,它以Linux內核結合系統框架層、應用層,並通過Activity、Service、Content Provide、Receiver等四大組件提供對外的基礎應用API,並支持JAVA、C/C++等多種編程語言,極大地降低了移動應用的開發門檻。下面將選擇系統的幾個重要功能模塊進行簡單的介紹。



LBS應用中有一項功能:附近的人。 很多人會想知道在伺服器端如何更高效快速地計算距離?下面我們來具體了解一下什麼是LBS,LBS又是如何計算距離的。


  • 什麼是LBS?

基於位置的服務(Location Based Service,LBS),它是通過電信移動營業商的無線電通訊網路(如GSM網、CDMA網)或外部定位方式(如GPS)獲取移動終端用戶的位置信息(地理坐標,或大地坐標),在GIS(Geographic Information System,地理信息系統)平台的支持下,為用戶提供相應服務的一種增值業務。

LBS應用中"附近的人"在伺服器端如何更高效快速地計算距離

  • LBS的含義:

首先是確定移動設備或用戶所在的地理位置;其次是提供與位置相關的各類信息服務。意指與定位相關的各類服務系統,簡稱"定位服務",另外一種叫法為MPS-Mobile Position Services, 也稱為"移動定位服務"系統。 如找到手機用戶的當前地理位置,然後在上海市6340平方公里範圍內尋找手機用戶當前位置處1公里範圍內的賓館、影院、圖書館、加油站等的名稱和地址。所以說LBS就是要藉助互聯網或無線網路,在固定用戶或移動用戶之間,完成定位和服務兩大功能。

LBS應用中"附近的人"在伺服器端如何更高效快速地計算距離

  • LBS定位模式:

1. 周邊生活服務的搜索: 以點評網或者生活信息類網站與地理位置服務結合的模式。主要體驗在於工具性的實用特質,問題在於信息量的積累和覆蓋面需要比較廣泛。

2 地點交友,即時通訊:不同的用戶因為在同一時間處於同一地理位置構建用戶關鍵。

3. 以地理位置為基礎的小型社區: 地理位置為基礎的小型社區

LBS應用中"附近的人"在伺服器端如何更高效快速地計算距離

  • LBS應用的特點:

要求覆蓋率高:一方面要求覆蓋的範圍足夠大。另一方面要求覆蓋的範圍包括室內。用戶大部分時 間是在室內使用該功能,從高層建築和地下設施必須保證覆蓋到每個角落。根據覆蓋率的範圍,可以分為三種覆蓋率的定位服務:在整個本地網、覆蓋部分本地網和提供漫遊網路服務類型。除了考慮覆蓋率外,網路結構和動態變化的環境因素也可能使一個電信運營商無法保證在本地網路或漫遊網路中的服務。

定位精度:

1.手機定位應該根據用戶服務需求的不同提供不同的精度服務,並可以提供給用戶選擇精度的權利。例如美國FCC推出的定位精度在50米以內的概率為67%,定位精度在150米以內的概率為95%。定位精度一方面與採用的定位技術有關,另外還要取決於提供業務的外部環境,包括無線電傳播環境、基站的密度和地理位置、以及定位所用設備等。

2.移動位置服務被認為是繼簡訊之後的殺手級業務之一, 有著巨大的市場規模和良好的盈利前景, 但實際進展比較緩慢。不過, 隨著產業鏈的完善, 移動位置和位置服務市場有望日益壯大。自2008 年開始全球 LBS 運營市場將會開始加速成長, 但是在開展的同時要非常注意業務和網路性能的平衡點, 應該在保障網路性能的同時最大可能的保證業務的開展。

3.基於LBS的服務業務也得到了蓬勃地發展,各種開放式API得到了廣泛的使用。如西橋科技的Cobub服務,就為用戶提供了開放式的API服務。註冊用戶可以根據不同的需要來使用對應的服務,如通過IP查尋經緯度、通過WIFI MAC地址查尋、通過手機基站信息查尋地址、通過經緯度查尋地址、通過地址查尋經緯度等服務。

  • 總結:

LBS的應用只是給我們一個大致的地理位置和距離,但是不是絕對的,具體距離還是要考慮實際情況而定,不要盲目的去確定哦。



LBS是基於位置的服務,它是通過電信移動運營商的無線電通訊網路或外部定位方式,獲取移動終端用戶的位置信息,在地理信息系統平台的支持下,為用戶提供相應服務的一種增值業務。

總體上看LBS由移動通信網路和計算機網路結合而成兩個網路之間通過網關實現交互。移動終端通過移動通信網路發出請求,經過網關傳遞給LBS服務平台;服務平台根據用戶請求和用戶當前位置進行處理。並將結果通過網關返回給用戶。

LBS應用中"附近的人"在伺服器端如何更高效快速地計算距離

要求覆蓋率高

一方面要求覆蓋的範圍足夠大。另一方面要求覆蓋的範圍包括室內。

用戶大部分時間是在室內使用該功能,從高層建築和地下設施必須保證覆蓋到每個角落。根據覆蓋率的範圍,可以分為三種覆蓋率的定位服務:在整個本地網、覆蓋部分本地網和提供漫遊網路服務類型。除了考慮覆蓋率外,網路結構和動態變化的環境因素也可能使一個電信運營商無法保證在本地網路或漫遊網路中的服務。

LBS應用中"附近的人"在伺服器端如何更高效快速地計算距離

geohash的演算法這需要插入或更新點坐標時構建對應的樹。可以建議使用kd樹,效率會更高點。快速全球索引的設計思想是基於geohash的,效率也不錯。利用資料庫的空間索引。其實對於「一般的」lbs應用,mongodb的空間索引足夠簡單和強大。

LBS應用中"附近的人"在伺服器端如何更高效快速地計算距離

隨著3G的普及和流行,我國的LBS服務將會越來越完善,目前國內已經有一些廠商開始研發相關終端產品。比如聰聰科技的發現者系列,結合自身搭建的系統平台,可以實現對終端的精確定位,和歷史軌跡查詢等功能。



用經緯度做索引,

?

LBS應用中"附近的人"在伺服器端如何更高效快速地計算距離

  • 先粗算,比如把經緯度差一以上的全去掉,where latitude>y-1 and latitude<y+1 and longitude>x-1 and longitude <x+1 and ... ; x,y為當前用戶的經緯度。

  • LBS應用中"附近的人"在伺服器端如何更高效快速地計算距離

  • 再小範圍概算,使用類似這樣的公式 order by abs(longitude -x)+abs(latitude -y) limit 100;

  • 最後顯示時再精確計算 使用類似這樣的公式:(2 * 6378.137* ASIN(SQRT(POW(SIN(PI()*(y-lat)/360),2)+COS(PI()*x/180)* COS(lat * PI()/180)*POW(SIN(PI()*(x-lng)/360),2))))。

前兩項在資料庫端計算,後一項在應用伺服器端計算即可。

LBS應用中"附近的人"在伺服器端如何更高效快速地計算距離

利用資料庫的空間索引。其實對於「一般的」lbs應用,mongodb的空間索引足夠簡單和強大。

我們在生產環境用過這個。

但是如果你是想算某一個時間段內某一個區域覆蓋範圍有多少人而不是從近到遠找100個人,光是mongo可能在大數據量的時候不太夠,到時候就要自己想辦法拉。



推薦閱讀:

TAG:Android開發 | 前端開發 | 互聯網 | 編程 | 計算 |