arcgis批量切割方法(ArcGISMXD批量裁剪)
arcgis批量切割方法(ArcGISMXD批量裁剪)
#coding=utf8
#by gisoracle
import arcpy
import os
from arcpy import env
import math
def ConverttoStr(v):
if type(v)==str:
return v
else:
return str(v)
def geotoPolygon(geometry):
part_count = geometry.partCount #有几部分
array = arcpy.Array()
#arcpy.AddMessage("FID:" str(FID) " part_count:" str(part_count))
for j in range(part_count):
partgeometry=geometry.getPart(j)
num=partgeometry.count
for k in range(num):
pt=partgeometry[k]
Point = arcpy.Point(pt.X pt.Y)
array.add(point)
bPolygon = arcpy.Polygon(array)
return bPolygon
env.overwriteOutput = True
LayerName = arcpy.GetParameterAsText(0) #图层
FieldName = arcpy.GetParameterAsText(1) #字段
outPath= arcpy.GetParameterAsText(2) #输出路径
outLX = arcpy.GetParameterAsText(3) #输出数据库类型
desc = arcpy.Describe(LayerName)
if desc.shapeType!="Polygon":
arcpy.AddMessage(LayerName "不是面层")
pass
shapeName = desc.shapeFieldName
oldpath=desc.path.lower()
#arcpy.AddMessage("desc.dataType:" desc.dataType ",oldpath:" oldpath)
if desc.dataType.startswith("Feature"):#看是否有数据集FeatureLayer,FeatureClass,数据ShapeFile是shp
if oldpath.index(".")>0:
if not oldpath.endswith(".mdb"):
if not oldpath.endswith(".gdb"):
p=oldpath.rindex("\\")
#arcpy.AddMessage("p================:" str(p) "")
if p<0:
p=oldpath.rindex("/")
oldpath=oldpath[0: p]
arcpy.AddMessage("oldpath:" oldpath "")
if oldpath.endswith(".mdb"):
oldlx="ACCESS_WORKSPACE"
elif oldpath.endswith(".gdb"):
oldlx="FILEGDB_WORKSPACE"
else:
oldlx="SHAPEFILE_WORKSPACE"
OIDField=desc.OIDFieldName
#mxd = arcpy.mapping.MapDocument("CURRENT")
rows = arcpy.SearchCursor(LayerName)
try:
for row in rows:
try:
geo = row.getValue(shapeName)
FID=row.getValue(OIDField)
arcpy.AddMessage("FID:" ConverttoStr(FID))
bPolygon = geotoPolygon(geo)
objv=row.getValue(FieldName)
FieidValue=ConverttoStr(objv)
gdb=".gdb"
gdblx="FILEGDB_WORKSPACE"
if outLX.endswith("MDB"):
gdb=".mdb"
gdblx="ACCESS_WORKSPACE"
out_mdb=outPath "\\" FieidValue gdb
if not arcpy.Exists(out_mdb):
if outLX.endswith("GDB"):
arcpy.CreateFileGDB_management(os.path.dirname(out_mdb) os.path.basename(out_mdb))
else:
arcpy.CreatePersonalGDB_management(os.path.dirname(out_mdb) os.path.basename(out_mdb))
mxd = arcpy.mapping.MapDocument("CURRENT")
for lyr in arcpy.mapping.ListLayers(mxd):
arcpy.Clip_analysis(lyr bPolygon out_mdb "\\" lyr.name "")
arcpy.AddMessage("lyr.name:" out_mdb "\\" lyr.name)
mypath=oldpath #mxd.filePath是mxd文件路径
arcpy.AddMessage("mypath:" ConverttoStr(mypath) " out_mdb=" out_mdb " " gdblx " " oldlx)
mxd.replaceWorkspaces(mypath oldlx out_mdb gdblx)
mxd.saveACopy(outPath "\\" FieidValue ".mxd")
except Exception as err:
arcpy.AddError(err.message)
finally:
if mxd:
del mxd