Проекты обычно настраиваются в конструкторе 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}"
}
}