Managing offline map areas

Introduction

With ArcGIS you can take your web maps and layers offline to reliably work with your GIS data in disconnected scenarios when connectivity is intermittent or unavailable.

To learn about the concepts, steps, data requirements and applications that support taking a map offline, refer to the appropriate documentation pages:

Once web maps have been prepared, certain applications in the ArcGIS Platform and the ArcGIS Runtime SDKs allow you to build applications that can utitlize these maps while remaining disconnected. These workflows all make use of offline map areas, which a web map owner can define in one of two ways:

  • ahead of the time field workers will download these areas for offline use, known as preplanned map areas
  • at the time field workers actually need to download them for use, known as on-demand map areas

Note: Only a web map owner can create offline map areas. See Create and manage offline areas for details.

Making map areas ahead of time is the recommended workflow because the map author can ensure accuracy of the offline content and packaging of offline contents occurs only once. Packaged content can be used by mutliple workers to increase performance. This guide describes how to use the ArcGIS API for Python to create preplanned offline map areas for use in custom ArcGIS Runtime SDK apps or Esri applications such as ArcGIS Field Maps.

Let's get started with the API to demonstrate preparing areas ahead of time.

Creating offline map areas

With ArcGIS API for Python, you can conveniently manage offline areas from a Map object. The offline_areas property accesses the OfflineMapAreaManager object with which you can administer all aspects of offline map area management, from creating, to listing to updating. Let's take a look:

from arcgis.gis import GIS
from arcgis.map import Map
gis = GIS(profile="your_online_api_data_owner_profile")

Let's use a hydrology web map depicting the Middle Little Missouri River Sub Basin from the National Hydrology Dataset in the state of North Dakota in the United Sates.

wm_item = gis.content.get("6d7330a7f3f5438ebcbc6fe23f8abcc8")
wm_item
Middle Little Missouri Sub Basin Wetlands and Riparian Areas
Map of the National Wetlands Inventory wetlands and riparian areas data for the Middle Little Missouri Sub-Basin.
Web Map by api_data_owner
Last Modified: August 19, 2024
0 comments, 753 views
wm_obj = Map(item=wm_item)

You can create offline areas for a specified extent, a specific polygon, or a bookmark. You can additionally specify any layers that you need to ignore, a destination folder to store these packages and a minimum and maximum scale to which the packages need to be cached. Let's examine a couple examples:

Examining the Basemap for a Web map

When creating offline map areas, we need information about the basemap in order to package it correctly for offline use. Whether a Basemap is a Tile layer or Vector Tile layer may alter how you have to construct the argument for the tile_services parameter. We'll show an example of packaging for a Basemap configured from a Vector Tile Layer using 3 styles based upon the same service.

Let's use the basemap property of a Map to initialize a BasemapManger, then use the manager's basemap property to return information about the basemap:

wm_obj.basemap.basemap
{'baseMapLayers': [{'id': 'VectorTile_8900',
   'itemId': '2afe5b807fa74006be6363fd243ffb30',
   'layerType': 'VectorTileLayer',
   'opacity': 1.0,
   'styleUrl': 'https://www.arcgis.com/sharing/rest/content/items/2afe5b807fa74006be6363fd243ffb30/resources/styles/root.json',
   'title': 'Human Geography Base',
   'visibility': True},
  {'id': 'VectorTile_9702',
   'isReference': True,
   'itemId': '97fa1365da1e43eabb90d0364326bc2d',
   'layerType': 'VectorTileLayer',
   'opacity': 0.37,
   'styleUrl': 'https://www.arcgis.com/sharing/rest/content/items/97fa1365da1e43eabb90d0364326bc2d/resources/styles/root.json',
   'title': 'Human Geography Detail',
   'visibility': True},
  {'id': 'VectorTile_7804',
   'isReference': True,
   'itemId': 'ba52238d338745b1a355407ec9df6768',
   'layerType': 'VectorTileLayer',
   'opacity': 1.0,
   'styleUrl': 'https://www.arcgis.com/sharing/rest/content/items/ba52238d338745b1a355407ec9df6768/resources/styles/root.json',
   'title': 'Human Geography Label',
   'visibility': True}],
 'title': 'Human Geography Map'}

We now have a dictionary representation of our Human Geograpy Map basemap. We can see it's comprised of 3 VectorTileLayers using 3 different styles to create the map. Let's get the layer item for each basemap layer:

basemap_lyr_items = [
    gis.content.get(vlyr_id["itemId"]) 
    for vlyr_id 
    in wm_obj.basemap.basemap["baseMapLayers"]
]
basemap_lyr_items
[<Item title:"Human Geography Base" type:Vector Tile Layer owner:esri_vector>,
 <Item title:"Human Geography Detail" type:Vector Tile Layer owner:esri_vector>,
 <Item title:"Human Geography Label" type:Vector Tile Layer owner:esri_vector>]

We'll use the url for each of these layers to minimize the size of the vector tile package created for the offline map area.

base_url = basemap_lyr_items[0].url
detail_url = basemap_lyr_items[1].url
label_url = basemap_lyr_items[2].url

Creating offline areas with Bookmarks

The web map depicts wetlands data from subwatersheds within the Little Missouri River basin area of North Dakota. We've created bookmarks in the web map for areas surrounding three subwatersheds:

for bookmark in wm_obj.bookmarks.list:
    print(bookmark.name)
Lower Garner Creek
Merrifield Creek
Bear Creek

We'll create an offline area for the bookmark called Lower Garner Creek. We'll also limit the data extracted into the offline map area package to specific layers in the web map. We'll include a subwatershed boundaries layer and a wetlands layer designating features we want our field workers to update. Let's first look at the list of layers from our web map so we know how to create a list of layers for the ignore_layers argument.

for flyr in wm_obj.content.layers:
    print(f"{flyr.properties.id:<3}{flyr.properties.name}\n{' '*2}{flyr.url}")
6  Middle_Little_Missouri_Subbasin
  https://services7.arcgis.com/YoUrOrgANIzATIon/arcgis/rest/services/Middle_Little_Missouri_SubBasin_Wetlands_and_Riparian_Areas/FeatureServer/6
5  Sub_Watershed Boundaries
  https://services7.arcgis.com/YoUrOrgANIzATIon/arcgis/rest/services/Middle_Little_Missouri_SubBasin_Wetlands_and_Riparian_Areas/FeatureServer/5
4  Theodore_Roosevelt_National_Park
  https://services7.arcgis.com/YoUrOrgANIzATIon/arcgis/rest/services/Middle_Little_Missouri_SubBasin_Wetlands_and_Riparian_Areas/FeatureServer/4
3  Middle Little Missouri Riparian Areas
  https://services7.arcgis.com/YoUrOrgANIzATIon/arcgis/rest/services/Middle_Little_Missouri_SubBasin_Wetlands_and_Riparian_Areas/FeatureServer/3
2  Middle Little Missouri Wetlands
  https://services7.arcgis.com/YoUrOrgANIzATIon/arcgis/rest/services/Middle_Little_Missouri_SubBasin_Wetlands_and_Riparian_Areas/FeatureServer/2
1  Populated_GNIS_Place_Names
  https://services7.arcgis.com/YoUrOrgANIzATIon/arcgis/rest/services/Middle_Little_Missouri_SubBasin_Wetlands_and_Riparian_Areas/FeatureServer/1
0  Non_Populated_GNIS_Places
  https://services7.arcgis.com/YoUrOrgANIzATIon/arcgis/rest/services/Middle_Little_Missouri_SubBasin_Wetlands_and_Riparian_Areas/FeatureServer/0

We only want to include layer 2, and layer 5. So let's use a list comprehension to create a list of the urls for the feature layers we want to ignore:

flyrs_to_ignore = [fl.url for fl in wm_obj.content.layers if not fl.url[-1] in ["2", "5"]]
flyrs_to_ignore
['https://services7.arcgis.com/YoUrOrgANIzATIon/arcgis/rest/services/Middle_Little_Missouri_SubBasin_Wetlands_and_Riparian_Areas/FeatureServer/6',
 'https://services7.arcgis.com/YoUrOrgANIzATIon/arcgis/rest/services/Middle_Little_Missouri_SubBasin_Wetlands_and_Riparian_Areas/FeatureServer/4',
 'https://services7.arcgis.com/YoUrOrgANIzATIon/arcgis/rest/services/Middle_Little_Missouri_SubBasin_Wetlands_and_Riparian_Areas/FeatureServer/3',
 'https://services7.arcgis.com/YoUrOrgANIzATIon/arcgis/rest/services/Middle_Little_Missouri_SubBasin_Wetlands_and_Riparian_Areas/FeatureServer/1',
 'https://services7.arcgis.com/YoUrOrgANIzATIon/arcgis/rest/services/Middle_Little_Missouri_SubBasin_Wetlands_and_Riparian_Areas/FeatureServer/0']

We'll also set the farthest scale users will zoom out to view layers in the package with the min_scale argument. In addition, we'll use the item_properties parameter to specify properties for the resulting Map Area item. We'll specify the title, description, and tags for the item that gets created.

This operation can take a while as the server is packaging the contents of the web map for offline use. To view the status, you can optionally turn on the verbosity using the env module as shown below:

from arcgis import env
env.verbose = True

Note: You must own the web map to run this operation.

offline_item_properties = {"title": "Offline area for Lower Garner Creek Subwatershed",
                          "tags": ["Python", "automation", "hydrology", "wetlands"],
                          "snippet": "Area created for updating wetlands and riparian areas."}

lower_garner_offline_item = wm_obj.offline_areas.create(area = wm_obj.bookmarks.list[0].name,
                                                        item_properties = offline_item_properties,
                                                        min_scale = 126720,
                                                        max_scale = 0,
                                                        ignore_layers=flyrs_to_ignore,
                                                        folder="Wetlands_Inventory",
                                                        tile_services=[
                                                            {
                                                                "url":base_url,
                                                                "levels":"9,10,11,12,13"
                                                            },
                                                            {
                                                                "url":detail_url,
                                                                "levels":"9,10,11,12,13"
                                                            },
                                                            {
                                                                "url":label_url,
                                                                "levels":"9,10,11,12,13"
                                                            }
                                                        ])

We can now use the list() method on the offline_areas object to examine the resulting item:

wm_obj.offline_areas.list()
[<Item title:"Offline area for Lower Garner Creek Subwatershed" type:Map Area owner:api_data_owner>]

Notice the type attribute of the item is Map Area.

Create offline areas with an Extent

We can also use an extent object to create an offline map area. An extent defines a bounding box by specifying coordinate pairs for both the lower-left and upper-right corners. You can define an extent yourself with coordinates that lie within the entire extent of the web map, or use existing features within web map layers to define an extent.

We can define a smaller area within the bounds of our data using latitude and longitude coordinates for an area we know is within our overall extent. For this dataset, we know we are in southwestern North Dakota, so we'll define an extent covering a subarea of a subwatershed named Middlefield Creek within the basin.

When using an extent for the area argument we can use a dictionary formatted as below:

extent_coordinates = { "xmin": value, "ymin": value, "xmax": value, "ymax": value, "spatialReference": { {"wkid": value} } }

Note: The spatial reference of the extent object must match that of the Web map.

mfield_sub_extent = {
    "xmin": -11528805.585,
    "ymin": 5907789.4016,
    "xmax": -11526060.571,
    "ymax": 5909332.221,
    "spatialReference": {
        "wkid": 102100,
        "latestWkid": 3857
    }
}
offline_item_properties = {"title": "Offline area for mid-section of Merrifield Creek Subwatershed",
                          "tags": ["Python", "automation", "hydrology", "wetlands"],
                          "snippet": "Area created for updating wetlands and riparian areas in Little Missouri River basin."}

merrifield_offline_item = wm_obj.offline_areas.create(
    area = mfield_sub_extent,
    item_properties = offline_item_properties,
    min_scale = 126720,
    max_scale = 0,
    ignore_layers= flyrs_to_ignore,
    folder="Wetlands_Inventory",
    tile_services=[
        {
            "url":base_url,
            "levels":"9,10,11,12,13"
        },
        {
            "url":detail_url,
            "levels":"9,10,11,12,13"
        },
        {
            "url":label_url,
            "levels":"9,10,11,12,13"
        }
    ]
)                                                  

Using the same list() method as above, we can now see that we have two Map Area items for this web map.

for wm_oma in wm_obj.offline_areas.list():
    print(wm_oma)
<Item title:"Offline area for mid-section of Merrifield Creek Subwatershed" type:Map Area owner:api_data_owner>
<Item title:"Offline area for Lower Garner Creek Subwatershed" type:Map Area owner:api_data_owner>

Create offline areas from a specific polygon

We can also create an offline map area using an instance of a polygon geometry to define the geographic area. We can extract a polygon from one of our layers.

wm_obj.content.layers[1].properties.name
'Sub_Watershed Boundaries'
from arcgis.geometry import Polygon

subwatershed_lyr = wm_obj.content.layers[1]
bear_ck = subwatershed_lyr.query(where="name = 'Bear Creek'").features[0]
bear_ck_poly = Polygon(bear_ck.geometry)
bear_ck_poly
offline_item_properties = {"title": "Offline area for Bear Creek Subwatershed",
                          "tags": ["Python", "automation", "hydrology", "wetlands"],
                          "snippet": "Area created for updating wetlands and riparian areas in Bear Creek subwatershed in the Little Missouri River basin."}

bear_creek_offline_item = wm_obj.offline_areas.create(
    area = bear_ck_poly,
    item_properties = offline_item_properties,
    min_scale = 210000,
    max_scale = 0,
    ignore_layers= flyrs_to_ignore,
    folder="Wetlands_Inventory",
    tile_services=[
        {
            "url":base_url,
            "levels":"9,10,11,12,13"
        },
        {
            "url":detail_url,
            "levels":"9,10,11,12,13"
        },
        {
            "url":label_url,
            "levels":"9,10,11,12,13"
        }
    ]
)

We've used three different ways of specifying a geographic area to create offline mapping ares for our web map. Now it's time to inspect the Map Area items to get some additional information. As we saw earlier, the create() method results in items with a type attribute of Map Area. We can loop through our list to see this:

for oma_item in wm_obj.offline_areas.list():
    print(f"{oma_item.title:65}{oma_item.type}")
Offline Area for Lower Garner Creek Subwatershed                 Map Area
Offline area for mid-section of Merrifield Creek Subwatershed    Map Area
Offline area for Bear Creek Subwatershed                         Map Area

Inspecting offline packages created for a map area

When you create an offline map area, the data for the specified extent is bundled into one or many packages for downloading depending upon the types of layers in the web map. Feature Layers are packaged into mobile geodatabases, while tile layers and vector tile layers are bundled into tile packages and vector tile packages, respectively. See the Create and manager offline map areas documentation for details.

The packages created for a Map Area item share a relationship with the item. The relationship type is an Area2Package relation with a forward direction. See the Relationship types documentation for a comprehensive list of possible relations between items. Any item has the related_items() method from which you can retrieve the items that participate in the specific relationship type:

for oma_item in wm_obj.offline_areas.list():
    print(f"{oma_item.title} shares the `Area2Package` relationship with: \n{'-' * 50}")
    for rel_item in oma_item.related_items('Area2Package', 'forward'):
        print(f"{' '*2}{rel_item.title:55}\n{' '*4}{rel_item.type}")
    print("\n")
Offline area for Bear Creek Subwatershed shares the `Area2Package` relationship with: 
--------------------------------------------------
  VectorTileServe-f22a2b78d51b42d4a33245f3182ff08e       
    Vector Tile Package
  Middle_Little_Missouri_SubBasin_Wetlands_and_Riparian_Areas-ba4441141ab04c259fd4deb11b3388d9
    SQLite Geodatabase


Offline area for mid-section of Merrifield Creek Subwatershed shares the `Area2Package` relationship with: 
--------------------------------------------------
  VectorTileServe-231eda57e6864977a0dd22aba2e66536       
    Vector Tile Package
  Middle_Little_Missouri_SubBasin_Wetlands_and_Riparian_Areas-8568af2abb5a49f1b50cea9a4c4f6602
    SQLite Geodatabase


Offline area for Lower Garner Creek Subwatershed shares the `Area2Package` relationship with: 
--------------------------------------------------
  Middle_Little_Missouri_SubBasin_Wetlands_and_Riparian_Areas-5e781bac510e41eb857a877b6b2f752a
    SQLite Geodatabase
  VectorTileServe-b9b01536150f45969c9905e9650e5dc8       
    Vector Tile Package


These items are meant for use in offline applications like ArcGIS Field Maps, ArcGIS Survey123, or ArcGIS Runtime SDK applications. If needed, you can call the download() method of the Map Area item to download the data to disk.

Updating offline areas

The layer data used to create the offline map areas may change, so keeping offline areas up to date is an important task. The update() method of the OfflineMapAreaManager class accomplishes this. The method accepts a list of Map Area items as input. If no items are specified in the items argument, all map area items for the web map get updated.

Below is an example of how the progress is relayed back to you when you turn on the verbosity in the env module.

from arcgis import env
env.verbose=True
# update all offline areas for the fire web map
wm_obj.offline_areas.update()
Submitted.
Executing...
Start Time: Monday, August 19, 2024 7:00:08 PM
World_Basemap_v2/VectorTileServer - Check if export URL is different from service URL.
World_Basemap_v2/VectorTileServer - Submitting export vector tile job:https://basemaps.arcgis.com/arcgis/rest/services/World_Basemap_v2/VectorTileServer/exportTiles
World_Basemap_v2/VectorTileServer - Job url:https://basemaps.arcgis.com/arcgis/rest/services/World_Basemap_v2/VectorTileServer/jobs/87d4bd6a20683a98
Middle_Little_Missouri_SubBasin_Wetlands_and_Riparian_Areas/FeatureServer - Get Service Definition
Middle_Little_Missouri_SubBasin_Wetlands_and_Riparian_Areas/FeatureServer - Submit sync job
Middle_Little_Missouri_SubBasin_Wetlands_and_Riparian_Areas/FeatureServer - Submitting sync job:https://services7.arcgis.com/YoUrOrgANIzATIon/arcgis/rest/services/Middle_Little_Missouri_SubBasin_Wetlands_and_Riparian_Areas/FeatureServer/synchronizeReplica
Middle_Little_Missouri_SubBasin_Wetlands_and_Riparian_Areas/FeatureServer - Job url :https://services7.arcgis.com/YoUrOrgANIzATIon/arcgis/rest/services/Middle_Little_Missouri_SubBasin_Wetlands_and_Riparian_Areas/FeatureServer/jobs/bf9eb299-15e5-492d-be66-cdeef0184c8e
World_Basemap_v2/VectorTileServer - Check if export URL is different from service URL.
World_Basemap_v2/VectorTileServer - Submitting export vector tile job:https://basemaps.arcgis.com/arcgis/rest/services/World_Basemap_v2/VectorTileServer/exportTiles
World_Basemap_v2/VectorTileServer - Job url:https://basemaps.arcgis.com/arcgis/rest/services/World_Basemap_v2/VectorTileServer/jobs/92ff7dbe214b7b01
Middle_Little_Missouri_SubBasin_Wetlands_and_Riparian_Areas/FeatureServer - Get Service Definition
Middle_Little_Missouri_SubBasin_Wetlands_and_Riparian_Areas/FeatureServer - Submit sync job
Middle_Little_Missouri_SubBasin_Wetlands_and_Riparian_Areas/FeatureServer - Submitting sync job:https://services7.arcgis.com/YoUrOrgANIzATIon/arcgis/rest/services/Middle_Little_Missouri_SubBasin_Wetlands_and_Riparian_Areas/FeatureServer/synchronizeReplica
Middle_Little_Missouri_SubBasin_Wetlands_and_Riparian_Areas/FeatureServer - Job url :https://services7.arcgis.com/YoUrOrgANIzATIon/arcgis/rest/services/Middle_Little_Missouri_SubBasin_Wetlands_and_Riparian_Areas/FeatureServer/jobs/22fdb7d2-3165-4eb1-b8ec-5e825b7653e8
Middle_Little_Missouri_SubBasin_Wetlands_and_Riparian_Areas/FeatureServer - Get Service Definition
Middle_Little_Missouri_SubBasin_Wetlands_and_Riparian_Areas/FeatureServer - Submit sync job
Middle_Little_Missouri_SubBasin_Wetlands_and_Riparian_Areas/FeatureServer - Submitting sync job:https://services7.arcgis.com/YoUrOrgANIzATIon/arcgis/rest/services/Middle_Little_Missouri_SubBasin_Wetlands_and_Riparian_Areas/FeatureServer/synchronizeReplica
Middle_Little_Missouri_SubBasin_Wetlands_and_Riparian_Areas/FeatureServer - Job url :https://services7.arcgis.com/YoUrOrgANIzATIon/arcgis/rest/services/Middle_Little_Missouri_SubBasin_Wetlands_and_Riparian_Areas/FeatureServer/jobs/9b0d7ca8-6f79-4f98-afb3-0fcebc27e959
World_Basemap_v2/VectorTileServer - Check if export URL is different from service URL.
World_Basemap_v2/VectorTileServer - Submitting export vector tile job:https://basemaps.arcgis.com/arcgis/rest/services/World_Basemap_v2/VectorTileServer/exportTiles
World_Basemap_v2/VectorTileServer - Job url:https://basemaps.arcgis.com/arcgis/rest/services/World_Basemap_v2/VectorTileServer/jobs/a92e57b7e1a22343
Middle_Little_Missouri_SubBasin_Wetlands_and_Riparian_Areas/FeatureServer - Add/Update package item
Middle_Little_Missouri_SubBasin_Wetlands_and_Riparian_Areas/FeatureServer - No changes for the package
Middle_Little_Missouri_SubBasin_Wetlands_and_Riparian_Areas/FeatureServer - Add/Update package item
Middle_Little_Missouri_SubBasin_Wetlands_and_Riparian_Areas/FeatureServer - No changes for the package
Middle_Little_Missouri_SubBasin_Wetlands_and_Riparian_Areas/FeatureServer - Add/Update package item
Middle_Little_Missouri_SubBasin_Wetlands_and_Riparian_Areas/FeatureServer - No changes for the package
Middle_Little_Missouri_SubBasin_Wetlands_and_Riparian_Areas/FeatureServer - Processing complete
World_Basemap_v2/VectorTileServer - Add/Update package item
World_Basemap_v2/VectorTileServer - Vector tile package url:https://lws-job-results-prd0-use1.s3.amazonaws.com/export/b015ce0507e8ba7c.vtpk
World_Basemap_v2/VectorTileServer - Updating package item by URL:b3566c44b5fe4304ab3853f1830ac1b1
World_Basemap_v2/VectorTileServer - Checking status for package item:b3566c44b5fe4304ab3853f1830ac1b1
Middle_Little_Missouri_SubBasin_Wetlands_and_Riparian_Areas/FeatureServer - Processing complete
Middle_Little_Missouri_SubBasin_Wetlands_and_Riparian_Areas/FeatureServer - Processing complete
World_Basemap_v2/VectorTileServer - Add/Update package item
World_Basemap_v2/VectorTileServer - Vector tile package url:https://lws-job-results-prd0-use1.s3.amazonaws.com/export/a5ef2c47e476b160.vtpk
World_Basemap_v2/VectorTileServer - Updating package item by URL:97710205e4ca4c88a3b8568fde6ae1da
World_Basemap_v2/VectorTileServer - Checking status for package item:97710205e4ca4c88a3b8568fde6ae1da
World_Basemap_v2/VectorTileServer - Add/Update package item
World_Basemap_v2/VectorTileServer - Vector tile package url:https://lws-job-results-prd0-use1.s3.amazonaws.com/export/aa5576c7a46b2d0a.vtpk
World_Basemap_v2/VectorTileServer - Updating package item by URL:db850e1e9e8347fa84f28ace9ac2ea8c
World_Basemap_v2/VectorTileServer - Checking status for package item:db850e1e9e8347fa84f28ace9ac2ea8c
World_Basemap_v2/VectorTileServer - Processing complete
World_Basemap_v2/VectorTileServer - Processing complete
World_Basemap_v2/VectorTileServer - Processing complete
Succeeded at Monday, August 19, 2024 7:02:21 PM (Elapsed Time: 2 minutes 13 seconds)
RefreshMapAreaPackage GP Job: j463ed64babed47a6932085d52ed74e32 finished successfully.
[{'source': 'https://services7.arcgis.com/YoUrOrgANIzATIon/arcgis/rest/services/Middle_Little_Missouri_SubBasin_Wetlands_and_Riparian_Areas/FeatureServer',
  'itemId': '2cc02db5b65548549fcd829c968e4104',
  'state': 'unchanged'},
 {'source': 'https://services7.arcgis.com/YoUrOrgANIzATIon/arcgis/rest/services/Middle_Little_Missouri_SubBasin_Wetlands_and_Riparian_Areas/FeatureServer',
  'itemId': 'f137c8363e25434f8a982eb84aca02e3',
  'state': 'unchanged'},
 {'source': 'https://services7.arcgis.com/YoUrOrgANIzATIon/arcgis/rest/services/Middle_Little_Missouri_SubBasin_Wetlands_and_Riparian_Areas/FeatureServer',
  'itemId': '55ba8ad002a2462eb6411c91ba53dd91',
  'state': 'unchanged'},
 {'source': 'https://basemaps.arcgis.com/arcgis/rest/services/World_Basemap_v2/VectorTileServer',
  'itemId': 'b3566c44b5fe4304ab3853f1830ac1b1',
  'state': 'updated'},
 {'source': 'https://basemaps.arcgis.com/arcgis/rest/services/World_Basemap_v2/VectorTileServer',
  'itemId': '97710205e4ca4c88a3b8568fde6ae1da',
  'state': 'updated'},
 {'source': 'https://basemaps.arcgis.com/arcgis/rest/services/World_Basemap_v2/VectorTileServer',
  'itemId': 'db850e1e9e8347fa84f28ace9ac2ea8c',
  'state': 'updated'}]

Now any field users are all set with the latest packages for use in a disconnected setting.

Your browser is no longer supported. Please upgrade your browser for the best experience. See our browser deprecation post for more details.