Starting with version 100.11, you can take certain utility network
The following code takes a web map offline that contains a utility network. The utility network tables are automatically synced with the map when a utility network is detected within.
// Create an offline map task with the map.
val offlineMapTask = OfflineMapTask(map)
val offlineMapParameters =
offlineMapTask.createDefaultGenerateOfflineMapParameters(areaOfInterest).getOrElse { error ->
return showError("Error creating default generate offline map parameters: ${error.message}")
}
offlineMapParameters.includeBasemap = false
// Create an offline map job with the download directory path and parameters and start the job.
val offlineMapJob = offlineMapTask.createGenerateOfflineMapJob(offlineMapParameters, offlineMapPath)
// Start the job.
offlineMapJob.start()
offlineMapJob.result().onFailure { error ->
showError("Error in offline map job: ${error.message}")
}.onSuccess { offlineMapResult ->
if (offlineMapResult.offlineMap.utilityNetworks.size > 0) {
val utilityNetwork = offlineMapResult.offlineMap.utilityNetworks[0]
utilityNetwork.load().getOrElse { error ->
showError("Error loading utility network: ${error.message}")
}
} else {
showError("No utility network found in offline map. ")
}
}
The following code takes a utility network offline using a service geodatabase. The utility network tables only get synced when the sync mode in the generate geodatabase parameters is set to sync system tables.
// Create a geodatabase sync task with the feature service url.
val geodatabaseSyncTask = GeodatabaseSyncTask(featureServerUrl)
geodatabaseSyncTask.load().onFailure { error ->
return showError("Error fetching geodatabase metadata. ${error.message}")
}
// Create generate geodatabase parameters for the selected extents.
val geodatabaseParameters =
geodatabaseSyncTask.createDefaultGenerateGeodatabaseParameters(areaOfInterest).getOrElse { error ->
return showError("Error creating geodatabase parameters: ${error.message}")
}
geodatabaseParameters.returnAttachments = false
// Create a generate geodatabase job.
val geodatabaseJob =
geodatabaseSyncTask.createGenerateGeodatabaseJob(geodatabaseParameters, geodatabaseFilePath)
// Start the generateGeodatabase job.
geodatabaseJob.start()
geodatabaseJob.result().onFailure { error ->
return showError("Error generating geodatabase: ${error.message}")
}.onSuccess { geodatabase ->
if (geodatabase.utilityNetworks.isNotEmpty()) {
val utilityNetwork = geodatabase.utilityNetworks[0]
utilityNetwork.load().getOrElse { error ->
showError("Error loading utility network: ${error.message}")
}
} else {
showError("No utility network found in geodatabase. ")
}
}
For more information about offline workflows using ArcGIS Maps SDKs for Native Apps, see the Offline maps, scenes, and data topic.
