• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

gisoracle

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

ArcGIS Python获得岛的个数

import arcpy
def getpnum(geometry):
    part_count = geometry.partCount
    if part_count>1:#多部件
        return  999999 
    geo=geometry.getPart(0)
    num=geo.count
    n=0    
    for i in range(num):
        pt=geo[i]
        if pt==None: #空点就是下一个内多边形
            n=n+1     
    return n
inFeature= arcpy.GetParameterAsText(0)
fieldname= arcpy.GetParameterAsText(1)
with arcpy.da.UpdateCursor(inFeature, [fieldname,"shape@"]) as cursor:
    for row in cursor:
        k=getpnum(row[1])
        arcpy.AddMessage("k:"+str(k))
        row[0] =k
        cursor.updateRow(row)
#rows = arcpy.UpdateCursor(inFeature)
#for row in rows:
    
#    row.setValue(fieldname, getpnum(row.getValue("shape")) )
#    rows.updateRow(row)

#del row
#del rows
  

 ============================

完整代码和视频关注微信公众号

import arcpy

def getxy(geo):
    partnum = 0

    for part in geo:
        # Print the part number
        #print("Part {}:".format(partnum))
        # Step through each vertex in the feature
        for pnt in part:
            if pnt:
                # Print x,y coordinates of current point
                print("{}, {}".format(pnt.X, pnt.Y))
            else:
                # If pnt is None, this represents an interior ring
                print("Interior Ring:")
        partnum += 1
def getpartnum(geo):
    partnum = 0

    for part in geo:
        # Print the part number

        partnum += 1
    return partnum

def getislandnum(geo):
    n = 0

    for part in geo:
        # Print the part number
        #print("Part {}:".format(partnum))
        # Step through each vertex in the feature
        for pnt in part:
            if pnt==None:

                # If pnt is None, this represents an interior ring
                print("Interior Ring:")
                n=n+1
    return n

infc = arcpy.GetParameterAsText(0)
inField = arcpy.GetParameterAsText(1)
# Enter for loop for each feature
with arcpy.da.UpdateCursor(infc, ["OID@", "SHAPE@",inField]) as cursor:
    for row in cursor:
        # Print the current polygon or polyline's ID
        print("Feature {}:".format(row[0]))

        # Step through each part of the feature
        #getxy(row[1])
        #print(getpartnum(row[1]))
        num=getislandnum(row[1])
        print(num)
        row[2]=num
        cursor.updateRow(row)

 

posted on 2021-08-25 21:49  gisai  阅读(140)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3