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