地图测距在地图组件中属于一个比较小众的功能,但是又不得不提供,有时候用户希望直接在地图上选点,测算距离,尤其是在一些军事领域用的比较多,测距功能提炼出来的共性就是,每一段都有距离,最后鼠标右键或者双击结束测距,然后发个信号传过来总的距离。一般地图厂家也都提供了对应的事件,比如百度地图的addpoint事件表示每次添加一段线条就触发,drawend事件表示测距完成。为了统一处理,统一定一个信号传出对应的测距过程和测距结束。
在天地图的js交互过程中,发现有抄袭百度地图的设计思路,addpoint表示每点下一个点是一段路线,draw事件表示测距结束。目前发现腾讯地图没有提供直接的测距功能,而是提供的集合运算库Math.round(qq.maps.geometry.spherical.computeDistanceBetween(start, end)。
二、相关代码 void MapObjBaiDu::addDistanceTool(){ //添加测距工具/同时添加监听事件/监听点按下以及完成测距 html << QString(" var distanceTool;"); html << QString(" function initDistanceTool() {"); html << QString(" if (distanceTool) {return}"); html << QString(" distanceTool = new BMapLib.DistanceTool(map, {lineStroke:2});"); html << QString(" distanceTool.addEventListener('addpoint', function(e) {"); html << QString(" receiveData('distance', e.distance);"); html << QString(" });"); html << QString(" distanceTool.addEventListener('drawend', function(e) {"); html << QString(" receiveData('distanceend', e.distance);"); html << QString(" });"); html << QString(" }");}void MapObjGaoDe::addDistanceTool(){ //添加测距工具/同时添加监听事件/监听点按下以及完成测距 html << QString(" var distanceTool;"); html << QString(" function initDistanceTool() {"); html << QString(" if (distanceTool) {return}"); html << QString(" distanceTool = new AMap.RangingTool(map);"); html << QString(" distanceTool.on('addnode', function(e) {"); html << QString(" receiveData('distance', e.distance);"); html << QString(" });"); html << QString(" distanceTool.on('end', function(e) {"); html << QString(" receiveData('distanceend', e.distance);"); html << QString(" });"); html << QString(" }");}void MapObjTian::addDistanceTool(){ //添加测距工具/同时添加监听事件/监听点按下以及完成测距 html << QString(" var distanceTool;"); html << QString(" function initDistanceTool() {"); html << QString(" if (distanceTool) {return}"); html << QString(" distanceTool = new T.PolylineTool(map, {showLabel: true});"); html << QString(" distanceTool.addEventListener('addpoint', function(e) {"); html << QString(" receiveData('distance', getValue(e.currentDistance));"); html << QString(" });"); html << QString(" distanceTool.addEventListener('draw', function(e) {"); html << QString(" receiveData('distanceend', getValue(e.currentDistance));"); html << QString(" });"); html << QString(" }");}三、相关地址文件地址:https://pan.baidu.com/s/1ZxG-oyUKe286LPMPxOrO2A 提取码:o05q 文件名:bin_map.zip国内站点:https://gitee.com/feiyangqingyun国际站点:https://github.com/feiyangqingyun四、效果图