0

我正在尝试使用 .mmpk 的“打开移动地图”示例,并在此 Web 链接的“表单”标签下使用代码: OpenMobileMap,Forms 选项卡 但是后面的代码无法编译。我收到错误:“当前上下文中不存在 DataManager”。任何想法 ?

我在 Visual Studio 2017 中使用了 'ArcGIS Runrtime App (Xamarin.Forms Shared) 模板,并将代码 (C#) 放在了 'MapPage.exml.cs 文件中。

4

1 回答 1

1

很抱歉听到您遇到问题。

.NET 的示例查看器(可在GitHub 上获得)使用数据管理器从 ArcGIS Online 下载示例数据。个别样本使用该类下载他们需要的数据。

DataManager 不是 ArcGIS Runtime 的组件。如果您有兴趣了解它的工作原理,您可以在此处找到示例查看器中使用的实现。

或者,您可以在部署的包中包含 .mmpk,或者您可以编写自己的代码来下载 .mmpk。

例如,以下代码为下载的数据找到适当的目录:

public string GetDataFolder()
{
    #if NETFX_CORE
        return Windows.Storage.ApplicationData.Current.LocalFolder.Path;
    #else
        return System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData);
    #endif
}

以下代码从 ArcGIS Online 下载项目(示例查看器中采用的方法):

// ItemId is the item's identifier on ArcGIS Online
private async Task GetData(string itemId)
{
    // Create the portal
    var portal = await ArcGISPortal.CreateAsync().ConfigureAwait(false);

    // Create the portal item
    var item = await PortalItem.CreateAsync(portal, itemId).ConfigureAwait(false);

    // Create the SampleData folder
    var tempFile = Path.Combine(GetDataFolder(), "Data");
    createDir(new DirectoryInfo(tempFile));

    // Get the full path to the specific file
    tempFile = Path.Combine(tempFile, item.Name);

    // Download the file
    using (var s = await item.GetDataAsync().ConfigureAwait(false))
    {
        using (var f = File.Create(tempFile))
        {
            await s.CopyToAsync(f).ConfigureAwait(false);
        }
    }
}

在 API 参考文档中,引用 DataManager 的代码被替换为假定数据已经下载的代码(示例)。示例文档部分中的代码尚未完成此操作。我已经打开了一个问题以在未来的版本中解决这个问题。

编辑:我回答了另一个问题,但看起来它丢失了,所以我想在这里添加它。引用的“数据管理器”代码具有解压缩 zip 档案的功能。该代码需要引用System.IO.Compression.FileSystem. 您可以使用 Visual Studio 添加引用(在每个单独的平台项目中右键单击“引用”,选择“添加引用”,然后搜索)。更新的 .csproj 文件的示例位于GitHub 上

于 2018-02-12T18:20:36.550 回答