Here is a function I use to load the map from a config file.
This code assumes you have your .geodatabase and/or your tpk's already pulled to your machine. See Antti's comment above for the links to how to do that.
....
foreach (var layerConfig in AppConfig.Layers)
{
LayerConfigModel layerConfigModel = (LayerConfigModel)JsonConvert.DeserializeObject(layerConfig.SelectToken("config").ToString(),
typeof (LayerConfigModel), _jsonSerializerSettings);
Guid unkNum = new Guid();
layerConfigModel.Id = layerConfig["name"]?.ToString()??"UNK"+unkNum;
Layer layerToAdd;
if (!IsAppOnline)
{
layerToAdd = await LoadOfflineLayer(layerConfigModel);
}
else
{
layerToAdd = LoadOnlineLayer(layerConfigModel);
}
AppMapView.Map.Layers.Add(layerToAdd);
await layerToAdd.InitializeAsync();
TocLayerModel tocLayer = new TocLayerModel(layerConfigModel, layerToAdd, IsAppOnline, UserZone);
AppMapLayers.Add(tocLayer);
tocLayer.SetScaleVisiblity(AppMapView.Scale);
}
....
// Load offline layer - Inner loop of LoadOperationalLayers
private async Task<Layer> LoadOfflineLayer(LayerConfigModel layerConfigModel)
{
Layer layerToAdd = null;
try
{
var filePath = System.Configuration.ConfigurationSettings.AppSettings["AppDirectory"] +
AppConfig.MapConfig["mapConfig"]["user"]["userZone"] +
layerConfigModel.Id + "." +
((layerConfigModel.LayerType == "dynamic") ? "geodatabase" : "tpk");
switch (layerConfigModel.LayerType.ToLower())
{
case "image":
case "static":
ArcGISLocalTiledLayer localLayer = new ArcGISLocalTiledLayer(filePath);
await localLayer.InitializeAsync();
localLayer.ID = layerConfigModel.Id;
layerToAdd = localLayer;
break;
// ReSharper disable once RedundantCaseLabel
case "dynamic":
default:
var gdb = await Geodatabase.OpenAsync(filePath);
GroupLayer gLayer = new GroupLayer();
AddLocalGdbToMap(gdb, layerConfigModel, gLayer);
await gLayer.InitializeAsync();
layerToAdd = gLayer;
layerToAdd.DisplayName = layerConfigModel.Title;
break;
}
}
catch (Exception ex)
{
//TODO: Error handling
Console.WriteLine(ex.Message);
//MessageBox.Show("Error creating feature layer: " + ex.Message, "Samples");
}
return layerToAdd;
}