${mapping_DynamicImageLayer_Title}
${mapping_DynamicImageLayer_Description}
Inheritance: ImageLayer
コード例 #1
0
        //string mapParam = "mapParam={\"mapName\":{0},\"mapScales\":null,mapScale:{1},\"zoomLevel\":null,\"pixelCenter\":{\"x\":{2},\"y\":{3}},\"center\":{\"x\":{4},\"y\":{5}},\"mapCenter\":{\"x\":{6},\"y\":{7}},\"pixelRect\":{\"leftTop\":{\"x\":{8},\"y\":{9}},\"rightBottom\":{\"x\":{10},\"y\":{11}}},\"mapRect\"{\"leftBottom\":{\"x\":null,\"y\":null},\"rightTop\":{\"x\":null,\"y\":null}}}";
        /// <summary>${mapping_DynamicISLayer_method_GetImageSource_D}</summary>
        /// <param name="onCompleted">${mapping_DynamicISLayer_method_GetImageSource_param_onCompleted}</param>
        protected override void GetImageSource(DynamicLayer.OnImageSourceCompleted onCompleted)
        {
            if (!IsInitialized)
            {
                onCompleted(null);
            }
            else
            {
                if (client != null && client.IsBusy)
                {
                    client.CancelAsync();
                    client = null;
                }
            }

            client = new WebClient();
            client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(client_DownloadStringCompleted);
            client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged);

            if (this.Resolution < 0 || this.Dpi < 0)
            {
                return;
            }

            double scale = ScaleHelper.ScaleConversion(this.Resolution, this.Dpi);

            Rectangle2D bounds = ViewBounds;
            int width = (int)Math.Round(ViewSize.Width);
            int height = (int)Math.Round(ViewSize.Height);

            StringBuilder imgUrl = new StringBuilder();
            imgUrl.Append(Url);
            if (!Url.EndsWith("/"))
            {
                imgUrl.Append("/");
            }
            imgUrl.Append("common.ashx?method=GetMapImage");
            imgUrl.AppendFormat("&map={0}", MapName);
            imgUrl.AppendFormat("&layersKey={0}", LayersKey);
            imgUrl.AppendFormat("&t={0}", DateTime.Now.Ticks);
            imgUrl.AppendFormat("&redirect={0}", Redirect.ToString());
            imgUrl.Append("&mapParam={");
            imgUrl.AppendFormat("\"antiAlias\":{0},", this.AntiAliasing.ToString().ToLower());
            imgUrl.AppendFormat("\"mapName\":\"{0}\",", MapName);
            imgUrl.AppendFormat("\"mapScale\":{0},", scale);
            imgUrl.AppendFormat("\"transparent\":{0},", Transparent.ToString().ToLower());
            imgUrl.AppendFormat("\"center\":{{\"x\":{0},\"y\":{1}}},", bounds.Center.X, bounds.Center.Y);
            imgUrl.AppendFormat("\"pixelRect\":{{\"leftTop\":{{\"x\":0,\"y\":0}},\"rightBottom\":{{\"x\":{0},\"y\":{1}}}", width, height);//,
            imgUrl.Append("}}");
            //IS.NET中增加重定向参数,此时不需要再下载返回信息了,而是直接采用重定向
            //为了兼容,设置Redirect属性,当此属性为FALSE时,兼容以前的模式,当此属性为true时,采用重定向,不兼容以前的模式
            if (this.Redirect)
            {
                BitmapImage imgSrc = new BitmapImage { UriSource = new Uri(imgUrl.ToString(), UriKind.Absolute) };
                onCompleted(imgSrc);
            }
            else
            {
                client.DownloadStringAsync(new Uri(imgUrl.ToString(), UriKind.Absolute), onCompleted);
            }
        }
コード例 #2
0
        /// <summary>${mapping_HeatMapLayer_method_GetImageSource_D}</summary>
        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 });
        }