import arcpy
from arcpy import da
from arcpy import env
path=''
env.workspace=path
fc='BJGreenDupli_prj.shp'
mplst=[]
namelst=[]
for row in da.SearchCursor(fc,['Name','Area','SHAPE@']):
if row[0][-3:]=='Sea':
print('Area is'+str(row[1]))
mplst.append(row[2])
namelst.append(row[0])
SeaM='SeaM.shp'
arcpy.CreateFeatureclass_management(path,SeaM,'Polygon','','','',fc)
arcpy.AddField_management(SeaM,'Name','TEXT')
cursor=da.InserCursor(SeaM,['SHAPE@','Name'])
for n in range(len(mplst)):
cursor.insertRow([mplst[n],namelst[n]])
del cursor
#使用SQL语句查询条件下子集
import arcpy
from arcpy import env
path=''
env.workspace=path
env.overwriteOutput=True
fc='SeaM'
fieldName1='Area'
fieldName2='Length'
arcpy.AddField_management(fc,fieldName1,'FLOAT')
arcpy.AddField_management(fc,fieldName2,'FLOAT')
Arealst=[]
Lengthlst=[]
for row in arcpy.da.SearchCursor(fc,['SHAPE@AREA','SHAPE@LENGTH']):
Arealst.append(row[0])
Lengthlst.append(row[1])
cursor=arcpy.da.UpdateCursor(fc,['Area','Length'])
n=0
for row in cursor:
row[0]=Arealst[n]
row[1]=Lengthlst[n]
cursor.updateRow(row)
del cursor,row
c=arcpy.da.SearchCursor(fc,('Length','Name'),""""Length"<2000""")
#多字段可以是列表或组,三重引号
for row in c:
print('%s\'length is %s'%(str(row[1]),str(row[0])))
#SQL表达式
whereclause="""%s<2000""" % arcpy.AddFieldDelimiters(fc,'Length')
#在字段名称中添加字段分隔符,以便在 SQL 表达式中使用。
#计算指数
import arcpy,math
from arcpy import env
path=''
env.workspace=path
env.overwriteOutput=True
Sea='SeaM.shp'
SeaG=arcpy.CopyFeatures_management(Sea,arcpy.Geometry())#复制要素到arcpy.Geometry()
#返回几何部分列表
np='NP'#斑块数目
te='TE'#边界总长度
ed='ED'#边界密度
lpi='LPI'#最大斑块指数
mps='MPS'#平均斑块面积
par='PAR'#周长面积比
c='C'#形状指数
arcpy.AddField_management(Sea,np,'FLOAT')
arcpy.AddField_management(Sea,te,'FLOAT')
arcpy.AddField_management(Sea,ed,'FLOAT')
arcpy.AddField_management(Sea,lpi,'FLOAT')
arcpy.AddField_management(Sea,mps,'FLOAT')
arcpy.AddField_management(Sea,par,'FLOAT')
arcpy.AddField_management(Sea,c,'FLOAT')
Arealst=[]
Lengthlst=[]
Namelst=[]
for row in arcpy.da.SearchCursor(Sea,['SHAPE@AREA','SHAPE@LENGTH','Name']):
Arealst.append(row[0])
Lengthlst.append(row[1])
Namelst.append(row[2])
print(Arealst,Lengthlst)
cursor=arcpy.da.UpdateCursor(Sea,['NP','TE','ED','LPI','MPS','PAR','C','Name'])
n=0
for row in cursor:
row[0]=len(SeaG)
row[1]=sum(Lengthlst)
row[2]=sum(Lengthlst)/sum(Arealst)*pow(10,6)
if row[-1]==Namelst[Arealst.index(max(Arealst))]:
row[3]=max(Arealst)/sum(Arealst)*100
else:
row[3]=0
row[4]=sum(Arealst)/len(SeaG)
row[5]=Lengthlst[n]/Arealst[n]
row[6]=math.sqrt(Arealst[n]/Lengthlst[n])
cursor.updateRow(row)
n=n+1
del cursor,row
SeaG=arcpy.CopyFeatures_management(Sea,arcpy.Geometry())#复制要素到arcpy.Geometry()