private VideoParser.Video getNearestVideo(double lat, double lon) { var videos = _nodeTree.GetAllTrackVideos(); if (videos == null) { return(null); } VideoParser.Video nearestVideo = null; double minDist = 5.0 / 60; foreach (var video in videos) { double dir = 90.0 - 180.0 / Math.PI * Math.Atan2(lat - video.PanTiltUnit.Latitude, lon - video.PanTiltUnit.Longitude); if (dir < 0) { dir += 360.0; } double left = video.PanTiltUnit.LeftLimit; double right = video.PanTiltUnit.RightLimit; if (right < left) { if (dir < right) { dir += 360.0; } right += 360.0; } if (dir > left && dir < right) { double dist = getDist(new Point(video.PanTiltUnit.Longitude, video.PanTiltUnit.Latitude), new Point(lon, lat)); if (dist < minDist) { minDist = dist; nearestVideo = video; } } } return(nearestVideo); }
public bool IsSameNode(VideoParser.Node node) { lock (_trackVideos) { if (_trackVideos.Count == 0) { return(false); } CCTVNodeTree newNode = new CCTVNodeTree(); newNode.AddTrackVideo(node); if (isSameVideos(newNode.GetAllTrackVideos())) { return(true); } return(false); } }