Our platform is used to manage nautical navigational markers along the Norwegian coast. I am building a WPF app that will be used on a boat while the personell is doing their job of installing and measuring the markers. During their work they update the attributes and geometry of the features (markers).
There is a requirement that the app can work fully offline.
I have taken care of basemaps and I have a process in place to update them. They are not in the scope of this issue. I would like to keep the basemaps separate from the nautical data, as updates to the basemaps are a lot less frequent.
I am looking at what is the best solution to have the nautical data offline. The data on the boat is source of truth and when synced to the server, it will overwrite whatever is on the server (although we do not expect conflicts).
I have an offline and sync enabled FeatureServer with editor tracking.
The 2 approaches that I have considered so far
1. Download the data using GenerateGeodatabaseJob. After that the geodatabase lives on the boat's computer and I have created a sync service that works off GeodatabaseSyncTask. The entire Norway is in this geodatabase. I have implemented this and it appears to be working.
2. Using "Offline map areas" defined on the service. I have not looked into implementing this yet.
There are about 10 boats that generally serve their defined area along the coast. However, they can be sent outside of their area as well. The boat's service area is larger than the max size of an "Offline map area" (I have tested this). For those two reasons, I do not think "Offline map areas" is the right way to go.
My thinking is that with approach n1, while there will be more to sync, the boat users are given a complete dataset so there will never be an issue with missing data. Also less management for developers (and users) to synchronize the right "offline map areas". Keeping the "offline map areas" up to date also sounds like a hassle in this case.
The FeatureServer service currently does not include all of the data but only a sample of layers. The database size (MS SQL) is circa 7 GB (data, without log). The Geodatabase created by GenerateGeodatabaseJob is only 22 MB. Will the mobile Geodatabase be 7 GB as well when all of the layers are added to the service?
Can you recommend any other approaches?
Based on your description, Option 1 aligns more closely to your workflow. If you need to sync data via sync capabilities then that's your best bet.
Another option to use MMPKs for different areas that are loaded as needed but this will require manually updating the data to server every time boat is returned. It won't have that auto-sync option to sync data back to server.