public EMapPoint(string latlng, EnumMapCoordinates coordinates = EnumMapCoordinates.Wgs84) { var ll = latlng.Split(','); Lat = double.Parse(ll[0]); Lng = double.Parse(ll[1]); Coordinates = coordinates; }
public VTravel GetVTravel(int userId, int travelId, EnumMapCoordinates coordinates) { var vt = new VTravel(); vt.Travel = _rep.Get<ETravel>(p => p.Id == travelId && p.UserId == userId); if (vt.Travel == null) { throw new NullReferenceException("不存在该游记!"); } vt.TravelItems = _rep.Query<ETravelItem, EMedia, ETravelItem>() .LeftJoin<EMedia>((t, m) => t.ItemMediaId == m.Id) .Where(p => p.TravelId == travelId) .Select((t, m) => new Columns(t, m.MediaFiles.As("ExtMediaFileJson"))) .ToList(); if (vt.Travel.LineId.HasValue) { vt.Line = _rep.Get<ELine>(p => p.Id == vt.Travel.LineId.Value); } vt.User = _rep.Get<EUser>(p => p.Id == vt.Travel.UserId); switch (coordinates) { case EnumMapCoordinates.Gcj02: foreach (var item in vt.TravelItems) { if (item.ItemLatLng.HasValue()) { item.ItemLatLng = _mapService.Wgs84ToGcj02(new EMapPoint(item.ItemLatLng)).ToString(); } } if (vt.Line != null) { vt.Line.LinePoints = _mapService.Wgs84ToGcj02(vt.Line.LinePoints.ToObject<IList<EMapPoint>>().ToArray()).ToJson(); } break; case EnumMapCoordinates.Bd09: foreach (var item in vt.TravelItems) { if (item.ItemLatLng.HasValue()) { item.ItemLatLng = _mapService.Wgs84ToBd09(new EMapPoint(item.ItemLatLng)).ToString(); } } if (vt.Line != null) { vt.Line.LinePoints = _mapService.Wgs84ToBd09(vt.Line.LinePoints.ToObject<IList<EMapPoint>>().ToArray()).ToJson(); } break; default: break; } return vt; }
/// <summary> /// 定位监控 /// </summary> /// <param name="deviceIds"></param> /// <param name="coordinates"></param> /// <returns></returns> public ActionResult GetVDeviceCurrentData(string deviceIds, EnumMapCoordinates coordinates) { if (!deviceIds.HasValue()) { throw new ArgumentNullException("deviceIds"); } var vcs = _positionService.GetVDeviceCurrentDataDetail(deviceIds, coordinates); return JsonResult(vcs); }
public void SaveLine(ELine line, EnumMapCoordinates coordinates) { switch (coordinates) { case EnumMapCoordinates.Gcj02: line.LinePoints = _mapService.Gcj02ToWgs84(line.LinePoints.ToObject<IList<EMapPoint>>().ToArray()).ToJson(); break; default: break; } _rep.Save(line, p => p.Id == line.Id); }
public void AddArea(EArea area, EnumMapCoordinates coordinates) { switch (coordinates) { case EnumMapCoordinates.Gcj02: area.AreaPoints = _mapService.Gcj02ToWgs84(area.AreaPoints.ToObject<IList<EMapPoint>>().ToArray()).ToJson(); break; default: break; } _rep.Add(area); }
public void SaveArea(EArea area, EnumMapCoordinates coordinates) { switch (coordinates) { case EnumMapCoordinates.Gcj02: area.AreaPoints = _mapService.Gcj02ToWgs84(area.AreaPoints.ToObject<IList<EMapPoint>>().ToArray()).ToJson(); break; default: break; } _rep.Save(area, p => p.Id == area.Id); _cacheService.UpdateCacheDependent(CacheKey.Gps_Area_By_Id.GetFormat(area.Id)); }
/// <summary> /// 获取当前定位数据 /// </summary> /// <param name="coordinates"></param> /// <returns></returns> public VDeviceCurrentDataDetail GetVDeviceCurrentDataDetail(int? userId, int? deviceGroupId, EnumMapCoordinates coordinates) { var sp = new Spec<EDevice, EDeviceCurrentData>(); if (userId.HasValue) { sp.And(p => p.UserId == userId); } if (deviceGroupId.HasValue) { var deviceGroup = _rep.Get<EDeviceGroup>(p => p.Id == deviceGroupId); if (deviceGroup.IsRoot) { //如果当前查询的是根分类 那么把没有分类的车辆一并查询了 sp.And(p => p.DeviceGroupId == deviceGroupId || (p.UserId == deviceGroup.UserId && p.DeviceGroupId == 0)); } else { sp.And(p => p.DeviceGroupId == deviceGroupId); } } var list = _rep.Query<EDevice, EDeviceCurrentData, VDeviceCurrentData>() .LeftJoin<EDeviceCurrentData>((d, c) => d.Id == c.DeviceId) .Where(sp) .Select((d, c) => new Columns(d.Id.As("DeviceId"), d.DeviceName, c)).ToList(); return GetVDeviceCurrentDataDetailWrap(list, coordinates); }
/// <summary> /// 历史回放 /// </summary> /// <returns></returns> public ActionResult GetVDeviceHistoryData(int? deviceId, DateTime? startTime, DateTime? endTime, int stopTime, EnumMapCoordinates coordinates) { if (!deviceId.HasValue) { throw new ArgumentNullException("deviceId"); } if (!startTime.HasValue) { throw new ArgumentNullException("startTime"); } if (!endTime.HasValue) { throw new ArgumentNullException("endTime"); } var vhd = _positionService.GetVDeviceHistoryDataDetail(deviceId.Value, startTime.Value, endTime.Value, stopTime, coordinates); return JsonResult(vhd); }
public IPageList<ELine> SearchLines(int userId, EnumMapCoordinates coordinates, string searchKeyword, string orderName, string orderType, int pageIndex, int pageSize) { Spec<ELine> sp = new Spec<ELine>(); sp.And(p => p.UserId == userId); if (searchKeyword.HasValue()) { sp.And(p => p.LineName.Like(searchKeyword)); } CSpec<ELine> csp = new CSpec<ELine>(); if (orderName.HasValue()) { csp.And(orderName, orderType); } var list = _rep.GetPageList<ELine>(pageIndex, pageSize, sp, csp); switch (coordinates) { case EnumMapCoordinates.Gcj02: foreach (var item in list.List) { item.LinePoints = _mapService.Wgs84ToGcj02(item.LinePoints.ToObject<IList<EMapPoint>>().ToArray()).ToJson(); } break; case EnumMapCoordinates.Bd09: foreach (var item in list.List) { item.LinePoints = _mapService.Wgs84ToBd09(item.LinePoints.ToObject<IList<EMapPoint>>().ToArray()).ToJson(); } break; default: break; } return list; }
public EMapPoint(double lat, double lng, EnumMapCoordinates coordinates = EnumMapCoordinates.Wgs84) { Lat = lat; Lng = lng; Coordinates = coordinates; }
public ELine SaveHistoryDataToLine(int userId, string lineName, int deviceId, DateTime startTime, DateTime endTime ,EnumMapCoordinates coordinates) { var list = _positionService.GetDeviceHistoryDatas(deviceId, startTime, endTime); if (list.Count == 0) { throw new BusinessException("没有找到相关历史数据"); } var totalMileage = _mileageService.CalcMileage(list); var line = new ELine() { UserId = userId, LineName = lineName, TotalMileage = totalMileage, LinePoints = list.Select(p => new EMapPoint(p.E, p.F)).ToList().ToJson() }; _rep.Add(line); switch (coordinates) { case EnumMapCoordinates.Gcj02: line.LinePoints = _mapService.Wgs84ToGcj02(list.Select(p => new EMapPoint(p.E, p.F)).ToArray()).ToJson(); break; case EnumMapCoordinates.Bd09: line.LinePoints = _mapService.Wgs84ToBd09(list.Select(p => new EMapPoint(p.E, p.F)).ToArray()).ToJson(); break; default: break; } return line; }
/// <summary> /// 编辑 /// </summary> /// <returns></returns> public ActionResult EditLine(ELine line, EnumMapCoordinates coordinates) { if (line.Id == 0) { line.UserId = Passport.User.Id; _lineService.AddLine(line, coordinates); return JsonResult(line, "添加成功!"); } else { line.UserId = Passport.User.Id; _lineService.SaveLine(line, coordinates); return JsonResult(line, "保存成功!"); } }
public ActionResult GetAreas(EnumAreaType areaType, EnumMapCoordinates coordinates) { var os = _areaService.SearchAreas(Passport.User.Id, areaType, coordinates, base.SearchKeyword, base.OrderName, base.OrderType, base.PageIndex, base.PageSize); return JsonResult(os); }
/// <summary> /// 获取设备当前定位数据 /// </summary> /// <param name="deviceIds"></param> /// <returns></returns> public ActionResult GetVDeviceCurrentData(int deviceId, EnumMapCoordinates coordinates) { var vcs = _positionService.GetVDeviceCurrentData(deviceId, coordinates); return JsonResult(vcs); }
/// <summary> /// 定位监控 /// </summary> /// <param name="deviceIds"></param> /// <param name="coordinates"></param> /// <returns></returns> public ActionResult GetVDeviceCurrentDataDetail(int? userId, EnumMapCoordinates coordinates) { var vcs = _positionService.GetVDeviceCurrentDataDetail(userId,null,coordinates); return JsonResult(vcs); }
public ActionResult GetVTravel(int travelId,EnumMapCoordinates coordinates) { var vt = _aTravelService.GetVTravel(Passport.User.Id, travelId, coordinates); return JsonResult(vt); }
/// <summary> /// 获取历史轨迹 /// </summary> /// <returns></returns> public VDeviceHistoryDataDetail GetVDeviceHistoryDataDetail(int deviceId, DateTime st, DateTime et, int stoptime = 5, EnumMapCoordinates coordinates = EnumMapCoordinates.Gcj02) { //1、计算总里程 2、转换坐标 3、计算区间数据(停车、无数据) var result = new VDeviceHistoryDataDetail(); var device = _rep.Get<EDevice>(p => p.Id == deviceId); if (device == null) { throw new NullReferenceException("不存在设备!"); } var node = _nodeService.GetNodeByIdFromCache(device.NodeId); if (node == null) { throw new NullReferenceException("不存在节点!"); } //获取数据 并过滤未定位数据 百度地图 转换未定位坐标 会报错 故要过滤掉 未定位的数据 var list = _rep.GetTSqlCommand( "SELECT * FROM {0} WHERE A=?A AND I>=?ST AND I<=?ET ORDER BY I ASC".GetFormat(node.NodeDeviceHistoryTableName)) .AddParameter("A", deviceId) .AddParameter("ST", st) .AddParameter("ET", et) .SetConnectionString(node.NodeDeviceHistoryConnectionString) .ToList<EDeviceHistoryData>().Where(p => p.I > st && p.I < et && p.E != 0 && p.F != 0).ToArray(); //计算里程 result.TotalMileage = _mileageService.CalcMileage(list); EMapPoint[] spoints = list.Select(p => new EMapPoint(p.E, p.F)).ToArray(); EMapPoint[] npoints = null; //转换经纬度 switch (coordinates) { case EnumMapCoordinates.Gcj02: npoints = _mapService.Wgs84ToGcj02(spoints); break; case EnumMapCoordinates.Bd09: npoints = _mapService.Wgs84ToBd09(spoints); break; } if (npoints != null) { for (var i = 0; i < npoints.Length; i++) { list[i].E = npoints[i].Lat; list[i].F = npoints[i].Lng; } } for (var i = 0; i < list.Length; i++) { //区间信息记录分析 if (i > 0) { //计算区间时间点 var minutes = Convert.ToInt32((list[i].I - list[i - 1].I).TotalMinutes); if (minutes >= stoptime) { list[i - 1].J = true; var distance = Math.Round(_mapService.GetDistance(new EMapPoint(list[i].E, list[i].F), new EMapPoint(list[i - 1].E, list[i - 1].F)) / 1000, 2); if (distance > 2) { //无数据 list[i - 1].K = "无数据:{0}-{1} 间隔约{2}km,共 {3} ".GetFormat(list[i - 1].I, list[i].I, distance, DateTime.Now.AddMinutes(minutes).GetDateDiff(DateTime.Now)); list[i - 1].L = "/Areas/Gps/Content/Images/Marker/no_data.png"; list[i - 1].M = 1; } else { //正常停车 if (list[i - 1].I.Date == list[i].I.Date) { list[i - 1].K = "停车时间:{0} {1}-{2} 共 {3} ".GetFormat(list[i - 1].I.ToShortDateString(), list[i - 1].I.TimeOfDay, list[i].I.TimeOfDay, DateTime.Now.AddMinutes(minutes).GetDateDiff(DateTime.Now)); } else { list[i - 1].K = "停车时间:{0}-{1} 共 {2} ".GetFormat(list[i - 1].I, list[i].I, DateTime.Now.AddMinutes(minutes).GetDateDiff(DateTime.Now)); } list[i - 1].L = "/Areas/Gps/Content/Images/Marker/stop.png"; list[i - 1].M = 0; } } } } result.List = list; result.Device = _rep.Get<EDevice>(p => p.Id == deviceId); return result; }
public ActionResult SaveTravelItem(ETravelItem travelItem, EnumMapCoordinates coordinates) { _travelService.SaveTravelItem(travelItem, coordinates); return JsonResult(travelItem,"保存成功"); }
/// <summary> /// 编辑 /// </summary> /// <returns></returns> public ActionResult EditArea(EArea area, EnumMapCoordinates coordinates) { if (area.Id == 0) { area.UserId = Passport.User.Id; _areaService.AddArea(area, coordinates); return JsonResult(area, "添加成功!"); } else { area.UserId = Passport.User.Id; _areaService.SaveArea(area, coordinates); return JsonResult(area, "保存成功!"); } }
public ActionResult SaveHistoryDataToLine(string lineName, int deviceId, DateTime? startTime, DateTime? endTime, EnumMapCoordinates coordinates) { if (!startTime.HasValue) { throw new ArgumentNullException("startTime"); } if (!endTime.HasValue) { throw new ArgumentNullException("endTime"); } var line = _lineService.SaveHistoryDataToLine(Passport.User.Id, lineName, deviceId, startTime.Value, endTime.Value, coordinates); return JsonResult(line); }
/// <summary> /// 获取当前定位数据 /// </summary> /// <param name="deviceIds"></param> /// <param name="coordinates"></param> /// <returns></returns> public VDeviceCurrentDataDetail GetVDeviceCurrentDataDetail(string deviceIds, EnumMapCoordinates coordinates) { var list = _rep.Query<EDevice, EDeviceCurrentData, VDeviceCurrentData>() .LeftJoin<EDeviceCurrentData>((d, c) => d.Id == c.DeviceId) .Where(p => p.Id.In(deviceIds)) .Select((d, c) => new Columns(d.Id.As("DeviceId"), d.DeviceName, c)).ToList(); return GetVDeviceCurrentDataDetailWrap(list, coordinates); }
/// <summary> /// 历史回放 /// </summary> /// <returns></returns> public ActionResult GetVDeviceHistoryDataDetail(int? deviceId, DateTime? startTime, DateTime? endTime, int stopTime, EnumMapCoordinates coordinates) { if (!deviceId.HasValue) { throw new ArgumentNullException("deviceId"); } if (!startTime.HasValue) { throw new ArgumentNullException("startTime"); } if (!endTime.HasValue) { throw new ArgumentNullException("endTime"); } var vhd = _positionService.GetVDeviceHistoryDataDetail(deviceId.Value, startTime.Value.GetDayStartTime(), endTime.Value.GetDayEndTime(), stopTime, coordinates); var list = _positionService.VacuateEDeviceHistoryData(vhd.List, 500, 30); if (list.Count >= 500) { list = _positionService.VacuateEDeviceHistoryData(list, 1000, 50); } return JsonResult(new { vhd.TotalMileage , Points = list.Select(p => new { lat = p.E, lon = p.F, s = p.G, t = p.I, j = p.J, k = p.K, m = p.M }) }); }
/// <summary> /// 获取当前定位数据 /// </summary> /// <returns></returns> private VDeviceCurrentDataDetail GetVDeviceCurrentDataDetailWrap(IList<VDeviceCurrentData> list, EnumMapCoordinates coordinates) { //未定位 百度地图 转换未定位坐标 会报错 故要过滤掉 未定位的数据 var nlist = list.Where(p => p.Latitude == 0 || p.Longitude == 0).ToList(); //已定位 var ylist = list.Where(p => p.Latitude != 0 && p.Longitude != 0).ToArray(); var result = new VDeviceCurrentDataDetail(); EMapPoint[] spoints = ylist.Select(p => new EMapPoint(p.Latitude, p.Longitude)).ToArray(); EMapPoint[] npoints = null; //转换经纬度 switch (coordinates) { case EnumMapCoordinates.Gcj02: npoints = _mapService.Wgs84ToGcj02(spoints); break; case EnumMapCoordinates.Bd09: npoints = _mapService.Wgs84ToBd09(spoints); break; } if (npoints != null) { for (var i = 0; i < npoints.Length; i++) { ylist[i].Latitude = npoints[i].Lat; ylist[i].Longitude = npoints[i].Lng; } } nlist.AddRange(ylist); result.List = nlist.OrderByDescending(p => p.ExtIsOnLine).ToList(); result.Total = nlist.Count; if (result.Total > 0) { result.OnLine = result.List.Count(p => p.ExtIsOnLine); } result.OffLine = result.Total - result.OnLine; return result; }
public ActionResult GetLines(EnumMapCoordinates coordinates) { var os = _lineService.SearchLines(Passport.User.Id, coordinates, base.SearchKeyword, base.OrderName, base.OrderType, base.PageIndex, base.PageSize); return JsonResult(os); }
public VDeviceCurrentData GetVDeviceCurrentData(int deviceId, EnumMapCoordinates coordinates) { var deviceCurrentData = _rep.Query<EDevice, EDeviceCurrentData, VDeviceCurrentData>() .LeftJoin<EDeviceCurrentData>((d, c) => d.Id == c.DeviceId) .Where(p => p.Id == deviceId) .Select((d, c) => new Columns(d.Id.As("DeviceId"), d.DeviceName, c)).Single(); EMapPoint tpt = null; EMapPoint fpt = new EMapPoint(deviceCurrentData.Latitude, deviceCurrentData.Longitude); switch (coordinates) { case EnumMapCoordinates.Gcj02: tpt = _mapService.Wgs84ToGcj02(fpt); break; case EnumMapCoordinates.Bd09: tpt = _mapService.Wgs84ToBd09(fpt); break; } if (tpt != null) { deviceCurrentData.Latitude = tpt.Lat; deviceCurrentData.Longitude = tpt.Lng; } return deviceCurrentData; }
public void SaveTravelItem(ETravelItem travelItem, EnumMapCoordinates coordinates) { if (travelItem.ItemLatLng.HasValue()) { switch (coordinates) { case EnumMapCoordinates.Gcj02: travelItem.ItemLatLng =_mapService.Gcj02ToWgs84(new EMapPoint(travelItem.ItemLatLng)).ToString(); break; default: break; } } _rep.Save(travelItem, p => p.Id == travelItem.Id, p => new Columns(p.ItemContent, p.ItemLatLng, p.RecordTime)); }