public void TestWebMercator() { var mercator = new WebMercator(); double[] zerozero = mercator.ToPixel(new GeoCoordinate(0, 0)); double[] oneone = mercator.ToPixel(new GeoCoordinate(1, 1)); }
public void TestSimpleWebMercator() { // TODO: stabalize the webmercator projection numerically for lower zoom levels (0-9). var mercator = new WebMercator(); for (int zoomLevel = 10; zoomLevel <= 25; zoomLevel++) { var tile = Tile.CreateAroundLocation(new GeoCoordinate(0, 0), zoomLevel); double[] topleft = mercator.ToPixel(tile.Box.TopLeft); double[] bottomright = mercator.ToPixel(tile.Box.BottomRight); double scaleFactor = mercator.ToZoomFactor(zoomLevel); Assert.AreEqual(-256, (topleft[0] - bottomright[0]) * scaleFactor, 0.01); Assert.AreEqual(-256, (topleft[1] - bottomright[1]) * scaleFactor, 0.01); } var coordinate = new GeoCoordinate(51.26337, 4.78739); double[] projected = mercator.ToPixel(coordinate); var reProjected = mercator.ToGeoCoordinates(projected[0], projected[1]); Assert.AreEqual(coordinate.Longitude, reProjected.Longitude, 0.0001); Assert.AreEqual(coordinate.Latitude, reProjected.Latitude, 0.0001); }
/// <summary> /// Renders the given data onto a 100x100 image using bounds around null-island (1,1,-1,-1) and the MapCSS definition. /// </summary> /// <param name="dataSource"></param> /// <param name="mapCSS"></param> /// <returns></returns> private Bitmap Render(IDataSourceReadOnly dataSource, string mapCSS) { // create projection. WebMercator projection = new WebMercator(); double[] topLeft = projection.ToPixel(new Math.Geo.GeoCoordinate(1, 1)); double[] bottomRight = projection.ToPixel(new Math.Geo.GeoCoordinate(-1, -1)); // create view (this comes down to (1,1,-1,-1) for a size of 100x100). View2D view = View2D.CreateFromBounds(bottomRight[1], topLeft[0], topLeft[1], bottomRight[0]); //View2D view = View2D.CreateFrom(0, 0, 100, 100, 1.0 / 200.0, false, true); // create graphics Bitmap rendering = new Bitmap(100, 100); Graphics renderingGraphics = Graphics.FromImage(rendering); renderingGraphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality; renderingGraphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; renderingGraphics.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality; renderingGraphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; // create renderer. GraphicsRenderer2D graphicsRenderer = new GraphicsRenderer2D(); MapRenderer <Graphics> renderer = new MapRenderer <Graphics>(graphicsRenderer); // create map. OsmSharp.UI.Map.Map map = new OsmSharp.UI.Map.Map(); map.AddLayer(new LayerOsm(dataSource, new MapCSSInterpreter(mapCSS), projection)); // notify the map that there was a view change! map.ViewChanged((float)view.CalculateZoom(100, 100), new Math.Geo.GeoCoordinate(0, 0), view); // ... and finally do the actual rendering. renderer.Render(Graphics.FromImage(rendering), map, view); //rendering.Save(@"c:\temp\rendering.bmp"); return(rendering); }
protected override void OnLoad(EventArgs e) { base.OnLoad(e); this.sampleControl1.Center = new double[] { 534463.21f, 6633094.69f }; //this.sampleControl1.Center = new float[] { 0f, 0f }; this.sampleControl1.ZoomFactor = 1; // initialize a test-scene. var scene2D = new Scene2DSimple(); scene2D.BackColor = Color.White.ToArgb(); scene2D.AddPoint(float.MinValue, float.MaxValue, 0, 0, Color.Blue.ToArgb(), 1); bool fill = false; int color = Color.White.ToArgb(); int width = 1; scene2D.AddPolygon(float.MinValue, float.MaxValue, new double[] { 50, -80, 70 }, new double[] { 20, -10, -70 }, color, width, fill); // load test osm file. Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream( "OsmSharp.WinForms.UI.Sample.test.osm"); var xmlDataProcessorSource = new XmlOsmStreamSource(stream); ICollection <OsmGeo> osmList = xmlDataProcessorSource.PullToCollection(); // build a scene using spherical mercator. IProjection sphericalMercator = new WebMercator(); var nodes = new Dictionary <long, GeoCoordinate>(); foreach (OsmGeo simpleOsmGeo in osmList) { if (simpleOsmGeo is Node) { var simplenode = (simpleOsmGeo as Node); double[] point = sphericalMercator.ToPixel( simplenode.Latitude.Value, simplenode.Longitude.Value); nodes.Add(simplenode.Id.Value, new GeoCoordinate(simplenode.Latitude.Value, simplenode.Longitude.Value)); scene2D.AddPoint(float.MinValue, float.MaxValue, (float)point[0], (float)point[1], Color.Yellow.ToArgb(), 2); } else if (simpleOsmGeo is Way) { var way = (simpleOsmGeo as Way); var x = new List <double>(); var y = new List <double>(); if (way.Nodes != null) { for (int idx = 0; idx < way.Nodes.Count; idx++) { GeoCoordinate nodeCoords; if (nodes.TryGetValue(way.Nodes[idx], out nodeCoords)) { x.Add((float)sphericalMercator.LongitudeToX(nodeCoords.Longitude)); y.Add((float)sphericalMercator.LatitudeToY(nodeCoords.Latitude)); } } } if (x.Count > 0) { scene2D.AddLine(float.MinValue, float.MaxValue, x.ToArray(), y.ToArray(), Color.Blue.ToArgb(), 2); } } } this.sampleControl1.Scene = scene2D; this.sampleControl1.Invalidate(); }