Пример мобильной карты (.mmpk) не компилируется: DataManager не существует

Я пытаюсь использовать этот пример "открыть мобильную карту" с использованием.mmpk и использовать код под тегом "Формы" этой веб-ссылки: OpenMobileMap, вкладка "Формы". Однако приведенный ниже код не компилируется. Я получил ошибку: "DataManager не существует в текущем контексте". Любая идея?

Я использовал шаблон ArcGIS Runrtime App (Xamarin.Forms Shared) в Visual Studio 2017 и поместил код (C#) в файл MapPage.exml.cs.

1 ответ

Жаль слышать, что у вас проблемы.

Средство просмотра образцов для.NET (доступно на GitHub) использует Диспетчер данных для загрузки образцов данных из ArcGIS Online. Отдельные образцы используют этот класс для загрузки необходимых данных.

Data Manager не является компонентом 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 код, ссылающийся на Data Manager, заменяется кодом, который предполагает, что данные уже были загружены ( пример). Это не было сделано для кода в разделе с примерами документов. Я открыл проблему для решения этой проблемы в будущем выпуске.

Изменить: был еще один вопрос, на который я ответил, но похоже, что он был потерян, поэтому я хочу добавить его здесь. Код "Data Manager", на который есть ссылка, имеет функцию распаковки zip-архивов. Этот код требует ссылки на System.IO.Compression.FileSystem, Вы можете использовать Visual Studio для добавления ссылки (щелкните правой кнопкой мыши "ссылки" в каждом отдельном проекте платформы, выберите "Добавить ссылку", а затем выполните поиск). Пример обновленного файла.csproj находится на GitHub.

Другие вопросы по тегам