Hi all,
I am trying to clone a Web App but have it centered over a new area (new city for example) and i was wondering if I could use the item_extent parameter from clone_items to achieve this. Anyone have any ideas?
Thanks!
I would also like to get some more information on this. I can't find anything online. I've tried the following, but when I open the cloned WebMap, the extent remains unchanged:
ext ={'spatialReference': {'latestWkid': 3857, 'wkid': 102100},
'xmin': -1252724.3668020056,
'ymin': 4250996.361644156,
'xmax': -84766.57460482302,
'ymax': 4740193.342669154}
cloned_item = mygis.content.clone_items(items=[temp_item],
folder=event_name,
item_extent=ext,
search_existing_items=False)
I have tried to this before with copy_item() as well, since I'm not moving content between portals and organizations. I just need to duplicate a webmap and then reset the extent. But not a single approach has worked for me:
#Copy the item, move and share the copy
new_item = temp_item.copy_item(title="WMasdf_{}".format(event_name), folder = event_name)
new_item.move(event_name) #because the folder parameter in the previous method doesn't seem to work either
new_item.share(True)
#Different formats of extents
ex1 = {'xmin': -427248.44528862747,
'ymin': 4919558.2636672305,
'xmax': -399769.33362014365,
'ymax': 4936393.519147017,
'spatialReference': {'latestWkid':3857,
'wkid': 102100}}
ex2 = '-427248.44528862747, 4919558.2636672305, -399769.33362014365, 4936393.519147017'
ex3 = '110, 47, 111, 46'
ex4 = [[110,47],[111,46]]
#Differente ways I've been trying to set the extent, some on their own, then also some combined. Nothing worked
new_item.extent = ex4
new_item.get_data()['initialState']['viewpoint']['targetGeometry'] = ex
new_item.update(item_properties={'extent':ex1})
new_item.update(item_properties={'extent':ex2})
new_map = WebMap(copy_item)
new_map.definition['initialState'] = ex
If someone could offer some insight on this, that would be amazing!
Hello, I just wrestled with this too. I am copying from a template webmap that has a Field Maps customization, so I wish to have those edit layers- but I then need to change the extent of the webmap to fit different areas of interest.
This works for me:
# Get the template webmap item ID
Template_WebMap_Item = gis.content.get('cf6eec40dbd644d99b4645547e2614d5')
# Create a WebMap object from an existing web map item
Template_map_obj = WebMap(Template_WebMap_Item)
# Update the properties for new map
wm_properties = {'title' : 'New Web Map {0}'.format(EventAliasName),
'snippet': "Web map for earthquake response data acquisition",
'tags' : 'Observations',
'type': 'Web Map'
}
# Add a layer unique to this event
Template_map_obj.add_layer(ShakeMap_MI_layer)
# Save the webmap to the new Event Folder
TheEventMap = Template_map_obj.save(item_properties = wm_properties, folder=event_folder)
# Get the text data associated with the new webmap item
theEventMap_data = TheEventMap.get_data()
# Examine the 'initialState' key
print(theEventMap_data['initialState'])
# {'viewpoint': {'targetGeometry': {'spatialReference': {'latestWkid': 3857, 'wkid': 102100}, 'xmin': -14142684.7214327, 'ymin': 4011415.2444049953, 'xmax': -12384021.574647833, 'ymax': 5128007.353594553}}}
# Generate a new initialState key using a specific feature layer extent. Or do this manually
New_Istate = {'viewpoint': {'targetGeometry': {'spatialReference': {'latestWkid': ShakeMap_MI_layer.properties.extent.spatialReference.latestWkid,
'wkid': ShakeMap_MI_layer.properties.extent.spatialReference.wkid},
'xmin': ShakeMap_MI_layer.properties.extent['xmin'],
'ymin': ShakeMap_MI_layer.properties.extent['ymin'],
'xmax': ShakeMap_MI_layer.properties.extent['xmax'],
'ymax': ShakeMap_MI_layer.properties.extent['ymax']}}}
# Update the webmap item
theEventMap_data['initialState'] = New_Istate
TheEventMap.update(item_properties={"text": json.dumps(theEventMap_data)})
The new saved webmap now has the desired extent upon loading it.
Note the last line here. Formatting correctly the 'item_properties' in the update method seems to be critical element here. I learned this from this thread.
Luke
@JLBlair Thank you so much. I have spent half a day trying to figure this out and your solution works perfectly and should be the accepted answer to this question