2***@qq.com
2***@qq.com
  • 发布:2019-10-12 11:02
  • 更新:2019-10-29 15:11
  • 阅读:1327

H5+地图计算距离相差太大

分类:HTML5+
function plusReady() {  
                qddk="定位中...";  
                qtdk="定位中...";  
                $("#kqxs").val(0);  
                map = new plus.maps.Map("map"); //地图显示  
                map.centerAndZoom(new plus.maps.Point("117.266291", "31.857401"), zoom); //设置地图中心坐标  
                var marker=new plus.maps.Marker(new plus.maps.Point("117.266291", "31.857401"));  
                map.addOverlay(marker);  
                muiajax();  
            }  
            // 获取用户的当前位置信息  
            function getUserLocation() {  
                map.getUserLocation(function(state, point) {  
                    if(0 == state) {  
                        form.jd.value = point.longitude;//经度  
                        form.wd.value = point.latitude;//纬度  
                        map.showUserLocation( true );  
                        console.log("当前位置:jd="+point.longitude+";wd="+point.latitude);  
                        map.centerAndZoom(point, zoom); //设置地图中心坐标  
                        //map.showUserLocation(true);  
                        plus.maps.Map.reverseGeocode(point, {}, function(event) {  
                            form.dkdz.value = event.address;  
                        },function(error){  
                            var code = error.code; // 错误编码  
                            var message = error.message; // 错误描述信息  
                            console.log(code+","+message);  
                        });  
                        //设置点  
                        //坐标点  
                        var center = new plus.maps.Point(log, lat);//公司坐标点  
                        console.log(JSON.stringify(center)+"\n"+JSON.stringify(point));  
                        plus.maps.Map.calculateDistance(center, point,  
                            function(event) { //计算距离成功  
                                form.dkjl.value = event.distance; //单位米,返回两点  
                                console.log("实际距离:"+event.distance);  
                                var htmlstr = "";  
                                if(parseFloat(event.distance) > parseFloat($("#jl").val())) { //不可打卡  
                                    htmlstr += "<i class='mui-icon hits-icon-daka-no'>&nbsp;</i>距考勤点" + (event.distance / 1000).toFixed(2) + "km,不在考勤范围内<br>";  
                                    qddk = "不在考勤范围内!";  
                                    qtdk = "不在考勤范围内!";  
                                } else { //可打卡  
                                    htmlstr += "<i class='mui-icon hits-icon-daka-yes'>&nbsp;</i>已进入考勤范围,可以打卡<br>";  
                                    qddk = "";  
                                    qtdk = "";  
                                }  
                                $("#dkms").html(htmlstr);  
                            },  
                            function(event) { //计算距离失败  
                                dkxs("计算距离失败");  
                            });  
                    } else {  
                        dkxs("获取定位失败");  
                    }  
                });  
            }

10:59:01.263 Distance:910.9691162109375 at page/gz/kq/kq_nq.html:27

这个方法计算的距离是910米,差距太大了吧

看了一下,在百度地图上显示的位置是对的,但获取到当前坐标后,再在百度地图上展示,相差了1公里左右

2019-10-12 11:02 负责人:无 分享
已邀请:
DCloud_App_Array

DCloud_App_Array

var center = new plus.maps.Point(log, lat);//公司坐标点
这里log和lat的值哪里来的?计算距离是需要两个坐标点,并且必须是相同的坐标系,才能获取准确的值。

2***@qq.com

2***@qq.com (作者)

这个是用百度js地图获取的坐标,存放到数据库的。
我查了一下,发现内置地图是高德地图,现在是打包过后,安卓是正常的,苹果端相差0.9前面,
如果我加上坐标转换,安卓也不正常了

plus.maps.Map.convertCoordinates( center, {  
                            coordType:"bd09ll"  
                        }, function( event){  
                            center = event.coord;  // 转换后的坐标值  
                            var coordType = event.coordType;    // 转换后的坐标系类型  
                            console.log("coordType="+coordType);  
                            //alert(coordType); */  
                            plus.maps.Map.calculateDistance(center, point,  
                                function(event) { //计算距离成功  
                                    form.dkjl.value = event.distance; //单位米,返回两点  
                                    var htmlstr = "";  
                                    if(parseFloat(event.distance) > parseFloat($("#jl").val())) { //不可打卡  
                                        htmlstr += "<i class='mui-icon hits-icon-daka-no'>&nbsp;</i>距考勤点" + (event.distance / 1000).toFixed(2) + "km,不在考勤范围内<br>";  
                                        qddk = "不在考勤范围内!";  
                                        qtdk = "不在考勤范围内!";  
                                    } else { //可打卡  
                                        htmlstr += "<i class='mui-icon hits-icon-daka-yes'>&nbsp;</i>已进入考勤范围,可以打卡<br>";  
                                        qddk = "";  
                                        qtdk = "";  
                                    }  
                                    $("#dkms").html(htmlstr);  
                                },  
                                function(event) { //计算距离失败  
                                    dkxs("计算距离失败");  
                                });  
                         }, function(error){  
                            var code = error.code; // 错误编码  
                            var message = error.message; // 错误描述信息  
                            console.log("message="+message);  
                            mui.alert("错误提示",code+":"+message);  
                        });

差距也是0.9km

2***@qq.com

2***@qq.com (作者)

我找到原因了, HbuliderX最新版本内置变成高德地图,现在打包,安卓是正常的,ios打包地图百世内置地图,没有变成百度地图

该问题目前已经被锁定, 无法添加新回复