Сегодняшняя цель?

Сегодня мы будем работать над javascript API для ArcGIS, чтобы получить данные, хранящиеся в базе данных ArcGIS, с помощью Node.js.

Вещи, которые вам понадобятся для начала?

  • Стандартный проект узла.

Необязательно (только если вы хотите получить доступ к защищенным данным)

  • Учетная запись в ArcGIS
  • Идентификатор клиента для приложения
  • Секрет клиента для приложения

Давайте начнем!

После того, как вы настроите свой проект узла, вам нужно будет установить зависимость пакета, чтобы использовать функцию «запрос» ArcGIS. Итак, перейдите к своему терминалу и введите:

npm install @esri/arcgis-rest-request

Но этот пакет имеет две зависимости

  1. Принести
  2. Данные формы

Теперь Node.js не имеет встроенного API для выборки или formData, поэтому нам также нужно будет установить эти две зависимости. Для этого введите:

npm install node-fetch isomorphic-form-data

На данный момент мы готовы импортировать модуль запросов Esri в наш server.js.

Начнем с импорта этих зависимостей. После импорта ваш файл должен выглядеть примерно так:

ПРИМЕЧАНИЕ. Порядок здесь имеет значение.

Мы будем использовать выборку в качестве параметра запроса по умолчанию, поэтому мы импортировали setDefaultRequestOption и, чтобы установить его, включите это в свой файл:

setDefaultRequestOption({ fetch });

Теперь напишите блок try…catch и сделайте запрос на получение данных из URI.

try {
    await request('https://www.arcgis.com/sharing/rest/content/items/6e03e8c26aad4b9c92a87c1063ddb0e3/data').then((response) => { console.log(response) }
} catch (err) {
    console.log(err)
}

Это основное использование функции запроса, предоставляемой ArcGIS. Это даст вам всю информацию, возвращенную по ссылке.

Доступ к вашим защищенным данным с помощью esri/request

Если вы используете защищенную ссылку в приведенном выше коде, она выдаст вам ошибку о том, что это запрещено или требует токена. Чтобы получить доступ к этим данным, нам нужно будет использовать сеанс пользователя или сеанс приложения. Здесь мы будем работать с сеансом приложения, но если вы используете сеанс пользователя, замените сеанс приложения сеансом пользователя, и все должно быть хорошо.

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

npm install @esri/arcgis-rest-auth

Установите это и импортируйте в файл, с которым вы работали.

const { ApplicationSession } = require(‘@esri/arcgis-rest-auth’);

После этого вернитесь к блоку try…catch и создайте новый сеанс приложения с вашим идентификатором клиента и секретом клиента. А затем включите этот сеанс в запрос, который вы отправляете.

try {
    const session = new ApplicationSession({
        clientId: process.env.CLIENT_ID,
        clientSecret: process.env.CLIENT_SECRET
    })
    request(process.env.YOUR_PROTECTED_DATA_URI, 
        authentication: session
    }).then(function(response) {
           console.log(response);
    })
} catch(err) {
    console.log(err);
}

Теперь вы сможете увидеть все защищенные данные. Но если вы хотите получить доступ к данным слоя, перейдите к следующему разделу: p

Как получить доступ к данным слоев?

Если ваши данные содержат слой и вы хотите извлечь атрибуты из этого слоя, вам нужно будет сделать еще один шаг.

В вашем URI данных вам нужно будет добавить 0/query 0 представляет индекс слоя (0 — первый), а query означает, что вы запрашиваете 0-й слой. После этого вы захотите добавить params к вашему запросу, который будет определять запрос, который вы делаете. После этого ваш код должен выглядеть примерно так:

try {
    const session = new ApplicationSession({
        clientId: process.env.CLIENT_ID,
        clientSecret: process.env.CLIENT_SECRET
    })
    request(process.env.YOUR_PROTECTED_DATA_URI, 
        authentication: session
        params: {
            f: "json",
            where: "1=1"
            outfields: "*"
        }
    }).then(function(response) {
           console.log(response);
    })
} catch(err) {
    console.log(err);
}

Этот запрос извлечет все данные, присутствующие в слое. Но, конечно, вы можете изменить его под свои нужды. where определяет предложение where запроса, а outfields определяет столбцы в таблице. Здесь я использовал * для получения всех столбцов.

На этом статья заканчивается. Я надеюсь, что это поможет вам, и если это не забудет оценить это :)