Select to view content in your preferred language

Create and manage map areas Allow Spatial Extent Defined by Hosted Feature Class Selection

518
1
2 weeks ago
Status: Open
Todd_Metzler
Frequent Contributor

My organization is responsible for geospatial management at the scale of a USA New England State.  The 16 map area limit in field maps designer is too small to support our widely dispersed field workers from a single mobile enabled map.  Requiring the Field Worker to define thier own offline area from their mobile device is inefficient and time consuming.

Additionally, the current method allows the creation of many overlapping offline areas that consumes storage space in our ArcGIS Enterprise since individual field workers have no insight to offline areas that have already been defined by other field workers that may suite their tasked area.

Instead of drawing areas, enable the ability pre-define an unlimited number of offline map areas from existing Feature Class(s), such as a county or town boundary polygon or a pre-defined grid such as H3 and allow the mobile map creator to pick and choose the areas from a list of predefined areas.

1 Comment
LindsayRaabe_FPCWA

Good idea. This isn't a solution, but something that may help make life easier in the meantime. You can set bookmarks in the webmap which can be accessed by field staff when they are creating offline areas in the field. If you have lots of features in a feature service, you could try automating the bookmark creation. I generated the below script with Copilot, but it is UNTESTED. You could implement in a Notebook and schedule regular updates (it should overwrite all existing bookmarks each time it is run). 

from arcgis.gis import GIS
from arcgis.mapping import WebMap
from arcgis.features import FeatureLayer
from arcgis.geometry import Geometry, union

# --- CONFIGURATION ---
feature_service_url = "https://services.arcgis.com/your-org-id/arcgis/rest/services/your-layer/FeatureServer/0"
webmap_id = "your_webmap_item_id"
bookmark_name_field = "Name"  # Field used to group and name bookmarks
point_buffer = 500  # Buffer distance in meters for point features

# --- CONNECT TO GIS ---
gis = GIS("home")  # Assumes you're logged in via Notebook or ArcGIS Pro

# --- LOAD WEB MAP ---
webmap_item = gis.content.get(webmap_id)
webmap = WebMap(webmap_item)

# --- LOAD FEATURE LAYER ---
layer = FeatureLayer(feature_service_url)
features = layer.query(where="1=1", out_fields="*", return_geometry=True).features

# --- GROUP FEATURES BY NAME ---
grouped_features = {}
for feature in features:
    name = feature.attributes.get(bookmark_name_field, "Bookmark")
    grouped_features.setdefault(name, []).append(feature)

# --- CREATE BOOKMARKS ---
bookmarks = []
for name, group in grouped_features.items():
    geometries = [Geometry(f.geometry) for f in group]

    # Union geometries
    dissolved_geom = union(geometries)

    # Determine extent
    if dissolved_geom.type == "point":
        x, y = dissolved_geom['x'], dissolved_geom['y']
        extent = {
            "xmin": x - point_buffer,
            "ymin": y - point_buffer,
            "xmax": x + point_buffer,
            "ymax": y + point_buffer,
            "spatialReference": {"wkid": 102100}
        }
    else:
        extent = dissolved_geom.extent

    bookmarks.append({
        "name": name,
        "extent": extent
    })

# --- UPDATE WEB MAP ---
webmap.definition["bookmarks"] = bookmarks
webmap.update()
print(f"✅ Added {len(bookmarks)} bookmarks to the web map.")