Клиентская библиотека Azure Planetary Computer Pro для JavaScript — версия 1.0.0

Microsoft Planetary Computer Pro — это сервис управления геопространственными данными, построенный на гипермасштабной инфраструктуре Azure. GeoCatalog — это ресурс Azure, предоставляющий базовые возможности для погружения, управления, поиска и распространения геопространственных наборов данных с использованием открытой спецификации SpatioTemporal Asset Catalog (STAC).

Ключевые возможности

  • Управление коллекциями STAC: Создавайте, читайте, обновляйте и удаляйте коллекции и элементы STAC для организации ваших геопространственных наборов данных
  • Конфигурация коллекции: Настройте параметры рендера, мозаики, настройки тайлов и запросы для оптимизации производительности запросов и визуализации
  • Визуализация данных: генерируйте тайлы карты (XYZ, TileJSON, WMTS), предварительный просмотр изображений, обрезание по GeoJSON или ограничивающему блоку, извлечение значений точек и вычисление статистики
  • Операции мозаики: Регистрируйте поисковые мозаики STAC для запросов и поиска данных по пикселям, генерируйте тайлы из нескольких элементов и получайте доступ к возможностям TileJSON и WMTS
  • Legends Map: Получите легенды карт классов (категориальные) и интервальные легенды (непрерывные) в виде JSON или PNG изображений с заранее заданными цветными картами
  • Погружение данных: Настройте источники введения (управляемая идентичность или токен SAS), определите погружения из каталогов STAC, а также создайте и мониторите запуски
  • Операции STAC API: полные операции CRUD-обработки элементов, поиск с помощью пространственных/временных фильтров и сортировки, получение запросных свойств и проверка соответствия API
  • Безопасный доступ: генерируйте токены SAS с настраиваемой длительностью для коллекций, подписывайте HREF активов для безопасных загрузок и отзывайте токены — всё это защищено с помощью Microsoft Entra ID

Ключевые ссылки:

Начало работы

Поддерживаемые в настоящее время среды

Чтобы получить дополнительные сведения, ознакомьтесь с нашей политикой поддержки.

Необходимые условия

Конечную точку GeoCatalog (catalogUri) можно найти в портал Azure на странице обзора вашего ресурса GeoCatalog.

Установите пакет @azure/planetarycomputer.

Установите клиентскую библиотеку Azure Planetary Computer Pro для JavaScript с помощью npm:

npm install @azure/planetarycomputer

Создание и проверка подлинности PlanetaryComputerProClient

Существует несколько способов аутентификации с помощью сервиса Microsoft Planetary Computer Pro, и рекомендуемый способ — использовать Microsoft Entra ID для безопасной бесключевой аутентификации через библиотеку Azure Identity. Чтобы приступить к работе, выполните приведенные действия.

  1. Install the Azure Identity package:
npm install @azure/identity
  1. Зарегистрируйте новое приложение Microsoft Entra ID и предоставите доступ к Microsoft Planetary Computer Pro, назначив соответствующую роль вашему руководителю сервиса.

  2. Задайте значения идентификатора клиента, идентификатора клиента и секрета клиента приложения Microsoft Entra ID в качестве переменных среды: AZURE_CLIENT_ID, AZURE_TENANT_ID, AZURE_CLIENT_SECRET.

  3. Создайте клиент с помощью DefaultAzureCredential:

import { DefaultAzureCredential } from "@azure/identity";
import { PlanetaryComputerProClient } from "@azure/planetarycomputer";

const credential = new DefaultAzureCredential();
const catalogUri = "<your-geocatalog-endpoint>"; // e.g., "https://your-geocatalog.geocatalogs.azure.com"
const client = new PlanetaryComputerProClient(catalogUri, credential);

Основные понятия

PlanetaryComputerProClient

PlanetaryComputerProClientявляется основным интерфейсом для разработчиков, использующих клиентскую библиотеку Microsoft Planetary Computer Pro. Клиент предоставляет доступ к нескольким группам операций:

Операции STAC (client.stac)

  • Управление коллекциями: Создавайте, обновляйте, перечисляйте и удаляйте коллекции STAC для организации ваших геопространственных наборов данных
  • Управление элементами: создание, чтение, обновление и удаление отдельных элементов STAC в коллекциях
  • Поиск API: поиск элементов с помощью пространственных и временных фильтров, сортировки и запросных свойств
  • Настройка: Управление опциями рендера, мозаиками, настройками тайлов, запросами и типами разделов
  • Соответствие API: Получить классы соответствия API STAC и информацию о целевой странице

Операции с данными (client.data)

  • Генерация тайлов: генерировать тайлы карты (XYZ, TileJSON, WMTS) из коллекций, предметов и мозаик
  • Визуализация данных: создание предпросмотрных изображений, обрезание по GeoJSON или ограничивающему блоку, извлечение значений точек и вычисление статистики
  • Операции с мозаикой: регистрируйте мозаики на основе поиска STAC и извлекайте мозаичные плитки, возможности TileJSON и WMTS
  • Легенды карты: Получите карту классов и легенды интервалов в виде JSON или PNG изображений
  • Метаданные активов: Получить наборы матриц тайлов и метаданные активов для коллекций и предметов

Операции поглощения (client.ingestion)

  • Источники погружения: Настройте источники погружения с помощью управляемой идентичности или аутентификации токена SAS
  • Определения поглощения: Определите автоматизированное ввод каталога STAC из публичных и частных источников данных
  • Ingestion Runs: Создайте и контролируйте запуски с подробным отслеживанием операций

Операции подписи с общим доступом (client.sharedAccessSignature)

  • Генерация токенов: генерировать токены SAS с настраиваемой длительностью для коллекций
  • Подпись активов: Sign asset HREFs для безопасного скачивания управляемых хранилищ
  • Отклик токенов: Отзыв токенов при необходимости для контроля доступа

GeoCatalog

GeoCatalog — это ресурс высшего уровня Azure, который хранит и организует ваши геопространственные данные. Он предоставляет:

  • Zone-reundant, управляемое хранилище для растровых и кубических форматов
  • Встроенная облачная оптимизация для поддерживаемых типов данных
  • Управляемый API STAC для всех хранимых данных
  • Интеграция с безопасностью и управлением идентификацией Azure через Microsoft Entra ID

STAC (Каталог активов SpatioTemporal)

STAC — это открытая спецификация для организации и описания геопространственных данных. Microsoft Planetary Computer Pro использует STAC для предоставления:

  • Коллекции: логические группировки связанных геопространственных наборов данных
  • Элементы: Отдельные ресурсы (например, спутниковые изображения, растры) с метаданными
  • Активы: Реальные файлы данных, на которые ссылаются STAC Items

Примеры

В этом разделе представлены фрагменты кода, охватывающие распространённые рабочие процессы GeoCatalog. Полные рабочие примеры смотрите каталог образцов .

Список коллекций STAC

import { DefaultAzureCredential } from "@azure/identity";
import { PlanetaryComputerProClient } from "@azure/planetarycomputer";

const credential = new DefaultAzureCredential();
const catalogUri = "<your-geocatalog-endpoint>";
const client = new PlanetaryComputerProClient(catalogUri, credential);
const collections = await client.stac.getCollections();
console.log(`Found ${collections.collections.length} collections`);
for (const collection of collections.collections) {
  console.log(`- ${collection.id}: ${collection.description}`);
}

Поиск предметов STAC

import { DefaultAzureCredential } from "@azure/identity";
import { PlanetaryComputerProClient } from "@azure/planetarycomputer";

const credential = new DefaultAzureCredential();
const catalogUri = "<your-geocatalog-endpoint>";
const client = new PlanetaryComputerProClient(catalogUri, credential);
const searchResult = await client.stac.search({
  collections: ["naip"],
  datetime: "2021-01-01T00:00:00Z/2022-12-31T23:59:59Z",
  limit: 10,
});
console.log(`Found ${searchResult.features.length} items`);
for (const item of searchResult.features) {
  console.log(`Item ID: ${item.id}, Collection: ${item.collection}`);
}

Получите детали товара STAC

import { DefaultAzureCredential } from "@azure/identity";
import { PlanetaryComputerProClient } from "@azure/planetarycomputer";

const credential = new DefaultAzureCredential();
const catalogUri = "<your-geocatalog-endpoint>";
const client = new PlanetaryComputerProClient(catalogUri, credential);
const item = await client.stac.getItem("naip", "ga_m_3308421_se_16_060_20211114");
console.log(`Item ID: ${item.id}`);
console.log(`Assets: ${Object.keys(item.assets)}`);

Создать коллекцию STAC

import { DefaultAzureCredential } from "@azure/identity";
import { PlanetaryComputerProClient } from "@azure/planetarycomputer";

const credential = new DefaultAzureCredential();
const catalogUri = "<your-geocatalog-endpoint>";
const client = new PlanetaryComputerProClient(catalogUri, credential);
const poller = await client.stac.createCollection({
  id: "my-collection",
  type: "Collection",
  stacVersion: "1.0.0",
  description: "A collection of geospatial data",
  license: "proprietary",
  extent: {
    spatial: { boundingBox: [[-180, -90, 180, 90]] },
    temporal: { interval: [[null, null]] },
  },
  links: [],
});
await poller.pollUntilDone();
console.log("Collection created");

Регистрируйте и отобразите мозаичные плитки

import { DefaultAzureCredential } from "@azure/identity";
import { PlanetaryComputerProClient } from "@azure/planetarycomputer";

const credential = new DefaultAzureCredential();
const catalogUri = "<your-geocatalog-endpoint>";
const client = new PlanetaryComputerProClient(catalogUri, credential);
const registration = await client.data.registerMosaicsSearch({
  collections: ["naip"],
  filterLang: "cql2-json" as const,
  filter: { op: "=", args: [{ property: "naip:year" }, "2021"] },
});
console.log(`Search ID: ${registration.searchId}`);
const tileJson = await client.data.getSearchTileJson(registration.searchId, {
  assets: ["image"],
});
console.log(`Tile URLs: ${tileJson.tiles}`);

Значения точек извлечения

import { DefaultAzureCredential } from "@azure/identity";
import { PlanetaryComputerProClient } from "@azure/planetarycomputer";

const credential = new DefaultAzureCredential();
const catalogUri = "<your-geocatalog-endpoint>";
const client = new PlanetaryComputerProClient(catalogUri, credential);
const pointData = await client.data.getItemPoint(
  "naip",
  "ga_m_3308421_se_16_060_20211114",
  -84.41,
  33.65,
  { assets: ["image"] },
);
console.log(`Coordinates: ${pointData.coordinates}`);
console.log(`Values: ${pointData.values}`);

Генерация тайлов карты

import { DefaultAzureCredential } from "@azure/identity";
import { PlanetaryComputerProClient } from "@azure/planetarycomputer";

const credential = new DefaultAzureCredential();
const catalogUri = "<your-geocatalog-endpoint>";
const client = new PlanetaryComputerProClient(catalogUri, credential);
const tileResponse = await client.data.getTile(
  "naip",
  "ga_m_3308421_se_16_060_20211114",
  "WebMercatorQuad",
  14,
  4322,
  6463,
  { assets: ["image"] },
);
console.log(`Tile size: ${tileResponse.length} bytes`);

Настройка источника введения

import { DefaultAzureCredential } from "@azure/identity";
import { PlanetaryComputerProClient } from "@azure/planetarycomputer";

const credential = new DefaultAzureCredential();
const catalogUri = "<your-geocatalog-endpoint>";
const client = new PlanetaryComputerProClient(catalogUri, credential);
const source = await client.ingestion.createSource({
  id: "my-storage-source",
  kind: "BlobManagedIdentity",
  connectionInfo: {
    containerUri: "https://mystorage.blob.core.windows.net/geospatial-data",
    objectId: "00000000-0000-0000-0000-000000000000",
  },
});
console.log(`Created source: ${source.id}`);

Управление вводом данных

import { DefaultAzureCredential } from "@azure/identity";
import { PlanetaryComputerProClient } from "@azure/planetarycomputer";

const credential = new DefaultAzureCredential();
const catalogUri = "<your-geocatalog-endpoint>";
const client = new PlanetaryComputerProClient(catalogUri, credential);
const ingestion = await client.ingestion.create("my-collection", {
  importType: "StaticCatalog",
  displayName: "My data ingestion",
  sourceCatalogUrl: "https://example.com/catalog.json",
  keepOriginalAssets: true,
  skipExistingItems: true,
});
console.log(`Created ingestion: ${ingestion.id}`);

Получите токен SAS

import { DefaultAzureCredential } from "@azure/identity";
import { PlanetaryComputerProClient } from "@azure/planetarycomputer";

const credential = new DefaultAzureCredential();
const catalogUri = "<your-geocatalog-endpoint>";
const client = new PlanetaryComputerProClient(catalogUri, credential);
const token = await client.sharedAccessSignature.getToken("naip");
console.log(`Token expires at: ${token.expiresOn}`);
// Sign an asset URL for secure download
const signed = await client.sharedAccessSignature.getUrl(
  "https://storage.blob.core.windows.net/container/asset.tif",
);
console.log(`Signed URL: ${signed.href}`);

Troubleshooting

Общая информация

Клиентская библиотека Planetary Computer Pro создаст исключения, определённые в Azure Core.

import { DefaultAzureCredential } from "@azure/identity";
import { PlanetaryComputerProClient } from "@azure/planetarycomputer";
import { RestError } from "@azure/core-rest-pipeline";

const credential = new DefaultAzureCredential();
const catalogUri = "<your-geocatalog-endpoint>";
const client = new PlanetaryComputerProClient(catalogUri, credential);
try {
  await client.stac.getCollection("non-existent-collection");
} catch (e) {
  if (e instanceof RestError) {
    console.log(`Status code: ${e.statusCode}`);
    console.log(`Message: ${e.message}`);
  }
}

Logging

Включение ведения журнала может помочь выявить полезные сведения о сбоях. Чтобы просмотреть журнал HTTP-запросов и ответов, задайте для переменной среды AZURE_LOG_LEVEL значение info. В альтернативном порядке, логирование можно включить во время выполнения, вызвав setLogLevel в @azure/logger:

import { setLogLevel } from "@azure/logger";

setLogLevel("info");

Дополнительные инструкции по включению журналов см. в документации по пакету @azure/loger.

Дальнейшие действия

Дополнительные примеры кода

Полные рабочие примеры смотрите в отдельных примерных файлах:

Сценарий Sample
Управление коллекцией STAC stacCreateCollectionSample.ts
Управление элементами STAC stacCreateItemSample.ts
Поиск STAC stacSearchSample.ts
Мозаичная регистрация dataRegisterMosaicsSearchSample.ts
Генерация тайлов карты dataGetTileSample.ts
Очки dataGetPointSample.ts
Настройка Ingestion ingestionCreateSourceSample.ts
Управление прогнанием ingestionCreateSample.ts
Токен SAS sharedAccessSignatureGetTokenSample.ts
Легенды карты dataGetLegendSample.ts

Дополнительная документация

Contributing

Если вы хотите внести свой вклад в эту библиотеку, ознакомьтесь с руководством по созданию и тестированию кода.

Этот проект приветствует взносы и предложения. Большинство вкладов требуют, чтобы вы согласились с соглашением о лицензии участника (CLA), заявив, что у вас есть право, и на самом деле, предоставьте нам права на использование вашего вклада. Для получения подробной информации посетите cla.microsoft.com.

При отправке запроса на вытягивание бот CLA автоматически определяет, нужно ли предоставить соглашение об уровне обслуживания и украсить pr соответствующим образом (например, метка, комментарий). Просто следуйте инструкциям, предоставленным ботом. Это необходимо сделать только один раз во всех репозиториях с помощью нашего CLA.

В рамках этого проекта действуют правила поведения в отношении продуктов с открытым исходным кодом Майкрософт. Дополнительные сведения см. в разделе часто задаваемых вопросов о правилах поведения или обратитесь к opencode@microsoft.com с любыми дополнительными вопросами или комментариями.