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); }
protected override void OnNetworkServerChanged(object sender, EventArgs e) { base.OnNetworkServerChanged(sender, e); mercatorTransform = new MercatorTransform(TileProvider.MaxLatitude); }