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
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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协同打造智慧养殖生态圈