You can create mobile map package using the ArcGIS Pro tool called create a mobile map package. They can contain many read-only maps, their layers and associated data such as geodatabases, tile packages, raster datasets, as well as network datasets and locators. Each self-contained mobile map package file (*.mmpk) adheres to the common map definition thus allowing it to operate as a transfer mechanism to transports maps and data across the ArcGIS platform.
Note:If you'd like ready-to-use and regularly updated basemaps, locators, or network datasets for your area of interest, you can license StreetMap Premium data in mobile map package format. For details, see Add StreetMap Premium data.
Direct read or unpack?
Typically mobile map packages can be loaded directly from the *mmpk file. With ArcGIS Pro version 2.1 (or higher) you can include raster datasets within a mobile map package file. These *.mmpk files must, however, be unpacked into a directory before you load them in your app.
You can check whether you can read the mobile map package directly by examining the IsDirectReadSupportedAsync property.
If direct reading is not supported use the unpack method to place the mobile map package file (*.mmpk) content into a directory. You can then instantiate mobile map package using this mobile map package directory location.
Unpacking a mobile map package file into a directory obviously occupies space. You may want to confirm that the device has sufficient space before you unpack the mobile map package file to avoid an unpacking error. To save space you could delete the original mobile map package file after unpacking completes (unless you need this file for another purpose).
Check and unpack a mobile map packages
If you do not know whether the mobile map package, provided by ArcGIS Pro, contains raster data then we strongly recommend that you confirm whether the mobile map package can be read directly by calling the IsDirectReadSupportedAsync method.
// Mobile map package to open directly from a package or an unpacked folder.
// Check whether the mobile map package supports direct read.
bool isDirectReadSupported = await MobileMapPackage.IsDirectReadSupportedAsync(pathToOutputPackage);
// If it does, create the mobile map package directly from the .mmpk file.
mobileMapPackage = await MobileMapPackage.OpenAsync(pathToOutputPackage);
// Otherwise, unpack the mobile map package file into a directory.
await MobileMapPackage.UnpackAsync(pathToOutputPackage, pathToUnpackedPackage);
// Create the mobile map package from the unpack directory.
mobileMapPackage = await MobileMapPackage.OpenAsync(pathToUnpackedPackage);
NOTE: Here is some advice regarding unpacking a mobile map package files (.mmpk):
- If you try to load a mobile map package file where direct read is not supported an error will be thrown. The error message will advise you to unpack the mobile map package file.
- Instead of adding raster data to a scene as an operational or basemap layer you could create a .tpk from raster data and add that to the map before creating the mobile map package file. This would avoid the need to unpack the mobile map package.
- If you unpack a mobile map package file into a directory it will occupy a similar amount of space as the original package file.
- You should confirm that the device has sufficient space before you unpack the mobile map package to avoid an unpacking error.
- You could delete the original mobile map package file after unpacking completes to save space (unless you need this file for another purpose).
Once you have instantiated and loaded the mobile map package you can access any of the maps within the package and display them by passing them to the map view.
// Make sure there is at least one map, then add the first map in the package to the map view.
if (mobileMapPackage.Maps.Count > 0)
Map myMap = mobileMapPackage.Maps.First();
MyMapView.Map = myMap;