0

I want to create a single shapefile from multiple mxd's that have multiple frame sets with different extents in them. I have found/started a script to do this (attached) but can't figure out how to write the captured X&Y Max/Min into the shapefile that is created for this. See output below. I also want it to write the scale and title of the frame as well as the file name of the mxd.

Can you help complete this script?

 import arcpy, glob, os from arcpy
 import env from arcpy import mapping
 env.overwriteOutput = True

 path = r"C:\temp" mxdList =
 glob.glob(path + "\*.mxd")

 env.workspace = r"C:\temp\Test.gdb"

 y = 1

 for mxd in mxdList:
     mxd2 = mapping.MapDocument(mxd)
     dataframe = mapping.ListDataFrames(mxd2, "*")[0]
     frameExtent = dataframe.extent
     XMAX = frameExtent.XMax
     XMIN = frameExtent.XMin
     YMAX = frameExtent.YMax
     YMIN = frameExtent.YMin
     pnt1 = arcpy.Point(XMIN, YMIN)
     pnt2 = arcpy.Point(XMIN, YMAX)
     pnt3 = arcpy.Point(XMAX, YMAX)
     pnt4 = arcpy.Point(XMAX, YMIN)
     array = arcpy.Array()
     array.add(pnt1)
     array.add(pnt2)
     array.add(pnt3)
     array.add(pnt4)
     array.add(pnt1)
     polygon = arcpy.Polygon(array)
     arcpy.CopyFeatures_management(polygon,
 "Polygon_Extent" + "_" + str(y))
     y = y + 1


 list = []

 lstFCs =
 arcpy.ListFeatureClasses("Polygon_Extent*")
 for fc in lstFCs:
     list.append(fc)

 arcpy.Merge_management(list, "Extent")

 for item in list:
     arcpy.Delete_management(item)

Even with this I get errors...

Traceback (most recent call last):
  File "P:\2011\Job_031_TownPlanning_SeriesProduction\Working\mxd\extent_creation.py", line 32, in <module>
    arcpy.CopyFeatures_management(polygon, "Polygon_Extent" + "_" + str(y))
  File "C:\Program Files\ArcGIS\Desktop10.0\arcpy\arcpy\management.py", line 1943, in CopyFeatures
    raise e
ExecuteError: ERROR 000210: Cannot create output Polygon_Extent_1
Failed to execute (CopyFeatures).

3 Answers 3

0

Since you specify you are using shapefiles, you'll need to add shp to the output.

Change this line

    arcpy.CopyFeatures_management(polygon, "Polygon_Extent" + "_" + str(y))

To this

    arcpy.CopyFeatures_management(polygon, "Polygon_Extent" + "_" + str(y) + ".shp")

Also, change this line

    arcpy.Merge_management(list, "Extent")

To this

    arcpy.Merge_management(list, "Extent.shp")
1
  • Thanks...I made these changes and now get the following. ...
    – GeorgeC
    Commented May 10, 2011 at 4:06
0

Thanks all, the code has been (fixed) and the basic functionality is working. I am still trying to get it to write the mxd file name, extent name and scale but the extent->polygon shp file works when run using IDLE in the same directory as the mxd's.

Would still appreciate help with the above though - I have posted a new question for this at How do I insert a DATAFRAME_ELEMENT value into a dynamically generated shapefile containing its extent?

(working) CODE in link above.

-1

npeihl, Thanks for your input...I now get.

P:\2011\Job_031_TownPlanning_SeriesProduction\Working\mxd\1 219157.947938379 8072842.27839025 377350.947938381 8205437.27839025 NaN NaN NaN NaN 377350.947938 219157.947938 8205437.27839 8072842.27839 219157.947938379 8072842.27839025 NaN NaN 219157.947938379 8205437.27839025 NaN NaN 377350.947938381 8205437.27839025 NaN NaN 377350.947938381 8072842.27839025 NaN NaN Traceback (most recent call last): File "C:\Python26\ArcGIS10.0\Lib\site-packages\Pythonwin\pywin\framework\scriptutils.py", line 322, in RunScript debugger.run(codeObject, main._dict_, start_stepping=0) File "C:\Python26\ArcGIS10.0\Lib\site-packages\Pythonwin\pywin\debugger__init__.py", line 60, in run _GetCurrentDebugger().run(cmd, globals,locals, start_stepping) File "C:\Python26\ArcGIS10.0\Lib\site-packages\Pythonwin\pywin\debugger\debugger.py", line 655, in run exec cmd in globals, locals File "P:\2011\Job_031_TownPlanning_SeriesProduction\Working\mxd\1\extent_creation2.py", line 40, in TempFile = open(polygon, "Polygon_Extent" + "_" + str(y)) # open file TypeError: coercing to Unicode: need string or buffer, Polygon found

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.