We have signed up for a developer account to test the capabilities of ArcGIS runtime for .NET. The application we need to develop must work in disconnected offline mode. We followed the SDK documentation and using the OfflineMapTask we can generate an offline map. The problem is it only works for small sections of the map. As soon as we try do generate an offline map from bigger selection we are getting an error message: Unable to export the cache, estimated tile count is greater than the max export tiles count (10000) that is set for the service. Our application needs to contain entire UK, Europe and potentially the whole world. Is there a way to do this?
If you go to the ArcGIS Server admin directory and browse to the service, you should see a parameter called "maxExportTilesCount". What is this value set to?
Thanks Calvin for such a prompt reply.
How can I access ArcGIS Server admin?
The Uri of the ServerInfo class is set to "https://www.arcgis.com/sharing/rest". Do I need to modify this Uri to get to the admin section?
Sorry Calvin, it looks I am missing something. This url looks like it is pointing to something installed within our domain. Do we need to install something locally? I did not install anything ArcGIS related on my dev machine. I got the dll's through nuget packages.
Thanks Calvin. I do not think I described it well.
I have signed up for a free ArcGIS Developer subscription. I have then downloaded the SDK for .Net.
I have created new WPF application, then followed the SDK example to create cache using my application. I draw rectangle using mapView.SketchEditor.StartAsync. I then pass this rectangle to OfflineMapTask like so:
// Create an offline map task with the current (online) map.
OfflineMapTask takeMapOfflineTask = await OfflineMapTask.CreateAsync(MyMapView.Map);
// Create the default parameters for the task, pass in the area of interest.
GenerateOfflineMapParameters parameters = await takeMapOfflineTask.CreateDefaultGenerateOfflineMapParametersAsync(_areaOfInterest);
// Create the job with the parameters and output location.
_generateOfflineMapJob = takeMapOfflineTask.GenerateOfflineMap(parameters, packagePath);
This works fine if the _areaOfInterest is small. If I select bigger rectangle e.g. entire UK, I get the error message I mentioned above.
As Calvin is hinting at, the maximum size you can take offline is limited in the service's settings. If you own the service, you can increase that limit - if you don't own the service, you're at the mercy of the owner and have to stay within the maximum limitation.
Note that a cache for the entire world could be several terabytes!
If you're looking to deploy cached tiled basemaps covering region/continent/global scale you should consider generating the cache as a desktop process using ArcGIS Pro or as a server-side process using ArcGIS Enterprise and side-loading the cache onto each device. I recommend contacting your local esri office to discuss data options in more detail: Contact Us (esri.com).
I would agree with what has previously been stated, trying to generate a cache for an area that big using the standard offline map task isn't going to work, unless you don't want to zoom in. If you are able to increase the number adequately it's going to take a day to download the map.
What we have done, as @MichaelBranscomb brings up is use an offline cache, There are vendors other than esri that could provide this (we have a client that uses Google). Something to keep in mind going down this path is these will be huge. The offline tile cache we have is 34GB for about half a good size US State. There is also the issue of deployment, the application we use this on is in WPF and deployed on laptops, so we could deploy the tiles over a network. If you are looking at deploying to tablets this is a lot bigger a problem
The option we use on iOS apps is to use an online basemap along with offline data. This gives us an application that will operate offline and most of the time the user has a basemap, but there may be times when the background is blank. We have found often in the field when the user is collecting data they are zoomed in to a level that they really don't see the basemap anyway. You can set the IncludeBasemap flag to false in the parameters to keep any basemap from downloading. What's nice this way, too, is we can provide a basemap switcher so they have a few choices instead of just a single that would be in a downloaded cache