项目背景:在鱼塘检测中,测氧含量的机器比较昂贵,传统的情况是一个鱼塘分散式地多布置一些测氧含量的机器,来完成检测。现在我们提出的解决方案是:小船搭载测氧机按既定轨道运行,来实现多地点信息采集。为了监控小船的运行轨迹,小船配有GPS北斗,传输经纬度信号到PC主机,来实现运行轨迹的绘制。
自己造个轮子来绘制图像是不显示的,想到百度地图提供API,现在把问题简化到PC通过串口收到经纬度信号,波特率为9600,如何在web端百度地图中,显示当前的位置。
要想读串口数据,轻量级的JavaScript不能实现,选择面向对象的语言Java;
要想绘制轨迹,需要保存历史的经纬度数据,这需要数据库来实现;
这里提供GPS坐标转成百度坐标的代码
来源:http://developer.baidu.com/map/jsdemo.htm#a5_2
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<style type="text/css">
body, html,#allmap {width: 100%;height: 100%;overflow: hidden;margin:0;font-family:"微软雅黑";}
</style>
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=您的密钥"></script>
<script type="text/javascript" src="http://developer.baidu.com/map/jsdemo/demo/convertor.js"></script>
<title>GPS转百度</title>
</head>
<body>
<div id="allmap"></div>
</body>
</html>
<script type="text/javascript">
// 百度地图API功能
//GPS坐标
var xx = 120.397428;
var yy = 31.90923;
var gpsPoint = new BMap.Point(xx,yy);
//地图初始化
var bm = new BMap.Map("allmap");
bm.centerAndZoom(gpsPoint, 15);
bm.addControl(new BMap.NavigationControl());
//添加谷歌marker和label
var markergps = new BMap.Marker(gpsPoint);
bm.addOverlay(markergps); //添加GPS标注
var labelgps = new BMap.Label("我是GPS标注哦",{offset:new BMap.Size(20,-10)});
markergps.setLabel(labelgps); //添加GPS标注
//坐标转换完之后的回调函数
translateCallback = function (point){
var marker = new BMap.Marker(point);
bm.addOverlay(marker);
var label = new BMap.Label("我是百度标注哦",{offset:new BMap.Size(20,-10)});
marker.setLabel(label); //添加百度label
bm.setCenter(point);
alert(point.lng + "," + point.lat);
}
setTimeout(function(){
BMap.Convertor.translate(gpsPoint,0,translateCallback); //真实经纬度转成百度坐标
}, 2000);
</script>
附录:百度提供鹰眼。