SuperMap.Web.Mapping.HeatMapLayer.GetImageSource C# (CSharp) Method

GetImageSource() protected method

${mapping_HeatMapLayer_method_GetImageSource_D}
protected GetImageSource ( DynamicLayer onCompleted ) : void
onCompleted DynamicLayer
return void
        protected override void GetImageSource(DynamicLayer.OnImageSourceCompleted onCompleted)
        {
            if (!IsInitialized)
            {
                onCompleted(null);
            }
            else
            {
                if (worker != null && worker.IsBusy)
                {
                    worker.CancelAsync();
                    while (worker.IsBusy)
                    {
                        Thread.Sleep(10);
                    }
                }
            }
            List<ThreadSafeGradientStop> stops = new List<ThreadSafeGradientStop>();
            foreach (GradientStop item in GradientStops)
            {
                stops.Add(new ThreadSafeGradientStop { Color = item.Color, Offset = item.Offset });
            }
            //stops.Sort((ThreadSafeGradientStop g1, ThreadSafeGradientStop g2) => { return g1.Offset.CompareTo(g2.Offset); });

            stops.Sort((Comparison<ThreadSafeGradientStop>)((g1, g2) => g1.Offset.CompareTo(g2.Offset)));

            List<PixelPoint> pps = new List<PixelPoint>(this.GradientStops.Count);

            foreach (HeatPoint point in this.heatPoints)
            {
                if (ViewBounds.Contains(new Point2D(point.X, point.Y)) && point.Value > 0)
                {

                    PixelPoint pp = new PixelPoint
                    {
                        X = (int)Math.Round((point.X - ViewBounds.Left) / Resolution * Intensity),
                        Y = (int)Math.Round((ViewBounds.Top - point.Y) / Resolution * Intensity),
                        Value = (int)Math.Round(point.Value),
                        //判断给定的地理半径是否小于0,小于0则设置成0
                        GeoRadius = point.GeoRadius < 0 ? 0 : point.GeoRadius,
                    };
                    pps.Add(pp);
                }
            }

            //在视图范围内的转换为像素空间坐标
            //for (int i = 0; i < heatPoints.Count; i++)
            //{
            //    if (ViewBounds.Contains(new Point2D(heatPoints[i].X, heatPoints[i].Y)) && heatPoints[i].Value > 0)
            //    {
            //        PixelPoint point = new PixelPoint
            //        {
            //            X = (int)Math.Round((heatPoints[i].X - ViewBounds.Left) / Resolution * Intensity),
            //            Y = (int)Math.Round((ViewBounds.Top - heatPoints[i].Y) / Resolution * Intensity),
            //            Value = (int)Math.Round(heatPoints[i].Value)
            //        };
            //        pps.Add(point);
            //        //按照权重多加value遍;
            //        ////int sum = (int)Math.Round(heatPoints[i].Value);
            //        ////for (int k = 0; k < sum; k++)
            //        ////{
            //        ////    hps.Add(point);
            //        ////}
            //    }
            //}

            int width = (int)Math.Round(ViewSize.Width);
            int height = (int)Math.Round(ViewSize.Height);
            //调用 RunWorkerAsync 方法时将引发DoWork事件。这里就是您启动耗时操作的地方
            worker.RunWorkerAsync(new object[] { pps, width, height, Radius, Intensity, stops, onCompleted, this.Map.Resolution });
        }