protected override void OnSourceServerChanged(object sender, ValueChangedEventArgs<SourceTileServer> e)
        {
            base.OnSourceServerChanged(sender, e);

            var mapTileProvider = TileProvider as MapTileProvider;
            if (mapTileProvider == null)
                throw new ArgumentException("MercatorShaderMap's TileProvider should be only MapTileProvider.");

            mercatorTransform = new MercatorTransform(mapTileProvider.MaxShaderLatitude);
        }
        protected override void OnSourceServerChanged(object sender, ValueChangedEventArgs <SourceTileServer> e)
        {
            base.OnSourceServerChanged(sender, e);

            var mapTileProvider = TileProvider as MapTileProvider;

            if (mapTileProvider == null)
            {
                throw new ArgumentException("MercatorShaderMap's TileProvider should be only MapTileProvider.");
            }

            mercatorTransform = new MercatorTransform(mapTileProvider.MaxShaderLatitude);
        }
        private EnumerableDataSource <DataPoint> CreateDataSource(IEnumerable <DataPoint> data)
        {
            EnumerableDataSource <DataPoint> ds = new EnumerableDataSource <DataPoint>(data);

            MercatorTransform transform = new MercatorTransform();

            ds.SetXMapping(p => p.X);
            ds.SetYMapping(p => transform.DataToViewport(new Point(0, p.Y)).Y);
            ds.AddMapping(CirclePointMarker.FillProperty, dp =>
            {
                double alpha = (dp.Data - currentRange.Min) / (currentRange.Max - currentRange.Min);

                Debug.Assert(0 <= alpha && alpha <= 1);

                const double hueWidth = 100;
                double hue            = hueWidth * (alpha - 0.5) + hueSlider.Value;

                if (hue > 360)
                {
                    hue -= 360;
                }
                else if (hue < 0)
                {
                    hue += 360;
                }

                Debug.Assert(0 <= hue && hue <= 360);

                Color mainColor = new HsbColor(hue, 1, 0 + 1 * alpha, 0.3 + 0.7 * alpha).ToArgbColor();

                const int colorCount          = 5;
                GradientStopCollection colors = new GradientStopCollection(colorCount);

                double step = 1.0 / (colorCount - 1);
                for (int i = 0; i < colorCount; i++)
                {
                    Color color = mainColor;
                    double x    = attSlider.Value * step * i;
                    color.A     = (byte)(255 * Math.Exp(-x * x));
                    colors.Add(new GradientStop(color, step * i));
                }

                return(new RadialGradientBrush(colors));
            });
            return(ds);
        }
        //-------------------------------------------------------------------------
        public static BitmapSource ApplyMercatorTransform(this BitmapSource src, double northDeg, double southDeg)
        {
            var tgt = new WriteableBitmap(src);

            int ySize = src.PixelHeight;
            int xSize = src.PixelWidth;

            byte[] pixels    = new byte[ySize * xSize * 4];
            byte[] srcPixels = new byte[ySize * xSize * 4];
            src.CopyPixels(srcPixels, 4 * xSize, 0);

            var tForm   = new MercatorTransform();
            var vpNorth = tForm.DataToViewport(new System.Windows.Point(0.0, northDeg));
            var vpSouth = tForm.DataToViewport(new System.Windows.Point(0.0, southDeg));

            Parallel.For(0, ySize, (y) =>
            {
                // calculate target pixel latitude
                var tgtLat = northDeg - (y * (northDeg - southDeg) / ySize);

                // transform the target pixel lat to a source latitude via Mercator transform
                var vp = tForm.DataToViewport(new System.Windows.Point(0.0, tgtLat));

                // translate src viewport coord to a y value
                int srcY = (int)Math.Floor(ySize * (Math.Abs(vp.Y - vpNorth.Y) / Math.Abs(vpNorth.Y - vpSouth.Y)));

                for (int x = 0; x < xSize; ++x)
                {
                    int tgtOffset = (y * src.PixelWidth + x) * 4;
                    int srcOffset = (srcY * src.PixelWidth + x) * 4;

                    pixels[tgtOffset]     = srcPixels[srcOffset];
                    pixels[tgtOffset + 1] = srcPixels[srcOffset + 1];
                    pixels[tgtOffset + 2] = srcPixels[srcOffset + 2];
                    pixels[tgtOffset + 3] = srcPixels[srcOffset + 3];
                }
            });

            WriteableBitmap bmp = new WriteableBitmap(xSize, ySize, 96, 96, System.Windows.Media.PixelFormats.Bgra32, BitmapPalettes.WebPaletteTransparent);

            bmp.WritePixels(new System.Windows.Int32Rect(0, 0, xSize, ySize), pixels, 4 * xSize, 0);
            bmp.Freeze();

            return(bmp);
        }
Example #5
0
        protected override void OnNetworkServerChanged(object sender, EventArgs e)
        {
            base.OnNetworkServerChanged(sender, e);

            mercatorTransform = new MercatorTransform(TileProvider.MaxLatitude);
        }
		protected override void OnNetworkServerChanged(object sender, EventArgs e)
		{
			base.OnNetworkServerChanged(sender, e);

			mercatorTransform = new MercatorTransform(TileProvider.MaxLatitude);
		}