예제 #1
0
파일: Program.cs 프로젝트: hsxian/QianMo
        static void Main(string[] args)
        {
            var dataReader = new DataFileReader <GeoInfoModel>();
            var dir        = Path.Combine(Directory.GetCurrentDirectory(), "../../../../../data/001/");
            var imgDir     = Path.Combine(Directory.GetCurrentDirectory(), "img");
            var pltFiles   = FileTools.GetAllFile(dir, "*.plt");
            var tracks     = dataReader.GetTrajectories(pltFiles);

            Parallel.ForEach(tracks, t =>
            {
                t.GeoCodes = t.GeoPoints.Select(tt => GeoHash.Encode(tt.Latitude, tt.Longitude, 7))
                             .Distinct()
                             .ToList();
            });


            Console.WriteLine(tracks.Count());

            var cluster = new CommonSubsequenceCluster();
            var sh      = new Stopwatch();

            sh.Start();
            var tree = cluster.BuildClusterTree(tracks.ToArray(), 0.7f, 0.4f);

            Console.WriteLine($"BuildClusterTree, count:{tracks.Count()}, time:{sh.Elapsed}");

            if (Directory.Exists(imgDir))
            {
                Directory.GetFiles(imgDir, "*.png")
                .ToList()
                .ForEach(File.Delete);
            }
            else
            {
                Directory.CreateDirectory(imgDir);
            }

            cluster.ForeachTree(tree, node =>
            {
                var draw = new DrawBase(256, 256)
                           .OpenAutoFit(node.MinLon, node.MinLat, node.MaxLon, node.MaxLat)
                           .Draw(node, Color.Red, 3);
                draw.Image.Save($"{imgDir}/{node.LevelTag}.png");
                draw.Image.Dispose();
                //                Console.WriteLine(node.LevelTag);

                foreach (var sib in node.Siblings)
                {
                    var drawSib = new DrawBase(256, 256)
                                  .OpenAutoFit(sib.MinLon, sib.MinLat, sib.MaxLon, sib.MaxLat)
                                  .Draw(sib, Color.Red, 3);
                    drawSib.Image.Save($"{imgDir}/{sib.LevelTag}.png");
                    drawSib.Image.Dispose();
                    //                    Console.WriteLine(sib.LevelTag);
                }
            });
        }
예제 #2
0
        static void Main(string[] args)
        {
            DrawBase rect = new DrawBase();

            Console.WriteLine(rect.name);
            DrawBase line = rect.Clone() as DrawBase;

            line.name = "new";
            line.listName.Add("123");
            Console.WriteLine(rect.name);
            Console.WriteLine(rect.listName.Count);
            Console.ReadLine();
        }
예제 #3
0
 /// <summary>
 /// 绑定ROI画直线参数传递事件,需要传入五个参数类型分别为double,double,double,double,object的函数
 /// </summary>
 /// <param name="Func"></param>
 public void BindingLineROIEvent(DrawBase <double, double, double, double, object> .ParametersHandler Func, bool bAdd = true)
 {
     if (line != null)
     {
         if (bAdd)
         {
             line.ProcessParameters += Func;
         }
         else
         {
             line.ProcessParameters -= Func;
         }
     }
 }
예제 #4
0
 /// <summary>
 /// 绑定ROI画椭圆参数传递事件,需要传入五个参数类型分别为double,double,double,double,double的函数
 /// </summary>
 /// <param name="Func"></param>
 public void BindingEllipseROIEvent(DrawBase <double, double, double, double, double> .ParametersHandler Func, bool bAdd = true)
 {
     if (ellipse != null)
     {
         if (bAdd)
         {
             ellipse.ProcessParameters += Func;
         }
         else
         {
             ellipse.ProcessParameters -= Func;
         }
     }
 }
예제 #5
0
 /// <summary>
 /// 绑定ROI画矩形参数传递事件,需要传入五个参数类型分别为double,double,double,double,double的函数
 /// </summary>
 /// <param name="Func"></param>
 public void BindingRectangle2ROIEvent(DrawBase <double, double, double, double, double> .ParametersHandler Func, bool bAdd = true)
 {
     if (rectangle2 != null)
     {
         if (bAdd)
         {
             rectangle2.ProcessParameters += Func;
         }
         else
         {
             rectangle2.ProcessParameters -= Func;
         }
     }
 }
예제 #6
0
 //外部事件绑定
 /// <summary>
 /// 绑定ROI画圆参数传递事件,需要传入五个参数类型分别为int,int,double,object,object的函数
 /// </summary>
 /// <param name="Func"></param>
 public void BindingCircleROIEvent(DrawBase <int, int, double, object, object> .ParametersHandler Func, bool bAdd = true)
 {
     if (circle != null)
     {
         if (bAdd)
         {
             circle.ProcessParameters += Func;
         }
         else
         {
             circle.ProcessParameters -= Func;
         }
     }
 }
예제 #7
0
 /// <summary>Register service method with a service binder with or without implementation. Useful when customizing the  service binding logic.
 /// Note: this method is part of an experimental API that can change or be removed without any prior notice.</summary>
 /// <param name="serviceBinder">Service methods will be bound by calling <c>AddMethod</c> on this object.</param>
 /// <param name="serviceImpl">An object implementing the server-side handling logic.</param>
 public static void BindService(grpc::ServiceBinderBase serviceBinder, DrawBase serviceImpl)
 {
     serviceBinder.AddMethod(__Method_DrawPoints, serviceImpl == null ? null : new grpc::DuplexStreamingServerMethod <global::gRPCServer.DrawPointRequest, global::gRPCServer.DrawPoint>(serviceImpl.DrawPoints));
     serviceBinder.AddMethod(__Method_ReceiveId, serviceImpl == null ? null : new grpc::UnaryServerMethod <global::gRPCServer.IdRequest, global::gRPCServer.IdResponse>(serviceImpl.ReceiveId));
 }
예제 #8
0
 /// <summary>Creates service definition that can be registered with a server</summary>
 /// <param name="serviceImpl">An object implementing the server-side handling logic.</param>
 public static grpc::ServerServiceDefinition BindService(DrawBase serviceImpl)
 {
     return(grpc::ServerServiceDefinition.CreateBuilder()
            .AddMethod(__Method_DrawPoints, serviceImpl.DrawPoints)
            .AddMethod(__Method_ReceiveId, serviceImpl.ReceiveId).Build());
 }