Проект JSON

Проекты обычно настраиваются в конструкторе ArcGIS QuickCapture с помощью графического интерфейса, но также могут быть изменены путем изменения JSON-кода проекта.

При редактировании JSON проекта можно изменить следующие свойства:

  • basemap – карта, отображаемая при просмотре данных.
  • dataSources – список векторных слоев, используемых кнопками в проекте.
  • preferences – применимо ко всем записям, захваченным в проекте.
  • templateGroups – представляет группу кнопок.
  • templates – представляет кнопку
    • cameraInfo – как захватываются фотографии и видео для записи.
    • captureInfo – как данные захватываются при выборе кнопки. Настройте отображение карты после захвата (для редактирования местоположения) и настройте отображаемый текст и подсказку, которые отображаются на странице карты.
    • displayInfo – как будет выглядеть кнопка.
    • fieldInfos – значения атрибута, которые будут захвачены для записи.
  • tracking — Представляет слой публикации местоположений, используемый проектом.
  • userInput – предоставленная пользователем строка, которую можно использовать для заполнения атрибутов записи.

Некоторые из этих свойств являются массивами дополнительных свойств. Следующие подразделы описывают детали массивов свойств.

Базовая карта

По умолчанию, карта нового проекта будет соответствовать базовой карте по умолчанию организации. При входе в приложение под учетной записью организации, пользователь будет видеть в проекте текущую базовую карту организации по умолчанию. Если пользователь выйдет из приложения, отобразится Топографическая карта мира Esri.

Следующие свойства используются для определения карты, которая будет использоваться в проекте:

СвойствоОписаниеТип поля
type

WebMap, MMPK, VTPK или TPK. Если пустое, используется Топографическая карта мира Esri.

Строка

itemId

Идентификатор элемента карты.

Строка

useDefaultBasemap

Да (по умолчанию) или Нет.

Boolean

Авторы проекта могут заместить поведение по умолчанию, выбрав онлайн или офлайн карту по желанию. Если useDefaultBasemap задано как false, и itemId - null, проект будет использовать Топографическую карту мира Esri.

В следующем примере показана необходимая веб-карта, доступная только пользователю, загрузившему ее :

{
   "basemap":{
      "type":"WebMap",
      "itemId":fae788aa91e54244b161b59725dcbb2a,
      "useDefaultBasemap":false,
      "required":true,
      "zoomLevel":null
   }
}

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

  • Веб-карта должна содержать как минимум те же слои, что и проект. Также в нее могут быть включены другие слои.
  • Символы, заданные на веб-карте, будут использоваться для обозначения отправленных объектов.
  • Данные, захваченные на устройстве, но которые не были отправлены, будут отображаться символами QuickCapture по умолчанию. Например, точки будут обозначены синим символом.

Примечание:

Поддерживаются только карты с пространственной привязкой Web Mercator.

Источники данных

Следующие свойства используются для определения векторного слоя в проекте:

СвойствоОписаниеТип поля
dataSourceId

Уникальный номер, присвоенный QuickCapture этому проекту для идентификации этого слоя в массиве. Это не индекс слоя в сервисе объектов. Один проект может иметь слои из разных сервисов объектов.

Integer

featureServiceItemId

Идентификатор элемента сервиса объектов, который содержит этот слой.

Строка

URL

URL-адрес конечной точки REST векторного слоя (…/FeatureServer/0). Этот URL-адрес должен включать полный URL, вплоть до индекса слоя.

Строка

Один или несколько источников данных могут быть перечислены в свойстве dataSource. В следующем примере перечислены два слоя, которые поступают из двух разных сервисов объектов:

{
   "basemap":{

   },
   "dataSources":[
      {
         "featureServiceItemId":"1f683747c06c4a7e9843a477b2ab41e0",
         "dataSourceId":0,
         "url":"https://services1.arcgis.com/e7dVfn25KpfE6dDd/arcgis/rest/services/LayerOne/FeatureServer/0"
      },
      {
         "featureServiceItemId":"2b313747c06c4a7e9843a477b2ab41e0",
         "dataSourceId":1,
         "url":"https://services1.arcgis.com/b45KpfE6dEf121/arcgis/rest/services/LayerTwo/FeatureServer/1"
      }
   ],
   "itemId":"",
   "preferences":{

   },
   "templateGroups":[

   ],
   "userInputs":[

   ],
   "version":""
}

Настройки

Следующие свойства применимы к проекту или всем записям, захваченным в проекте:

СвойствоОписаниеТип поля
backgroundColor

Цвет фона проекта в виде шестнадцатеричного значения HTML.

Строка

splitScreen

Показать кнопки и карту рядом.

Boolean

horizontalAccuracyWarning

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

Десятичные

horizontalAccuracyError

Десятичное значение в метрах, определяющее обязательный порог, выше которого горизонтальная точность больше не считается достаточной. Это используется для предотвращения захвата записей или вершин пользователем, если пороговое значение не достигнуто. Это свойство принимает максимальное значение 999 метров.

Десятичные

allowEditLocation

Позволяет обновить точку местоположения в ограниченный промежуток времени после захвата.

Boolean

distanceThreshold

Минимальное расстояние перемещения в метрах от последней вершины или точки, захваченной до захвата новой вершины или точки. По умолчанию задано расстояние 10 метров.

Десятичные

undoThreshold

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

Десятичные

adminEmail

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

Строка

coordinateNotationFormat

Установите формат обозначения координат для проекта, отображаемый в мобильном приложении. Поддерживаемые значения: UTM, USNG, MGRS, DD, DDM и DMS. Формат по умолчанию - DD

Double

В то время как для horizontalAccuracyWarning и horizontalAccuracyError могут быть установлены пороговые значения, значение horizontalAccuracyWarning должно быть всегда ниже, чем ошибка. Например, если вы установили рекомендуемую точность по горизонтали 10 метров и требуемую точность по горизонтали 30 метров, а ваше устройство вернуло точность 20 метров, вы увидите предупреждение. Если ваше устройство возвращает точность 40 метров, вы не сможете захватить запись.

В следующем примере показаны настройки, установленные с серым фоном: рекомендуемая точность по горизонтали 10 метров, нет порогового значения расстояния и электронный адрес администратора quickcapture@esri.com:

{
   "basemap":{

   },
   "dataSources":[

   ],
   "itemId":"",
   "preferences":{
      "splitScreen":false,
      "backgroundColor":"#f3f3f4",
      "horizontalAccuracyError":null,
      "horizontalAccuracyWarning":10,
      "distanceThreshold":null,
      "undoThreshold":10,
      "adminEmail":"quickcapture@esri.com"
   },
   "templateGroups":[

   ],
   "userInputs":[

   ],
   "version":""
}
Примечание:

Десятичные значения должны использовать точку в качестве десятичного разделителя, а разделители тысяч не должны использоваться. Запятые не принимаются в редакторе JSON.

Группы шаблонов

Следующие свойства используются для определения способа отображения группы кнопок в проекте. Каждая группа кнопок может использовать разные свойства.

СвойствоОписаниеТип поля
name

Имя группы.

Строка

label

Надпись, отображаемая в проекте для группы.

Строка

columns

Число столбцов в группе.

Integer

columnSpacing

Расстояние между столбцами.

Десятичные

rowSpacing

Расстояние между строками.

Десятичные

backgroundColor

Цвет фона группы в виде шестнадцатеричного значения HTML.

Строка

outlineColor

Цвет контура группы в виде шестнадцатеричного значения HTML.

Строка

expanded

По умолчанию Да.

Boolean

labelColor

Цвет надписи группы в виде шестнадцатеричного значения HTML.

Строка

Шаблоны

Следующие свойства используются для определения векторного слоя, связанного с кнопкой:

СвойствоОписаниеТип поля
id

UUID кнопки.

Текст

dataSourceId

Ссылка на целевой слой, где хранятся данные. Идентификатор относится к источнику данных в массиве источников данных.

Integer

captureInfo

Следующие свойства описывают, как данные должны быть захвачены:

СвойствоОписаниеТип поля
exclusivityGroup

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

Текст

type

esriGeometryPoint, esriGeometryPolyline или esriGeometryPolygon.

Строка

continuous

Всегда верно для линий и полигонов.

Boolean

editMap

Опции редактирования карты Выберите показывать после захвата (значение по умолчанию равно false), настройте заголовок карты (значение по умолчанию равно null) или настройте подсказку карты (значение по умолчанию равно null).

Строка

displayInfo

Следующие свойства описывают, как будет выглядеть кнопка:

СвойствоОписаниеТип поля
label

Надпись на кнопке.

Строка

shape

Прямоугольник, скругленный или круг.

Строка

size

Small, medium, large, xlarge или xxlarge.

Строка

color

Цвет фона кнопки в виде шестнадцатеричного значения HTML.

Строка

outlineColor

Цвет контура кнопки в виде шестнадцатеричного значения HTML.

Строка

outlineWidth

Ширина контура кнопки.

Десятичные

labelColor

Цвет надписи кнопки в виде шестнадцатеричного значения HTML.

Строка

labelFontSize

Размер шрифта для надписи кнопки.

Integer

labelFontWeight

Жирный или обычный.

Строка

shadowColor

Если значение не указано, приложение будет использовать то же значение backgroundColor, что и группа. Это означает, что тень не будет видна.

Строка

image

Изображение, отображаемое в виде кнопки, в формате PNG, JPG или SVG. Все изображения хранятся в виде ресурсов элемента в папке изображений.

Строка

fieldInfos

Следующие свойства описывают информацию об атрибутах, которая вводится в сервис объектов при нажатии кнопки. Как правило, автор проекта использует предопределенный текст или переменые поля для заполнения полей собранной записи.

СвойствоОписаниеТип поля
fieldName

Имя поля.

Строка

value

Может содержать любое из свойств, перечисленных в этом разделе.

Строка

cameraInfo

Следующие свойства описывают, как фотографии или видео могут быть захвачены и сохранены в проекте. По умолчанию, если вы разрешаете захватывать фотографии для кнопки, фотография всегда обязательна. Вы можете сделать фотосъемку необязательной, изменив значение свойства required на false и minMedia на 0. Вы также можете указать качество фотографии, изменив свойство imageSize. (Максимальная продолжительность видео по умолчанию составляет 10 секунд.)

СвойствоОписаниеТип поля
mode

Нет (по умолчанию) – с объектом не связывается фотография или видео.

Автоматически – фотография делается без подтверждения пользователя, как только будет нажата кнопка.

Вручную – отображается предварительный просмотр камеры, и пользователь контролирует захват фотографии.

Строка

imageSize

Маленький (320 пикселов по длинной стороне), средний (640 пикселов по длинной стороне), большой (по умолчанию,1280 пикселов по длинной стороне) или неограниченный (без ограничения размера). Если приложение изменит размер изображения, соотношение сторон получаемого изображения будет сохраняться.

Строка

required

Да (по умолчанию) или Нет.

Boolean

captureVideo

True или false (по умолчанию).

Boolean

capturePhoto

Да (по умолчанию) или Нет.

Boolean

maxMedia

Максимальное число фотографий или видео, захваченных с помощью кнопки. Максимальное ограничение - 5 для фото и 1 для видео.

Integer

minMedia

Минимальное число фотографий или видео, захваченных с помощью кнопки.

Integer

В следующем примере дополнительная фотография без ограничения размера сделана без предварительного подтверждения:

{
   "cameraInfo": {
      "mode": "automatic",
      "imageSize": "unrestricted",
      "required": false,
      "captureVideo": false,
      "capturePhoto": true,
      "maxMedia": 1,
      "minMedia": 0
   },

notificationsInfo

Для настройки уведомлений в проекте используются следующие свойства. В настоящий момент единственный поддерживаемый вид уведомления – вебхук.

СвойствоОписаниеТип поля
id

Уникальный ID вебхука (в пределах проекта).

Строка

name

Имя вебхука.

Строка

active

True или false (по умолчанию).

Boolean

created

Дата и время создания вебхука.

Date

modified

Дата и время последнего изменения вебхука.

Date

events

Тип события, вызывающего вебхук. Поддерживается только событие addData.

Строка

targetLayerUrl

Слой сервиса объектов (включая индекс слоя), для которого был настроен вебхук. События addData будут вызываться обновлениями этого слоя.

Строка

webhookUrl

URL вебхука, на который будет отправлена полезная информация.

Строка

includePortalInfo

Да (по умолчанию) или Нет.

Boolean

includeProjectInfo

Да (по умолчанию) или Нет.

Boolean

includeServiceRequest

Да (по умолчанию) или Нет.

Boolean

includeServiceResponse

Да (по умолчанию) или Нет.

Boolean

В следующем примере показан один вебхук, однако в проекте их может быть настроено несколько:

 "notificationsInfo": {
    "webhooks": [
      {
        "active": true,
        "created": 1502880915000,
        "events": [
          "addData"
        ],
        "id": "ByCjvHpPz",
        "includePortalInfo": true,
        "includeProjectInfo": true,
        "includeServiceRequest": true,
        "includeServiceResponse": true,
        "includeUserInfo": true,
        "modified": 1502881754000,
        "name": "Display name",
        "targetLayerUrl": "https://<serviceurl including layer index>",
        "webhookUrl": "https://<webhookserviceurl>"
      }
    ]
  }

Переменные поля

При использовании этих переменных в редакторе JSON необходимо ввести имя переменной в формате ${variable_name}. В следующем примере переменная username присваивается полю с именем NameOfUser:

"fieldInfos": [
 {
   "fieldName": "NameOfUser",
   "value": "${username}"
 },

Переменная ввода пользователя

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

В проекте JSON пользовательские входные данные определяются в массиве userInputs, а затем на них ссылается "fieldInfos"с помощью свойства id.

СвойствоОписаниеТип поля
Id

Уникальный идентификатор ввода пользователя.

Строка

label

В мобильном приложении отображается надпись для описания ожидаемого значения ввода от конечного пользователя. Например, надписью может быть RouteNo, CostCenter или RouteNo-CostCenter.

Строка

fieldType

Тип поля, в которое можно записать введенное пользователем значение. Опции ограничены вариантами esriFieldTypeString, esriFieldTypeDouble и esriFieldTypeInteger.

Строка

required

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

Boolean

domain

Управляет вводом пользователя и ограничивается числовым интервалом (range), списком предопределенных значений (codedValue) или вводом текста, дополнительно с использованием маски ввода (userDefined).

Строка

mode

Определяет, будет ли у пользователя запрашиваться ввод при запуске проекта (проект) или при нажатии кнопки (кнопка).

Строка

multiline

Позволяет вводить несколько строк текста. Это применимо только при domain userDefined.

Boolean

autoCompleteMaxEntries

Указывает количество введенных пользователем значений, которые кэшируются для пользовательского ввода проекта.

Integer

showEvent

Определяет, отображается ли диалоговое окно кнопки пользовательского ввода в начале захвата записи или в конце. Варианты onStart и onEnd. По умолчанию onEnd. Это применимо только при domain userDefined.

Строка

showScanner

Определяет отображение сканера штрих-кода в пользовательском вводе. Значением по умолчанию является false. Это применимо только при domain userDefined.

Boolean

dateTime

Управляет вводом даты и времени. Это применимо только при domain userDefined. Может быть ограничено следующими параметрами: defaultValue, displayTime, maxValue и minValue.

Date

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

Рекомендуется управлять доменами в сервисе объектов. Веб-дизайнер считывает информацию домена непосредственно из сервиса объектов для создания ввода пользователя. Информация домена не записывается автоматически в проект JSON.

Мобильное приложение считывает информацию домена непосредственно из сервиса объектов и сохраняет ее локально на устройстве. Если вы добавляете или изменяете значения доменов в сервисе объектов, вы должны повторно сохранить проект, чтобы пользователю было предложено обновить проект и увидеть изменения.

Внимание:

Автор проекта может вручную задать информацию домена с помощью проекта JSON. Это переопределит все, что читается из сервиса объектов. Автор несет ответственность за обеспечение того, чтобы любые заданные значения находились в пределах значений, определенных в сервисе объектов. Примером применения этого, является случай, когда вы хотите определить подмножество кодированных значений в проекте из гораздо более длинного списка из сервиса объектов.

В следующем примере показано, как задается домен range ввода пользователя, чтобы ограничить ввод данных числом от 1 до 100:

{
   "userInputs":[
      {
         "autoCompleteMaxEntries":5,
         "id":"001",
         "label":"Enter route number",
         "fieldType":"esriFieldTypeInteger",
         "required":true,
         "mode":"project",
         "domain":{
            "type":"range",
            "name":"route no",
            "range":[
               1,
               100
            ]
         }
      }
   ]
}

В следующем примере показано, как задается домен codedValue ввода пользователя, чтобы лимитировать ввод данных выбором одного из трех значений:

{
   "userInputs":[
      {
         "autoCompleteMaxEntries":5,
         "id":"001",
         "label":"Enter class",
         "fieldType":"esriFieldTypeString",
         "required":true,
         "mode":"project",
         "domain":{
            "type":"codedValue",
            "name":"Class",
            "codedValues":[
               {
                  "name":"Principle",
                  "code":"Principle"
               },
               {
                  "name":"Classified (Non-principle)",
                  "code":"Classified"
               },
               {
                  "name":"Unclassified",
                  "code":"Unclassified"
               }
            ]
         }
      }
   ]
}

В следующем примере показано, как определяется текстовый пользовательский ввод userDefined, позволяющий сканировать QR-код в начале захвата строки:

{
   "userInputs":[
      {
         "id":"001",
         "label":"Scan QR code",
         "fieldType":"esriFieldTypeString",
         "required":true,
         "mode":"button",
         "domain":{
            "type":"userDefined",
            "name":"line identifier",
            "multiline":false,
            "showScanner":true,
            "showEvent":"onStart"
            "hint":"Scan QR code or type the identifier of the line to be captured"
         }
      }
   ]
}

В следующем примере показано, как задается домен userDefined ввода пользователя, чтобы позволить ввод даты между июнем и декабрем 2022:

{
   "userInputs":[
      {
         "id":"001",
         "label":"Enter date",
         "fieldType":"esriFieldTypeDate",
         "required":true,
         "mode":"button",
         "domain":{
            "type":"userDefined",
            "name":"followup date",
            "multiline":false,
            "hint":"Enter date between June and December 2022",
            "dateTime": {
               "defaultValue": "${captureTime}",
               "displayTime": true,
               "maxValue": "2022-06-01T00:00:00.000Z",
               "minValue": "2022-12-31T24:59:00.000Z"
            }
         }
      }
   ]
}

В следующем примере показано, как задается домен userDefined ввода пользователя, чтобы ограничить ввод данных четырехзначным идентификатором маршрута:

{
   "userInputs":[
      {
         "id":"001",
         "label":"Enter route number",
         "fieldType":"esriFieldTypeString",
         "required":true,
         "mode":"button",
         "domain":{
            "type":"userDefined",
            "name":"route no",
            "inputMask":"9999",
            "multiline":false,
            "hint":"Enter a four digit route id"
         }
      }
   ]
}

После задания userInput автор проекта может назначить его для использования в поле. Далее показан userInput с идентификатором 001, используемый для заполнения поля с именем routeNo:

{
   "fieldInfos":[
      {
         "fieldName":"routeNo",
         "value":"${userInput:001}"
      }
   ]
}

Маска ввода

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

Чтобы применить маску ввода к входной переменной пользователя, задайте маску в свойстве userInputs.domain.inputMask.

См. Маски ввода для получения списка всех масок и примеров, которые могут быть применены к пользовательским переменным ввода.

Публикация местоположения

Следующие свойства используются для определения слоев публикации местоположения:

СвойствоОписаниеТип поля
enabled

Включить отслеживание для проекта. Значением по умолчанию является false.

Boolean

required

Для использования проекта необходимо включить отслеживание местоположений. Значением по умолчанию является false.

Boolean

lastKnownLocationsUpdateInterval

Частота (в секундах) обновления последнего известного местоположения. Значение по умолчанию – 60 секунд. Минимум 5 секунд.

Десятичные

tracksUploadInterval

Частота (в секундах) обновления слоя треков. По умолчанию -1 (Выключен). Или его можно установить на 600 секунд.

Десятичные

tracksCategory

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

Текст

lastKnownLocationsCategory

Задайте значение, которое будет записано в поле категории слоя последних известных местоположений. Это может быть название проекта, фиксированное значение или значение, введенное пользователем проекта. По умолчанию это название проекта.

Текст

В следующем примере показано, что публикация местоположений включена, но не является необходимой для работы с проектом. Последнее известное местоположение будет обновляться каждые 60 секунд, а треки будут обновляться каждые 600 секунд. Название проекта будет записано в поле категории слоя последних известных местоположений и слоя треков.

{
   "tracking": {
      "enabled": true,
      "required": false,
      "lastKnownLocationsUpdateInterval": 60,
      "tracksUploadInterval": 600,
      "tracksCategory": "${projectName}",
      "lastKnownLocationsCategory": "${projectName}"
   }
}