Ejemplo n.º 1
0
 public EMapPoint(string latlng, EnumMapCoordinates coordinates = EnumMapCoordinates.Wgs84)
 {
     var ll = latlng.Split(',');
     Lat = double.Parse(ll[0]);
     Lng = double.Parse(ll[1]);
     Coordinates = coordinates;
 }
Ejemplo n.º 2
0
        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;
        }
Ejemplo n.º 3
0
 /// <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);
 }
Ejemplo n.º 4
0
 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);
 }
Ejemplo n.º 5
0
 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);
 }
Ejemplo n.º 6
0
 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));
 }
Ejemplo n.º 7
0
 /// <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);
 }
Ejemplo n.º 8
0
        /// <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);
        }
Ejemplo n.º 9
0
        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;
        }
Ejemplo n.º 10
0
 public EMapPoint(double lat, double lng, EnumMapCoordinates coordinates = EnumMapCoordinates.Wgs84)
 {
     Lat = lat;
     Lng = lng;
     Coordinates = coordinates;
 }
Ejemplo n.º 11
0
        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;
        }
Ejemplo n.º 12
0
 /// <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, "保存成功!");
     }
 }
Ejemplo n.º 13
0
 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);
 }
Ejemplo n.º 14
0
 /// <summary>
 /// 获取设备当前定位数据
 /// </summary>
 /// <param name="deviceIds"></param>
 /// <returns></returns>
 public ActionResult GetVDeviceCurrentData(int deviceId, EnumMapCoordinates coordinates)
 {
     var vcs = _positionService.GetVDeviceCurrentData(deviceId, coordinates);
     return JsonResult(vcs);
 }
Ejemplo n.º 15
0
 /// <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);
 }
Ejemplo n.º 16
0
 public ActionResult GetVTravel(int travelId,EnumMapCoordinates coordinates)
 {
     var vt = _aTravelService.GetVTravel(Passport.User.Id, travelId, coordinates);
     return JsonResult(vt);
 }
Ejemplo n.º 17
0
        /// <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;
        }
Ejemplo n.º 18
0
 public ActionResult SaveTravelItem(ETravelItem travelItem, EnumMapCoordinates coordinates)
 {
     _travelService.SaveTravelItem(travelItem, coordinates);
     return JsonResult(travelItem,"保存成功");
 }
Ejemplo n.º 19
0
 /// <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, "保存成功!");
     }
 }
Ejemplo n.º 20
0
        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);
        }
Ejemplo n.º 21
0
 /// <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);
 }
Ejemplo n.º 22
0
        /// <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
                })
            });
        }
Ejemplo n.º 23
0
        /// <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;
        }
Ejemplo n.º 24
0
 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);
 }
Ejemplo n.º 25
0
        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;
        }
Ejemplo n.º 26
0
        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));
        }