Hi, it should be pretty simple, I know but I'm stuck. I have one layer, I grab the extent of it and set the defaultCamera extent based on that value. This is my "pan to layer". Now I need to zoom in to a, let's say, 1:1000 scale. How can I do that?
You're right. Thanks!
Set the extent to the layermf.camera.setExtent(mf.getLayerExtent(lyr, True, True))
aprx = arcpy.mp.ArcGISProject("CURRENT") # Get map and layer m = aprx.listMaps("Layers1")[0] lyr = m.listLayers("CCSO.CCSO.CCAP")[0] # Get layout elements lyt = aprx.listLayouts("Layout1")[0] mf = lyt.listElements("MAPFRAME_ELEMENT", "Map Frame")[0] # First set the extent to the layer mf.camera.setExtent(mf.getLayerExtent(lyr, True, True)) # Then set the target scale (1:1000 in your case) target_scale = 1000 # Changed to 1000 as per your question mf.camera.scale = target_scale # Update the map's default camera if needed m.defaultCamera = mf.camera
You are publishing the layers in the map as a map service? The scale and extent of the map used for publishing has no impact on the resulting map service.
I need to set up the extent and scale for publishing the map so anytime I add the map service to a web map the content is already in place. Is there a better approach for that?
I will execute the py script from the command line later on without opening ArcGIS Pro
If you are not using a map frame in a layout then you must use aprx.activeView > MapView.camera.scale. But it is only intended for use while ArcGIS Pro is open (e.g. script tools, python window, etc.).https://pro.arcgis.com/en/pro-app/latest/arcpy/mapping/mapview-class.htm
That said, why would you need to set the scale on a map if you aren't exporting it? If you are exporting it, why wouldn't you use a layout?
Thanks. I still do not get it. I do not have any layouts, just a simple map frame. I get an empty list:
lyt = aprx.listLayouts()
Set the scale property of camera.
https://pro.arcgis.com/en/pro-app/latest/arcpy/mapping/camera-class.htm
aprx = arcpy.mp.ArcGISProject('CURRENT') layout = aprx.listLayouts()[0] map_frame = layout.listElements('MAPFRAME_ELEMENT')[0] map_frame.camera.scale = 1000
Membros conectados podem postar, seguir atualizações e mais. Novo aqui? Registre uma conta gratuita.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.