/// <summary> /// Tests rendering the given serialized scene. /// </summary> /// <param name="stream"></param> /// <param name="box"></param> /// <param name="testCount"></param> /// <param name="createTarget"></param> /// <param name="createRenderer"></param> /// <param name="range"></param> /// <param name="minZoom"></param> public static void TestRenderScene(CreateTarget createTarget, CreateRenderer createRenderer, Stream stream, GeoCoordinateBox box, int testCount, int range, int minZoom) { WebMercator projection = new WebMercator(); // build a map. Map map = new Map(); TagsCollectionBase metaTags; map.AddLayer(new LayerScene( Scene2D.Deserialize(stream, true, out metaTags))); // build the target and renderer. TTarget target = createTarget.Invoke(TargetWidth, TargetHeight); MapRenderer <TTarget> mapRenderer = new MapRenderer <TTarget>( createRenderer.Invoke()); // render the map. PerformanceInfoConsumer performanceInfo = new PerformanceInfoConsumer("Scene2DLayeredRendering"); performanceInfo.Start(); //performanceInfo.Report("Rendering {0} random images...", testCount); while (testCount > 0) { // randomize view. int zoom = minZoom; if (range > 1) { // only randomize when range is > 1 zoom = OsmSharp.Math.Random.StaticRandomGenerator.Get().Generate(range) + minZoom; } GeoCoordinate center = box.GenerateRandomIn(); View2D view = mapRenderer.Create(TargetWidth, TargetHeight, map, (float)projection.ToZoomFactor(zoom), center, false, true); OsmSharp.Logging.Log.TraceEvent("Scene2DLayeredRendering", OsmSharp.Logging.TraceEventType.Information, string.Format("Rendering at z{0} l{1}.", zoom, center)); map.ViewChanged((float)projection.ToZoomFactor(zoom), center, view, view); mapRenderer.Render(target, map, view, (float)projection.ToZoomFactor(zoom)); testCount--; } performanceInfo.Stop(); stream.Seek(0, SeekOrigin.Begin); }
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); }
public void TestSimpleWebMercatorZoomLevel() { var mercator = new WebMercator(); for (int orignalLevel = 0; orignalLevel < 20; orignalLevel++) { double zoomFactor = mercator.ToZoomFactor(orignalLevel); double zoomLevel = mercator.ToZoomLevel(zoomFactor); Assert.AreEqual(orignalLevel, zoomLevel, 0.001); } }
public void Scene2DSimpleSerializeDeserializeTest() { // create the MapCSS image source. var imageSource = new MapCSSDictionaryImageSource(); // load mapcss style interpreter. var mapCSSInterpreter = new MapCSSInterpreter( Assembly.GetExecutingAssembly().GetManifestResourceStream( "OsmSharp.UI.Test.Unittests.Data.MapCSS.test.mapcss"), imageSource); // initialize the data source. var xmlSource = new XmlOsmStreamSource( Assembly.GetExecutingAssembly().GetManifestResourceStream( "OsmSharp.UI.Test.Unittests.Data.test.osm")); IEnumerable <OsmGeo> dataSource = xmlSource; MemoryDataSource source = MemoryDataSource.CreateFrom(xmlSource); // get data. var scene = new Scene2DSimple(); var projection = new WebMercator(); GeoCoordinateBox box = null; foreach (var osmGeo in dataSource) { CompleteOsmGeo completeOsmGeo = null; switch (osmGeo.Type) { case OsmGeoType.Node: completeOsmGeo = CompleteNode.CreateFrom(osmGeo as Node); break; case OsmGeoType.Way: completeOsmGeo = CompleteWay.CreateFrom(osmGeo as Way, source); break; case OsmGeoType.Relation: completeOsmGeo = CompleteRelation.CreateFrom(osmGeo as Relation, source); break; } // update box. if (completeOsmGeo != null) { if (box == null) { box = completeOsmGeo.BoundingBox; } else if (completeOsmGeo.BoundingBox != null) { box = box + completeOsmGeo.BoundingBox; } } // translate each object into scene object. mapCSSInterpreter.Translate(scene, projection, source, osmGeo as OsmGeo); } // create the stream. var stream = new MemoryStream(); scene.Serialize(stream, false); // deserialize the stream. IScene2DPrimitivesSource sceneSource = Scene2DSimple.Deserialize(stream, false); if (box != null) { // query both and get the same results. int counter = 100; var rand = new Random(); while (counter > 0) { var queryBox = new GeoCoordinateBox( box.GenerateRandomIn(rand), box.GenerateRandomIn(rand)); var zoomFactor = (float)projection.ToZoomFactor(15); View2D testView = View2D.CreateFromBounds( projection.LatitudeToY(queryBox.MaxLat), projection.LongitudeToX(queryBox.MinLon), projection.LatitudeToY(queryBox.MinLat), projection.LongitudeToX(queryBox.MaxLon)); var testScene = new Scene2DSimple(); sceneSource.Get(testScene, testView, zoomFactor); // var resultIndex = new HashSet<Scene2DPrimitive>(testScene.Get(testView, zoomFactor)); // var resultReference = new HashSet<Scene2DPrimitive>(scene.Get(testView, zoomFactor)); //Assert.AreEqual(resultReference.Count, resultIndex.Count); //foreach (var data in resultIndex) //{ // Assert.IsTrue(resultReference.Contains(data)); //} //foreach (var data in resultReference) //{ // Assert.IsTrue(resultIndex.Contains(data)); //} counter--; } } }