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