mapbar -- 实时在地图上标注车辆位置

正做一个车辆实时跟踪的东东,车辆位置是实时变化的,需要在地图上标注车辆的位置,
其实做法很简单,如果是mapx或者其它地图控件,直接增加一个图层,然后在图层上画车辆就行了,
但 mapbar 就不行,虽然 mapbar 能提供标注功能,但那个标注信息是需要写入地图信息数据库的,
无法实现标注实时变化的车辆位置,因为客户端是用脚本处理的,对于一些位置的处理,都得用脚本,
所以可以尝试自己在地图上画车辆位置,自己画
这就得知道地图的经纬度情况,因为初始位置可以设置车辆位置为地图中心点,然后在中心点显示位置,
这里可以参考地图提供的MMarker对象,MMarker是用来标注位置的,这里得说一下mapbar地图的一些属性和方法,

var maplet = null;
var marker = null;

function initMap(){
    maplet = new Maplet("mapbar");
    var sa = new Array();
    for(var i in maplet){
        var s = i.htmlEncode();
        var v = maplet[i] + "";
        v = v.htmlEncode();
        if(i.length<20){
            s = s + "                      ";
            s = s.substr(0,20);
        }
        sa[sa.length] = s.htmlEncode() + " " + v;
    }
    sa.sort();
    var ss = sa.join("<br>");
    var win = window.open();
    win.document.write("<pre style='font-size:9pt'>" + ss + "</pre>");
}

添加标注的代码格式就是:

var marker = new MMarker(
    point,
    new MIcon("../images/test.gif",32,32)
);
maplet.addOverlay(marker);

这里关键的就是MMarker构造函数的第一个参数该怎么设置,
我们需要知道第一个参数的格式,遗憾的是脚本无法获取参数的具体类型,
不过可以参照设置中心点的语句:

    maplet.centerAndZoom(new MPoint(108.1911,22.4912), 10);

这里参数一是点,点是代表经纬度,那MMarker第一个参数是不是也是这种格式?
我们试着传递这个参数看看:

var marker = new MMarker(
    new MPoint(108.1911,22.4912),
    new MIcon("../images/test.gif",32,32)
);
maplet.addOverlay(marker);

测试真的能在那个位置标注出来,这样添加标注后,
即使移动地图,将标注移出可见区域,然后再移进可见区域,标注点依旧可见,
如果不用地图的标注功能,自己在上面画标注点,那就得进行屏幕坐标与经纬度的转化,并控制是否可见,
既然地图提供标注功能,直接用现成的,就方便多了。

有兴趣的可以研究一下客户端的控制,并可以增加一些实用的功能,
比如在地图上绘制车辆一段时间内的行驶路线。

注意,添加标注后,存在一个小bug,就是标注的图标区域不能接受鼠标事件。

图标添加上去了,那怎么添加文字说明呢,车辆位置跟踪,还得显示车号啊,如果有多辆车时。
不知道是否提供显示文字的功能,有两种做法,一种就是将文字放到图标上(文字生成图片),
另一种方式就是自己根据图标位置显示文字。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个使用高德地图纠偏API的调用实例: 假设我们有一组GPS坐标数据,经度为120.123456,纬度为31.654321。这些坐标数据是从一台设备上收集到的,但是由于设备误差等原因,这些坐标数据可能存在偏差。我们希望通过高德地图的纠偏API将这些坐标数据进行纠偏,得到更准确的位置信息。 首先,我们需要准备以下参数: 1. 高德地图API的请求地址:https://restapi.amap.com/v3/assistant/coordinate/convert 2. API的请求参数: 参数名 | 参数含义 | 示例值 ----- | ------- | ----- key | 高德地图API的密钥 | abcdefg123456789 locations | 待纠偏的坐标数据 | 120.123456,31.654321 coordsys | 待纠偏的坐标系,可选值为gps、mapbar、baidu、autonavi,默认为gps | gps 然后,我们可以使用Python的requests库来发起API请求,代码如下: ```python import requests key = 'abcdefg123456789' locations = '120.123456,31.654321' coordsys = 'gps' url = 'https://restapi.amap.com/v3/assistant/coordinate/convert?key={}&locations={}&coordsys={}'.format(key, locations, coordsys) response = requests.get(url) if response.status_code == 200: data = response.json() if data['status'] == '1': result = data['locations'] print('纠偏后的坐标为:{}'.format(result)) else: print('API请求失败,错误信息为:{}'.format(data['info'])) else: print('API请求失败,状态码为:{}'.format(response.status_code)) ``` 以上代码将向高德地图API发送一个GET请求,并将API返回的JSON数据解析出纠偏后的坐标。最后,程序会输出纠偏后的坐标,例如: ``` 纠偏后的坐标为:120.1290235512,31.6507305337 ``` 这个坐标比原始坐标更准确,可以用于进一步的位置分析和应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值