随笔 - 936  文章 - 0  评论 - 3  阅读 - 30万

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

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

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

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

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

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
}
posted on   EasyGBS  阅读(336)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· 地球OL攻略 —— 某应届生求职总结
历史上的今天:
2020-08-19 国标GB28181客户端EasyGBS视频平台新增用户管理功能如何使用?
2020-08-19 AI养猪,国标GB28181协议视频平台EasyGBS流媒体服务器携手RTMP流媒体服务器EasyDSS协同打造智慧养殖生态圈
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示