private IEnumerable <string> CollectLayerIds() { HashSet <string> ids = new HashSet <string>(); foreach (var layer in _map.MapLayer) { ids.Add(layer.ResourceId); } IMapDefinition3 mdf3 = _map as IMapDefinition3; if (_map.BaseMap != null) { foreach (var grp in _map.BaseMap.BaseMapLayerGroups) { foreach (var layer in grp.BaseMapLayer) { ids.Add(layer.ResourceId); } } } else if (mdf3 != null && !string.IsNullOrEmpty(mdf3.TileSetDefinitionID)) { var tsd = (ITileSetDefinition)_service.CurrentConnection.ResourceService.GetResource(mdf3.TileSetDefinitionID); foreach (var grp in tsd.BaseMapLayerGroups) { foreach (var layer in grp.BaseMapLayer) { ids.Add(layer.ResourceId); } } } return(ids); }
public void DeserializationTest_V30() { var res = ObjectFactory.DeserializeXml(Utils.ReadAllText($"Resources{System.IO.Path.DirectorySeparatorChar}UT_LinkedTileSet.mdf")); Assert.IsAssignableFrom <IMapDefinition3>(res); IMapDefinition3 mdf = (IMapDefinition3)res; Assert.Equal("Base Map linked to Tile Set", mdf.Name); Assert.Equal("PROJCS[\"WGS84.PseudoMercator\",GEOGCS[\"LL84\",DATUM[\"WGS84\",SPHEROID[\"WGS84\",6378137.000,298.25722293]],PRIMEM[\"Greenwich\",0],UNIT[\"Degree\",0.017453292519943295]],PROJECTION[\"Popular Visualisation Pseudo Mercator\"],PARAMETER[\"false_easting\",0.000],PARAMETER[\"false_northing\",0.000],PARAMETER[\"central_meridian\",0.00000000000000],UNIT[\"Meter\",1.00000000000000]]", mdf.CoordinateSystem); Assert.NotNull(mdf.Extents); var extent = mdf.Extents; Assert.Equal(-9773613.7373958, extent.MinX); Assert.Equal(5417109.9090669, extent.MinY); Assert.Equal(-9758770.5921973, extent.MaxX); Assert.Equal(5435129.2308673, extent.MaxY); Assert.Equal(1, mdf.GetDynamicLayerCount()); Assert.NotNull(mdf.GetLayerByName("RoadCenterLines")); Assert.Equal(TileSourceType.External, mdf.TileSourceType); Assert.Equal("Library://UnitTests/TileSets/Sheboygan.TileSetDefinition", mdf.TileSetDefinitionID); }
public void CreateTest_V30() { var res = ObjectFactory.CreateMapDefinition(new Version(3, 0, 0), "TestMap"); Assert.IsAssignableFrom <IMapDefinition3>(res); IMapDefinition3 mdf = (IMapDefinition3)res; Assert.Equal("TestMap", res.Name); Assert.Null(mdf.BaseMap); Assert.Equal(TileSourceType.None, mdf.TileSourceType); Assert.Null(mdf.TileSetDefinitionID); Assert.Throws <ArgumentException>(() => mdf.TileSetDefinitionID = "Library://Test.asgkjdsf"); mdf.TileSetDefinitionID = "Library://UnitTests/TileSets/Sheboygan.TileSetDefinition"; Assert.Equal("Library://UnitTests/TileSets/Sheboygan.TileSetDefinition", mdf.TileSetDefinitionID); Assert.Equal(TileSourceType.External, mdf.TileSourceType); mdf.InitBaseMap(); Assert.Equal(TileSourceType.Inline, mdf.TileSourceType); Assert.Null(mdf.TileSetDefinitionID); }
static int RunMapGuide(MgTileSeederOptions options) { int ret = 0; try { options.Validate(); var conn = ConnectionProviderRegistry.CreateConnection("Maestro.Http", "Url", options.MapAgentUri, "Username", options.Username, "Password", options.Password); var tileSvc = (ITileService)conn.GetService((int)ServiceType.Tile); var res = conn.ResourceService.GetResource(options.ResourceID); DefaultTileWalkOptions walkOptions = null; switch (res) { case IMapDefinition mdf: walkOptions = new DefaultTileWalkOptions(mdf, options.Groups.ToArray()); //If meters-per-unit not specified and this is >= 2.6 or higher, we can use //CREATERUNTIMEMAP to get this value if (options.MetersPerUnit == default(double)) { if (conn.SiteVersion >= new Version(2, 6)) { Console.WriteLine("Using CREATERUNTIMEMAP to obtain required meters-per-unit value"); var createRt = (ICreateRuntimeMap)conn.CreateCommand((int)CommandType.CreateRuntimeMap); createRt.MapDefinition = options.ResourceID; createRt.RequestedFeatures = (int)RuntimeMapRequestedFeatures.None; var rtMapInfo = createRt.Execute(); options.MetersPerUnit = rtMapInfo.CoordinateSystem.MetersPerUnit; Console.WriteLine($"Using meters-per-unit value of: {options.MetersPerUnit}"); } } break; case ITileSetDefinition tsd: walkOptions = new DefaultTileWalkOptions(tsd, options.Groups.ToArray()); //Wrong options. Fortunately we have enough information here to tell them what the *correct* //arguments are if (tsd.TileStoreParameters.TileProvider == "XYZ") { var bbox = tsd.Extents; var urls = new List <string>(); foreach (var grp in tsd.BaseMapLayerGroups) { urls.Add(options.MapAgentUri + "?OPERATION=GETTILEIMAGE&VERSION=1.2.0&USERNAME=Anonymous&MAPDEFINITION=" + tsd.ResourceID + "&BASEMAPLAYERGROUPNAME=" + grp.Name + "&TILECOL={y}&TILEROW={x}&SCALEINDEX={z}"); } Console.WriteLine("[ERROR]: Cannot use mapguide tiling mode for seeding XYZ tile sets. Use xyz tiling mode instead. Example(s):"); foreach (var url in urls) { Console.WriteLine($" MgTileSeeder xyz --url \"{url}\" --minx {bbox.MinX} --miny {bbox.MinY} --maxx {bbox.MaxX} --maxy {bbox.MaxY}"); } if (options.Wait) { Console.WriteLine("Press any key to continue"); Console.Read(); } return(1); } //If meters-per-unit not specified and the tile set is using the "Default" provider, we can create //a Map Definition linked to the tile set, save it to a temp resource and call CREATERUNTIMEMAP //from it to obtain the reuqired meters-per-unit value if (options.MetersPerUnit == default(double) && tsd.TileStoreParameters.TileProvider == "Default") { IMapDefinition3 mdf3 = (IMapDefinition3)ObjectFactory.CreateMapDefinition(new Version(3, 0, 0), "LinkedTileSet"); string tmpId = $"Session:{conn.SessionID}//{mdf3.Name}.MapDefinition"; var text = tsd.Extents; mdf3.SetExtents(text.MinX, text.MinY, text.MaxX, text.MaxY); mdf3.CoordinateSystem = tsd.GetDefaultCoordinateSystem(); mdf3.TileSetDefinitionID = tsd.ResourceID; conn.ResourceService.SaveResourceAs(mdf3, tmpId); Console.WriteLine("Using CREATERUNTIMEMAP to obtain required meters-per-unit value"); var createRt = (ICreateRuntimeMap)conn.CreateCommand((int)CommandType.CreateRuntimeMap); createRt.MapDefinition = tmpId; createRt.RequestedFeatures = (int)RuntimeMapRequestedFeatures.None; var rtMapInfo = createRt.Execute(); options.MetersPerUnit = rtMapInfo.CoordinateSystem.MetersPerUnit; Console.WriteLine($"Using meters-per-unit value of: {options.MetersPerUnit}"); } break; default: throw new ArgumentException("Invalid resource type"); } walkOptions.MetersPerUnit = options.MetersPerUnit; var walker = new DefaultTileWalker(walkOptions); var seederOptions = new TileSeederOptions(); seederOptions.MaxDegreeOfParallelism = options.MaxDegreeOfParallelism; seederOptions.ErrorLogger = ErrorLogger; var seeder = new TileSeeder(tileSvc, walker, seederOptions); var progress = new ConsoleProgress(); var stats = seeder.Run(progress); Console.WriteLine($"Rendered {stats.TilesRendered} tiles in {stats.Duration}"); } catch (Exception ex) { Console.WriteLine(ex.ToString()); ret = 1; } finally { if (options.Wait) { Console.WriteLine("Press any key to continue"); Console.Read(); } } return(ret); }