Проект JSON

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

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

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

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

Настройки

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

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

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

String

splitScreen

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

Boolean

horizontalAccuracyWarning

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

Десятичные

horizontalAccuracyError

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

Десятичные

allowEditLocation

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

Boolean

distanceThreshold

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

Десятичные

undoThreshold

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

Десятичные

adminEmail

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

String

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.

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

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

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

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

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

String

itemId

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

String

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

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

String

URL

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

String

Один или несколько источников данных могут быть перечислены в свойстве 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":""
}

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

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

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

Имя группы.

String

label

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

String

columns

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

Integer

columnSpacing

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

Десятичные

rowSpacing

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

Десятичные

backgroundColor

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

String

outlineColor

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

String

expanded

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

Boolean

labelColor

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

String

Шаблон

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

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

UUID кнопки.

Текст

dataSourceId

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

Integer

captureInfo

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

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

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

Текст

type

esriGeometryPoint, esriGeometryPolyline или esriGeometryPolygon.

String

continuous

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

Boolean

editMap

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

String

displayInfo

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

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

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

String

shape

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

String

size

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

String

color

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

String

outlineColor

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

String

outlineWidth

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

Десятичные

labelColor

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

String

labelFontSize

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

Integer

labelFontWeight

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

String

shadowColor

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

String

image

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

String

fieldInfo

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

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

Имя поля.

String

value

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

String

cameraInfo

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

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

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

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

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

String

imageSize

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

String

required

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

Boolean

maxPhotos

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

Integer

minPhotos

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

Integer

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

{
   "mode":"automatic",
   "imageSize":"unrestricted",
   "required":true
}

notificationsInfo

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

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

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

String

name

Имя вебхука.

String

active

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

Boolean

created

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

Дата

modified

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

Дата

events

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

String

targetLayerUrl

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

String

webhookUrl

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

String

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:

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

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

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

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

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

String

label

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

String

fieldType

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

String

required

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

Boolean

domain

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

String

mode

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

String

multiline

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

Boolean

autoCompleteMaxEntries

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

Integer

showEvent

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

String

showScanner

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

Boolean

dateTime

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

Дата

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

Рекомендуется управлять доменами в сервисе объектов. Веб-дизайнер считывает информацию домена непосредственно из сервиса объектов для создания ввода пользователя. Информация домена не записывается автоматически в проект 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}"
   }
}