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 });
}