Днешната цел?

Днес ще работим върху javascript API за ArcGIS, за да получим данните, съхранени в базата данни на ArcGIS, използвайки Node.js

Неща, от които ще се нуждаете, за да започнете?

  • Проект на шаблонен възел.

По избор (само ако искате да получите достъп до вашите защитени данни)

  • Акаунт в ArcGIS
  • Клиентски идентификатор за приложението
  • Клиентска тайна за приложението

Да започваме!

След като настроите вашия проект за възел, ще трябва да инсталирате зависимост от пакет, за да използвате функцията „заявка“ на ArcGIS. Така че, отидете напред към вашия терминал и въведете:

npm install @esri/arcgis-rest-request

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

  1. Извличане
  2. FormData

Сега Node.js няма вграден API за извличане или formData, така че ще трябва да инсталираме и тези две зависимости. За да направите това, въведете:

npm install node-fetch isomorphic-form-data

В този момент всички сме готови да импортираме модула за заявка на Esri в нашия server.js

Нека започнем с импортирането на тези зависимости. След импортирането вашият файл трябва да изглежда по следния начин:

ЗАБЕЛЕЖКА: Редът има значение тук

Ще използваме fetch като опция за заявка по подразбиране и затова импортирахме 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 дефинира колоните в таблицата. Тук използвах * за извличане на всички колони.

Това приключва тази статия. Надявам се това да ви помогне и ако се окаже, не забравяйте да го оцените :)