GPS坐標(biāo)在基于WGS84坐標(biāo)系統(tǒng)的地圖上顯示出現(xiàn)偏移,誤差很大,而且不是線性的,網(wǎng)上有人給出算法公式,都是胡說八道,根本不好用,更離譜的還要根據(jù)不同的城市,進(jìn)行不同的加偏,還有的提供了一個(gè)加偏數(shù)據(jù)庫,瞎扯淡。
商業(yè)地圖數(shù)據(jù)提供和服務(wù)提供商,都必須要到國家測繪管理部門,進(jìn)行評審?fù)ㄟ^后才能在大陸發(fā)布,谷歌地圖也也一樣。地圖服務(wù)器商都需將真實(shí)坐標(biāo)的電子地圖,加密成火星地圖和火星坐標(biāo)。
GPS導(dǎo)航設(shè)備也一樣。
開發(fā)者之所以遇到偏移的悲劇,主要原因是:
GPS設(shè)備是小公司開發(fā)的,沒有做加偏,所以在經(jīng)過加偏的正版地圖和谷歌、百度、Bing地圖上是偏移的。
所以偏移其實(shí)給地圖一點(diǎn)關(guān)系都沒有,管你是谷歌、百度還是搜狐地圖,只要對GPS坐標(biāo)進(jìn)行加偏處理就能夠解決這個(gè)問題。
為了解決偏移的問題,我就開發(fā)了一個(gè)糾偏的動態(tài)庫給開發(fā)者來使用,直接在.NET的工程項(xiàng)目中調(diào)用轉(zhuǎn)換方法即可,絕對好用,在谷歌和百度地圖上,車輛行駛的軌跡和地圖的道路是嚴(yán)絲合縫的吻合的。
本系統(tǒng)是實(shí)時(shí)加偏,采用加偏算法和逆向糾偏算法,可以實(shí)時(shí)的進(jìn)行百度地圖的坐標(biāo)系統(tǒng)轉(zhuǎn)換,不需要百度自帶的webservice服務(wù),避免了百度調(diào)用接口的限制及性能的損失,因?yàn)槊看芜h(yuǎn)程調(diào)用http,都要耗費(fèi)不固定的遠(yuǎn)程調(diào)用時(shí)間及調(diào)用超時(shí)的時(shí)間。
另外存在一個(gè)問題是,無論是那個(gè)地圖,在地圖上畫的區(qū)域存儲在數(shù)據(jù)庫的都是自己地圖坐標(biāo)系統(tǒng)的經(jīng)緯度節(jié)點(diǎn),如果要進(jìn)行電子圍欄報(bào)警,下發(fā)給終端的時(shí)候,終端是百分百誤報(bào)的,因?yàn)榻K端的坐標(biāo)和地圖坐標(biāo)系統(tǒng)不符,需要在下發(fā)給終端前,還原成原始坐標(biāo)再下發(fā)給終端。所以就需要逆向還原的糾偏算法。我們提供正向和反向的算法庫。
GPS算法服務(wù)庫Demo 已下載 82 次
view source開發(fā)說明:
1 | double latitude = 38.123; |
2 | double longitude = 124.5; |
3 | //單個(gè)坐標(biāo)轉(zhuǎn)換 |
4 | GpsPoint gp = MapFix.Fix(latitude, longitude); |
6 | List<GpsPoint> needTransformGpsPoints; |
7 | List<GpsPoint> gpsPoints = MapFix.Fix(needTransformGpsPoints); |