Below is the code which I am using to download feature layer. Right now I am getting exception "
Geometry cannot be null in generate geodatabase parameters.
". Actually I want to download all feature layer data automatically in background without user selecting area.
private let FEATURE_SERVICE_URL = NSURL(string: "https://services7.arcgis.com/JRY73mi2cJ1KeR7T/arcgis/rest/services/NewYorkHospitalLayer/FeatureServe...")!
private var syncTask:AGSGeodatabaseSyncTask!
private var generateJob:AGSGenerateGeodatabaseJob!
private var generatedGeodatabase:AGSGeodatabase!
override func viewDidLoad() {
super.viewDidLoad()
self.map = AGSMap(basemap: AGSBasemap.streetsBasemap())
self.syncTask = AGSGeodatabaseSyncTask(URL: self.FEATURE_SERVICE_URL)
self.addFeatureLayers()
self.mapView.map = self.map
self.generateGeodatabase()
}
func addFeatureLayers() {
self.syncTask.loadWithCompletion { [weak self] (error) -> Void in
if let error = error {
print("Could not load feature service \(error)")
} else {
guard let weakSelf = self else {
return
}
for (index, layerInfo) in weakSelf.syncTask.featureServiceInfo!.layerInfos.enumerate().reverse() {
//For each layer in the serice, add a layer to the map
let layerURL = weakSelf.FEATURE_SERVICE_URL.URLByAppendingPathComponent(String(index))
let featureTable = AGSServiceFeatureTable(URL:layerURL!)
let featureLayer = AGSFeatureLayer(featureTable: featureTable)
featureLayer.name = layerInfo.name
featureLayer.opacity = 0.65
weakSelf.map.operationalLayers.addObject(featureLayer)
}
}
}
}
func generateGeodatabase() {
//create AGSGenerateLayerOption objects with selected layerIds
var layerOptions = [AGSGenerateLayerOption]()
let layerOption = AGSGenerateLayerOption(layerID: 0)
layerOption.useGeometry = false
layerOptions.append(layerOption)
//parameters
let params = AGSGenerateGeodatabaseParameters()
params.layerOptions = layerOptions
params.returnAttachments = true
params.attachmentSyncDirection = .Bidirectional
//name for the geodatabase
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
let path = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0]
let fullPath = "\(path)/\(dateFormatter.stringFromDate(NSDate())).geodatabase"
//create a generate job from the sync task
self.generateJob = self.syncTask.generateJobWithParameters(params, downloadFileURL: NSURL(string: fullPath)!)
//start the job
self.generateJob.startWithStatusHandler({ (status: AGSJobStatus) -> Void in
SVProgressHUD.showWithStatus(status.statusString(), maskType: .Gradient)
}) { [weak self] (object: AnyObject?, error: NSError?) -> Void in
if let error = error {
SVProgressHUD.showErrorWithStatus(error.localizedDescription)
}
else {
SVProgressHUD.dismiss()
Print("Database generated successfully")
}
}
}