EC20定位模块+百度地图API使用踩坑
1 模塊獲得定位數(shù)據(jù)
? ? 模塊裝上gps天線,使用usb線連接電腦。安裝模塊usb驅(qū)動,成功后打開設(shè)備管理器,可以看見模塊虛擬了3個串口。主要使用到AT和NMEA兩個串口(本設(shè)備為COM10和COM9)。
? ? ?使用串口調(diào)試助手連接COM10,波特率115200,發(fā)送指令:AT+QGPS=1(回車),返回OK打開定位。然后打開COM9,可以看見模塊發(fā)送上來的定位數(shù)據(jù),需要等一段時間才能得到穩(wěn)定的數(shù)據(jù)。也可以返回COM10,發(fā)送指令:AT+QGPSLOC?(回車),模塊會返回一條定位數(shù)據(jù):
+QGPSLOC:151219.0,2934.525787N,11413.135641E,0.7,188.0,2,208.25,0.0,0.0,050520,07
參考文章:EC20Demo。
注:本文所用數(shù)據(jù)是以百度給出例子生成的假數(shù)據(jù),僅作示例使用。
? ? 上述數(shù)據(jù)有效坐標(biāo)信息為??2934.525787N,11413.135641E,這個為NMEA的坐標(biāo)表示形式,需要轉(zhuǎn)換為標(biāo)準(zhǔn)格式,轉(zhuǎn)換代碼如下:
/** NMEA to 國際WGS-84 nm_lat:NMEA緯度,nm_lon:NMEA經(jīng)度*/private double[] NMEAToWGS84(double nm_lat, double nm_lon){double[] WG_lat_lon = new double[2];int laH = (int)Math.Floor(nm_lat / 100);double laL = (nm_lat - laH * 100) / 60;int loH = (int)Math.Floor(nm_lon / 100);double loL = (nm_lon - loH * 100) / 60;WG_lat_lon[0] = laH + laL;//標(biāo)準(zhǔn)緯度WG_lat_lon[1] = loH + loL;//標(biāo)準(zhǔn)經(jīng)度return WG_lat_lon;}? ? 得到經(jīng)度為:114.21892734521,緯度為:29.575429778924,這個就是國際標(biāo)準(zhǔn)WGS-84坐標(biāo)。
?2 坐標(biāo)轉(zhuǎn)換
? ? ?百度坐標(biāo)和國際坐標(biāo)不同,直接使用國際坐標(biāo)定位有很大的偏差,我們需要使用百度API轉(zhuǎn)換,API接口如下:
https://api.map.baidu.com/geoconv/v1/?coords=114.21892734521,29.575429778924&from=1&to=5&ak=你的密鑰 //GET請求? ? 其中coords=114.21892734521,29.575429778924就是上一步得到的經(jīng)緯度,from1&to&5表示從WGS84坐標(biāo)轉(zhuǎn)換為百度坐標(biāo),具體數(shù)字見下表。ak為開發(fā)者密鑰,申請方法見下一節(jié)。
??
? ? 返回結(jié)果:
{"status":0,"result":[{"x":114.2307519546763,"y":29.57908428837437}]}? ? 其中x即百度地圖經(jīng)度:114.2307519546763,y即百度地圖緯度:29.57908428837437。
? ? 得到百度坐標(biāo)后可以用百度坐標(biāo)拾取系統(tǒng)或者地球在線輸入坐標(biāo),查看地圖上的定位點。
延申閱讀:關(guān)于GPS坐標(biāo)系和地圖定位偏差、WGS84轉(zhuǎn)高德(火星)、高德轉(zhuǎn)百度。
注:民間未經(jīng)審批的測量糾偏是違法行為。
?3 地圖API示例
??? ? ?使用百度地圖API應(yīng)先在百度地圖開發(fā)平臺注冊為開發(fā)者,然后進(jìn)入控制臺,創(chuàng)建一個應(yīng)用,得到密鑰(AK)。
? ? 打開百度地圖JS API示例,示例提供了各種應(yīng)用場景的代碼,最簡單的顯示地圖代碼如下:
<!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="utf-8"><title>地圖展示</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="viewport" content="initial-scale=1.0, user-scalable=no"><meta http-equiv="X-UA-Compatible" content="IE=Edge"><style>body,html,#container {overflow: hidden;width: 100%;height: 100%;margin: 0;font-family: "微軟雅黑";}.info {z-index: 999;width: auto;min-width: 22rem;padding: .75rem 1.25rem;margin-left: 1.25rem;position: fixed;top: 1rem;background-color: #fff;border-radius: .25rem;font-size: 14px;color: #666;box-shadow: 0 2px 6px 0 rgba(27, 142, 236, 0.5);}</style><script src="https://api.map.baidu.com/api?type=webgl&v=1.0&ak=您的密鑰"></script> </head> <body><div class = "info">最新版GL地圖命名空間為BMapGL, 可按住鼠標(biāo)右鍵控制地圖旋轉(zhuǎn)、修改傾斜角度。</div><div id="container"></div> </body> </html> <script> var map = new BMapGL.Map('container'); // 創(chuàng)建Map實例 map.centerAndZoom(new BMapGL.Point(116.404, 39.915), 12); // 初始化地圖,設(shè)置中心點坐標(biāo)和地圖級別 map.enableScrollWheelZoom(true); // 開啟鼠標(biāo)滾輪縮放 </script>? ? ?新建一個txt文檔(例如Map.txt)將代碼復(fù)制粘貼進(jìn)去,保存,把后綴txt改成html(Map.html)再用瀏覽器打開即可顯示地圖。
? ? 需要注意的是,百度原示例中:
<script src="https://api.map.baidu.com/api?type=webgl&v=1.0&ak=您的密鑰"></script>
這條沒有https:,直接寫成src="//api.map.baidu.com/api?type=webgl&v=1.0&ak=您的密鑰",這樣會導(dǎo)致部分設(shè)備無法加載地圖,打開為空白頁。
? ? 可以使用其他程序載入這個地圖,例如C#中可以用webBrowser控件:
string str_url = Application.StartupPath + "\\Map.html"; Uri url = new Uri(str_url); webBrowser1.Url = url;?參考文章:C#調(diào)用百度地圖API經(jīng)驗分享
總結(jié)
坑1:輸入AT命令時記得加回車,不然不會有回應(yīng)
坑2:模塊返回來的坐標(biāo)是必須轉(zhuǎn)換才能用在百度地圖上,不然偏差很大
坑3:不要試圖自己測量糾偏,不然滴滴就是你的前車之鑒
坑4:src后網(wǎng)址要加https: 不然無法加載
總結(jié)
以上是生活随笔為你收集整理的EC20定位模块+百度地图API使用踩坑的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 传说中的扯淡
- 下一篇: 怎么做到ERP基础数据快速简单管理