EasyGBS批量导入摄像头设备经纬度的实现方法和注意点

EasyGBS已经加入了摄像头的定位功能,在摄像头设备接入过多时,可以通过经纬度快速定位到不同设备的所处位置。

image.png

在某项目中,EasyGBS现场接入数量较大,同时对方需要每个接入点都需要设置准确的经纬度。但一个一个通道的录入经纬度信息,耗时费力,且不能保证录入的准确性,因此需要一个批量导入通道经纬度信息的功能,本文我们就对该功能的实现进行一些分享。

该功能为了方便用户使用,主要是通过web端实现,远程通过规定格式的Excel表格将经纬度信息更新到服务器端。

image.png

在该功能的开发中,我们需要注意以下四点:

1.导入信息的通道编号/设备编号和通道名称必须有一个是正确的(此条事项是为了配合现场,理论上该功能应以ID导入必须正确且唯一);
2.如果以通道名称或ID有重复,后者会覆盖前者的的经纬度信息;
3.如果导入表格格式错误,或有空行或空列会直接返回;
4.如果表格中有错误数据,则只录入之前正确的行,并返回错误行信息。

以下为实现功能的参考代码:

func importPosition(file *xlsx.File)error{
   for _,sheet := range file.Sheets{
      switch sheet.Name {
      case "通道经纬度":
         if len(sheet.Rows) <=2{
            return fmt.Errorf("导入内容为空")
         }
         //读取单通道经纬度信息
         for index,row := range sheet.Rows[2:]{
            var channel models.Channel
            //读取通道每列信息
            for i,cell := range row.Cells{
               switch i {
               case 0:
                  channel.DeviceID = cell.String()
               case 1:
                  channel.ID = cell.String()
               case 2:
                  channel.Name = cell.String()
               case 3:
                  f ,err := cell.Float()
                  if err != nil{
                     return fmt.Errorf("第%d行 %s经度有误%v",index+3,channel.ID,cell.String())
                  }
                  channel.Longitude = f
               case 4:
                  f ,err := cell.Float()
                  if err != nil{
                     return fmt.Errorf("第%d行 %s纬度有误%v",index+3,channel.ID,cell.String())
                  }
                  channel.Latitude = f
               default:
                  return fmt.Errorf("导入表格列数有误请检查,有未知列")
               }
            }
            if err := models.UpdatePosition(channel); err != nil {
               return fmt.Errorf("导入信息第%d行有误,未找到对应通道",index+3)
            }
         }
      }
   }
   return nil
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值