Сегодняшняя цель?
Сегодня мы будем работать над javascript API для ArcGIS, чтобы получить данные, хранящиеся в базе данных ArcGIS, с помощью Node.js.
Вещи, которые вам понадобятся для начала?
- Стандартный проект узла.
Необязательно (только если вы хотите получить доступ к защищенным данным)
- Учетная запись в ArcGIS
- Идентификатор клиента для приложения
- Секрет клиента для приложения
Давайте начнем!
После того, как вы настроите свой проект узла, вам нужно будет установить зависимость пакета, чтобы использовать функцию «запрос» ArcGIS. Итак, перейдите к своему терминалу и введите:
npm install @esri/arcgis-rest-request
Но этот пакет имеет две зависимости
- Принести
- Данные формы
Теперь 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
определяет столбцы в таблице. Здесь я использовал *
для получения всех столбцов.
На этом статья заканчивается. Я надеюсь, что это поможет вам, и если это не забудет оценить это :)