填报校验

我设置了一个填报地址的页面,但是我想通过填报者填报的经纬度和系统中已经申请过的地址经纬度计算出两者的距离,如果填报的地址离库中已经有的地址距离小于1公里该填报地址就不能允许提交。不知道怎么控制,各位大神帮忙看看

FineReport yinli1989 发布于 2018-12-12 10:26
1min目标场景问卷 立即参与
回答问题
悬赏:4 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共3回答
最佳回答
6
圣体叶小凡Lv6高级互助
发布于2020-9-22 22:54

如果想要实时的话,那可以写加载结束事件,用js获取当前经纬度,然后在右上角的参数,用sql函数取出这个地点的经纬度,然后两者计算距离,最后将结果返回到页面,是否可以打卡,这个是我做过的案例,当然其中存在的问题是获取的经纬度偏差过大,定位不准,完整的js如下,stat是我自己维护的状态, lat1为数据库存储的维度,lng1为数据库存储的经度

image.png

if(stat == "0"){

   FR.location(function(status, message){ //获取地理位置,定位经纬度

if(status=="success") {

//定位成功,message返回经纬度值

//FR.Msg.alert("当前位置是" + message);

contentPane.setCellValue(6, 2, message);

contentPane.setCellValue(2,5,"初次签到可打卡");

} else {

//定位失败,message返回对应的错误信息

//FR.Msg.alert("定位失败"); //定位失败

contentPane.setCellValue(6, 2, "定位失败"); 

contentPane.setCellValue(2,5,"定位失败不可打卡");

}

});

}

else{

var jingdu = "";

var weidu = "";

FR.location(function(status, message) {

    if(status == "success") {

        //定位成功,message返回经纬度值 

        // FR.Msg.alert("当前位置是" + message);

        var aa = message.split(',');

        weidu = aa[0];

        jingdu = aa[1];

        var conv = "http://api.map.baidu.com/geoconv/v1/?ak=R4K04VR8ecTY9LUab6RkmmOz&coords=" + jingdu + "," + weidu + "&from=1&to=5&output=json";

        var lat2 = aa[0];

        var lng2 = aa[1];

        var radLat1 = lat1 * Math.PI / 180.0;

        var radLat2 = lat2 * Math.PI / 180.0;

        var a = radLat1 - radLat2;

        var b = lng1 * Math.PI / 180.0 - lng2 * Math.PI / 180.0;

        var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));

        s = s * 6378.137;

        s = Math.round(s * 10000) / 10;

  // contentPane.setCellValue(2,4,s); 

        if(s == null|| s.length == 0){

        contentPane.setCellValue(2,4,s); 

      contentPane.setCellValue(2,5,"定位失败不可打卡"); 

        } else if(s >2000){

         contentPane.setCellValue(2,4,s);

           contentPane.setCellValue(2,5,"不在打卡范围内"); 

        } else {

        contentPane.setCellValue(2,4,s);

        contentPane.setCellValue(2,5,"可以打卡"); 

        }

}else {

        //定位失败,message返回对应的错误信息 

        //FR.Msg.alert(message); //定位失败

         if(s == null|| s.length == 0){ 

      contentPane.setCellValue(2,4,s); 

      contentPane.setCellValue(2,5,"定位失败不可打卡"); 

      }

    }

});

}


最佳回答
1
snrtuemcLv8专家互助
发布于2020-9-22 19:29

参考JS实现局部刷新cpt-https://help.fanruan.com/finereport/doc-view-2421.html

利用sql函数,实时检查数据库,不符合要求,就提示



最佳回答
0
晓亮Lv7资深互助
发布于2018-12-12 10:36(编辑于 2018-12-12 10:39)

你这个距离算出来了吗?把算出来的单元格,设置一下校验不就行了吗?image.png

  • yinli1989 yinli1989(提问者) 不希望这样,我希望设置成填报完经纬度后如果不符合条件立即提示。
    2018-12-12 11:43 
  • 5关注人数
  • 732浏览人数
  • 最后回答于:2020-9-22 22:54
    请选择关闭问题的原因
    确定 取消
    返回顶部