通常、プロジェクトはグラフィカル インターフェイスを使用して ArcGIS QuickCapture デザイナーで構成しますが、プロジェクトの JSON コードを変更することもできます。
プロジェクトの JSON を編集するときに、次のプロパティを変更できます。
- basemap - データの確認時に表示されるマップ。
- dataSources - プロジェクト内のボタンに使用されるフィーチャ レイヤーを一覧表示します。
- preferences - プロジェクト内の取得されたすべてのレコードに適用可能です。
- templateGroups - ボタンのグループの表現。
- templates - ボタンの表現。
- cameraInfo - レコードに関する写真およびビデオの取得方法。
- captureInfo - ボタンが選択されたときのデータの取得方法。 取得後に (位置の編集のために) マップを表示したり、マップ ページに表示される表示テキストとヒントをカスタマイズしたりするために構成します。
- displayInfo - ボタンの外観。
- fieldInfos - レコードに関して取得される属性値。
- tracking - プロジェクトが使用する位置情報の共有レイヤーを表します。
- userInput - レコードの属性を入力するために使用可能なユーザー指定文字列。
これらのプロパティの一部は追加のプロパティの配列です。 以降のサブセクションでプロパティ配列について詳しく説明します。
ベースマップ
デフォルトでは、新しいプロジェクトのマップは、組織のデフォルト ベースマップと一致します。 組織のアカウントを使用してアプリにサイン インすると、該当プロジェクトに組織の現在のデフォルト ベースマップが表示まれます。 アプリからサイン アウトすると、Esri の地形図 (World Topographic Map) が表示されます。
次のプロパティがプロジェクトで使用されるマップの識別に使用されます。
プロパティ | 説明 | フィールド タイプ |
---|---|---|
type | WebMap、MMPK、VTPK、または TPK。 null の場合は、Esri の地形図が使用されます。 | String |
itemId | マップのアイテム ID。 | String |
useDefaultBasemap | true (デフォルト) または false。 | Boolean |
プロジェクト作成者は、好みのオンライン マップまたはオフライン マップを選択して、デフォルトの振舞いをオーバーライドできます。 useDefaultBasemap が false に設定されていて、itemId が null の場合、プロジェクトは、Esri の地形図を使用します。
次の例は、ダウンロードしたユーザーだけが使用できる必須 Web マップを示しています。
{
"basemap":{
"type":"WebMap",
"itemId":fae788aa91e54244b161b59725dcbb2a,
"useDefaultBasemap":false,
"required":true,
"zoomLevel":null
}
}
プロジェクト内のマップ上で過去に送信されたデータをユーザーに表示するために、プロジェクト データを含む Web マップを構成して、それをベースマップとして指名することができます。
- Web マップには少なくともプロジェクトと同じレイヤーを含める必要があります。 それ以外のレイヤーを含めることもできます。
- Web マップで定義されたシンボル体系は、送信済みのフィーチャをシンボル表示するために使用されます。
- 送信されなかったデバイス上で取得されたデータは、デフォルトの QuickCapture シンボル体系を使用してシンボル表示されます。 たとえば、ポイントは青色のマーカーを使用してシンボル表示されます。
注意:
Web メルカトル空間参照を使用したマップのみがサポートされます。
データ ソース
次のプロパティがプロジェクト内のフィーチャ レイヤーの識別に使用されます。
プロパティ | 説明 | フィールド タイプ |
---|---|---|
dataSourceId | 配列内のこのレイヤーを識別するために QuickCapture によってこのプロジェクトに割り当てられた一意の数値。 これは、フィーチャ サービス内のレイヤーのインデックスではありません。 1 つのプロジェクトに複数のフィーチャ サービスのレイヤーを含めることができます。 | Integer |
featureServiceItemId | このレイヤーを含むフィーチャ サービスのアイテム ID。 | String |
URL | フィーチャ レイヤー REST エンドポイントの URL (…/FeatureServer/0)。 この URL には、レイヤー インデックスまでの完全な URL を含める必要があります。 | String |
1 つ以上のデータ ソースを dataSource プロパティで列挙できます。 次の例では、2 つの異なるフィーチャ サービスに含まれる 2 つのレイヤーが列挙されています。
{
"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 16 進値としてのプロジェクト背景色。 | String |
splitScreen | ボタンとマップを並べて表示します。 | Boolean |
horizontalAccuracyWarning | 水平精度が十分考慮されなくなる推奨閾値を定義する、メートル単位の小数値。 これは、プロジェクト ページ上の水平精度表示の色を変更するために使用します。 このプロパティには、999 メートルの最大値を指定できます。 | Decimal |
horizontalAccuracyError | 水平精度が十分考慮されなくなる必須閾値を定義する、メートル単位の小数値。 これは、閾値が満たされなかった場合にユーザーがレコードや頂点を取得できないようにするために使用します。 このプロパティには、999 メートルの最大値を指定できます。 | Decimal |
allowEditLocation | 取得してから制限時間内に、ポイントの位置情報を更新できるようにします。 | Boolean |
distanceThreshold | 新しい頂点またはポイントを取得するための、取得された最後の頂点またはポイントからの最小移動距離 (メートル単位)。 デフォルトの距離は 10 メートルです。 | Decimal |
undoThreshold | レコードを削除できるまたは位置を更新できる取得後の時間 (秒単位)。 | Decimal |
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":""
}
注意:
小数値では小数点の記号としてピリオドを使用し、3 桁ごとの区切り文字は使用しないでください。 JSON エディターではカンマが許容されません。
テンプレート グループ
次のプロパティがプロジェクト内のボタンのグループの表示方法の定義に使用されます。 ボタンのグループごとに別々のプロパティを使用できます。
プロパティ | 説明 | フィールド タイプ |
---|---|---|
name | グループの名前。 | String |
label | グループのプロジェクト内に表示されるラベル。 | String |
columns | グループ内の列数。 | Integer |
columnSpacing | 列間の間隔。 | Decimal |
rowSpacing | 行間の間隔。 | Decimal |
backgroundColor | HTML 16 進値としてのグループの背景色。 | String |
outlineColor | HTML 16 進値としてのグループのアウトライン色。 | String |
expanded | デフォルトは true です。 | Boolean |
labelColor | HTML 16 進値としてのグループ ラベルの色。 | String |
テンプレート
次のプロパティがボタンに関連したフィーチャ レイヤーの識別に使用されます。
プロパティ | 説明 | フィールド タイプ |
---|---|---|
id | ボタンの UUID。 | テキスト |
dataSourceId | データが保存されているターゲット レイヤーを参照します。 この ID は、データ ソース配列内のデータ ソースを参照します。 | Integer |
captureInfo
次のプロパティでデータの取得方法を指定します。
プロパティ | 説明 | フィールド タイプ |
---|---|---|
exclusivityGroup | 排他性グループを定義する値。 同じ値を持つすべてのテンプレートがグループ化され、排他的が true に設定されます。 設定すると、値を持つ 1 つのボタンしかアクティブにできなくなります。 | テキスト |
type | esriGeometryPoint、esriGeometryPolyline、または esriGeometryPolygon。 | String |
continuous | ラインとポリゴンでは常に true です。 | Boolean |
editMap | マップの編集のためのオプション。 取得後に表示 (デフォルトは false)、マップ タイトルのカスタマイズ (デフォルトは NULL)、またはマップ ヒントのカスタマイズ (デフォルトは NULL) を行うために選択します。 | String |
displayInfo
次のプロパティでボタンの外観を指定します。
プロパティ | 説明 | フィールド タイプ |
---|---|---|
label | ボタン上のラベル。 | String |
shape | Rectangle、rounded、circle。 | String |
size | Small、medium、large、xlarge、xxlarge。 | String |
color | HTML 16 進値としてのボタン背景の色。 | String |
outlineColor | HTML 16 進値としてのボタン アウトラインの色。 | String |
outlineWidth | ボタン アウトラインの幅。 | Decimal |
labelColor | HTML 16 進値としてのボタン ラベルの色。 | String |
labelFontSize | ボタン ラベルのフォント サイズ。 | Integer |
labelFontWeight | Bold または regular。 | String |
shadowColor | 値が指定されなかった場合は、アプリがグループと同じ backgroundColor を使用します。 これは、影が表示されないことを意味します。 | String |
image | PNG、JPG、SVG 形式のボタンと一緒に表示される画像。 すべての画像がアイテムのリソースとして画像フォルダー内に保存されます。 | String |
fieldInfos
次のプロパティでボタンのタップ時にフィーチャ サービスに入力される属性情報を指定します。 通常、プロジェクト作成者は、事前に定義されたテキストまたはフィールド変数を使用して、収集されたレコードのフィールドに値を入力します。
プロパティ | 説明 | フィールド タイプ |
---|---|---|
fieldName | フィールドの名前。 | String |
value | このトピックで一覧表示された任意のプロパティを含めることができます。 | String |
cameraInfo
次のプロパティで写真またはビデオの取得方法とプロジェクトへの保存方法を指定します。 デフォルトで、ボタンに対して写真の取得を有効にした場合は、写真が常に必須になります。 写真の取得をオプションにするには、required プロパティを false、minMedia を 0 に変更します。 また、imageSize プロパティを変更して、写真の品質を指定することもできます (ビデオのデフォルトの最大長は 10 秒です)。
プロパティ | 説明 | フィールド タイプ |
---|---|---|
mode | None (デフォルト) - 写真またはビデオがフィーチャに関連付けられません。 Automatic - ボタンが選択されるとユーザーの確認なしに写真が撮影されます。 Manual - カメラ プレビューが表示され、ユーザーが写真の取得を制御します。 | String |
imageSize | Small (最長エッジのピクセル数: 320)、medium (デフォルト、最長エッジのピクセル数: 640)、large (最長エッジのピクセル数: 1280)、unrestricted (サイズ制限なし)。 画像がアプリによってサイズ変更される場合、取得した画像の縦横比は維持されます。 | String |
required | true (デフォルト) または false。 | Boolean |
captureVideo | true または false (デフォルト)。 | Boolean |
capturePhoto | true (デフォルト) または false。 | Boolean |
maxMedia | ボタンで取得した写真またはビデオの最大数。 最大制限は、写真の場合は 5、ビデオの場合は 1 です。 | Integer |
minMedia | ボタンで取得した写真やビデオの最小数。 | Integer |
次の例では、サイズ制限がないオプションの写真がプレビューの確認なしで撮影されます。
{
"cameraInfo": {
"mode": "automatic",
"imageSize": "unrestricted",
"required": false,
"captureVideo": false,
"capturePhoto": true,
"maxMedia": 1,
"minMedia": 0
},
notificationsInfo
次のプロパティがプロジェクト内の通知の構成に使用されます。 現在、サポートされている通知は Webhook のみです。
プロパティ | 説明 | フィールド タイプ |
---|---|---|
id | Webhook の一意の ID (プロジェクト内)。 | String |
name | Webhook の名前。 | String |
active | true または false (デフォルト)。 | Boolean |
created | Webhook の作成日時。 | Date |
modified | Webhook が最後に変更された日時。 | Date |
events | Webhook をトリガーしたイベントのタイプ。 addData イベントのみがサポートされています。 | String |
targetLayerUrl | Webhook が構成されたフィーチャ サービス レイヤー (レイヤー インデックスを含む)。 このレイヤーの更新により addData イベントがトリガーされます。 | String |
webhookUrl | ペイロードが送信される Webhook URL。 | String |
includePortalInfo | true (デフォルト) または false。 | Boolean |
includeProjectInfo | true (デフォルト) または false。 | Boolean |
includeServiceRequest | true (デフォルト) または false。 | Boolean |
includeServiceResponse | true (デフォルト) または false。 | Boolean |
次の例では、1 つの Webhook が表示されますが、複数の Webhook を 1 つのプロジェクトに構成できます。
"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 変数値は、アプリの利用者によって入力され、プロジェクト内の 1 つ以上のボタンに適用できます。 アプリの利用者が値を入力しますが、プロジェクト作成者は変数を適用するボタンとフィールドを定義する必要があります。
プロジェクト JSON では、ユーザー入力は userInputs 配列で定義され、"fieldInfos" で id プロパティを使用して参照されます。
プロパティ | 説明 | フィールド タイプ |
---|---|---|
Id | ユーザー入力の一意の ID。 | String |
label | 想定されるエンド ユーザーからの入力値に関するラベルがモバイル アプリに表示されます。 たとえば、RouteNo、CostCenter、RouteNo-CostCenter などのラベルが付けられます。 | String |
fieldType | ユーザー入力値を書き込み可能なフィールドのタイプ。 オプションは esriFieldTypeString、esriFieldTypeDouble、esriFieldTypeInteger に制限されます。 | String |
required | モバイル アプリのエンド ユーザーがユーザー入力値を入力する必要があるのは、ボタンを押す前 (プロジェクト モード) か、ボタンを押した後 (ボタン モード) かを指定します。 | Boolean |
domain | ユーザー入力を制御します。数値範囲 (range)、事前に定義された値のリスト (codedValue)、またはオプションで入力マスクを使用したテキスト入力 (userDefined) に制限されています。 | String |
mode | ユーザーが入力を求められるのは、プロジェクトの起動時 (project) か、ボタンの押下時 (button) かを制御します。 | 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 で制限されることがあります。 | Date |
各モードを使用するタイミングを確認するには、「プロジェクト ユーザー入力変数」または「ボタン ユーザー入力変数」をご参照ください。
ドメインはフィーチャ サービス内で管理することをお勧めします。 Web デザイナーは、フィーチャ サービスから直接ドメイン情報を読み取って、ユーザー入力を作成します。 ドメイン情報は、プロジェクトの 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 ドメイン ユーザー入力を定義し、データ入力を 3 つの値のいずれかに制限する方法を示します。
{
"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 年 6 月から 12 月までの日付のデータ入力を可能にする方法を示します。
{
"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 ドメイン ユーザー入力を定義し、データ入力を 4 桁のルート ID に制限する方法を示します。
{
"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 を定義したら、プロジェクト作成者はそれをフィールドで使用するために割り当てることができます。 routeNo という名前のフィールドに値を入力するために使用される ID が 001 の userInput を以下に示します。
{
"fieldInfos":[
{
"fieldName":"routeNo",
"value":"${userInput:001}"
}
]
}
入力マスク
入力マスクは、ユーザー入力変数の一部として文字とシンボルを使用することで、データ入力の形式を定義します。 入力マスクをユーザー入力変数に適用する場合、ユーザーが入力した値は、入力マスクによって定義された特定のパターンに従っていなければなりません。
入力マスクをユーザー入力変数に適用するには、userInputs.domain.inputMask プロパティでマスクを定義します。
ユーザー入力変数に適用可能なすべてのマスクと例のリストについては、「入力マスク」をご参照ください。
位置情報の共有
次のプロパティが位置情報の共有レイヤーの識別に使用されます。
プロパティ | 説明 | フィールド タイプ |
---|---|---|
enabled | プロジェクトでトラッキングを有効化します。 デフォルトは false です。 | Boolean |
required | プロジェクトを使用するには、トラッキングが有効である必要があります。 デフォルトは false です。 | Boolean |
lastKnownLocationsUpdateInterval | 最新位置レイヤーが更新される頻度 (秒)。 デフォルト値は 60 秒です。 最小値は 5 秒です。 | Decimal |
tracksUploadInterval | トラック レイヤーが更新される頻度 (秒)。 デフォルト値は -1 (オフ) です。 または、600 秒に設定できます。 | Decimal |
tracksCategory | トラック レイヤーのカテゴリ フィールドに書き込まれる値を定義します。 プロジェクト名、固定値、プロジェクト ユーザー入力を使用できます。 デフォルトはプロジェクト名です。 | テキスト |
lastKnownLocationsCategory | 最新位置レイヤーのカテゴリ フィールドに書き込まれる値を定義します。 プロジェクト名、固定値、プロジェクト ユーザー入力を使用できます。 デフォルトはプロジェクト名です。 | テキスト |
次の例は、位置情報の共有が有効になっていますが、プロジェクトを使用するために必要でないことを示しています。 最新位置は 60 秒ごとに更新され、トラックは 600 秒ごとに更新されます。 プロジェクト名は、最新位置レイヤーとトラック レイヤーのカテゴリ フィールドに書き込まれます。
{
"tracking": {
"enabled": true,
"required": false,
"lastKnownLocationsUpdateInterval": 60,
"tracksUploadInterval": 600,
"tracksCategory": "${projectName}",
"lastKnownLocationsCategory": "${projectName}"
}
}