Advertisement
Guest User

Untitled

a guest
Oct 31st, 2014
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.73 KB | None | 0 0
  1. import arcpy
  2. import os
  3. arcpy.env.overwriteOutput = True
  4.  
  5. def iter_geom(g):
  6. for i in xrange(g.partCount):
  7. yield i, g.getPart(i)
  8.  
  9. def fill_donut_holes(polys, output, fill_threshold=0):
  10.  
  11. # fields
  12. fields = [f.name for f in arcpy.ListFields(polys)
  13. if f.type not in ('OID', 'Geometry')
  14. and 'shape' not in f.name.lower()]
  15.  
  16. # loop thru geometry
  17. geom = {}
  18. with arcpy.da.SearchCursor(polys, ['SHAPE@'] + fields) as rows:
  19. if fill_threshold:
  20. for row in rows:
  21. print row[0].partCount
  22. if row[0].partCount > 1:
  23. array = arcpy.Array()
  24. for i, p in iter_geom(row[0]):
  25. pg = arcpy.Polygon(p).area
  26. print pg
  27. if pg >= fill_threshold:
  28. array.add(p)
  29. geom[arcpy.Polygon(array)] = row[1:]
  30. else:
  31. geom[row[0]] = row[1:]
  32. else:
  33. for row in rows:
  34. array = arcpy.Array()
  35. for i, part in iter_geom(row[0]):
  36. for pt in iter(lambda: part.next(), None):
  37. array.add(pt)
  38. geom[arcpy.Polygon(array)] = row[1:]
  39.  
  40. # create output
  41. path, name = os.path.split(output)
  42. sm = 'SAME_AS_TEMPLATE'
  43. arcpy.CreateFeatureclass_management(path, name, 'POLYGON', polys,
  44. sm, sm, polys)
  45.  
  46. # insert rows
  47. with arcpy.da.InsertCursor(output, ['SHAPE@'] + fields) as irows:
  48. for geometry, attributes in geom.iteritems():
  49. irows.insertRow((geometry,) + attributes)
  50.  
  51. arcpy.AddMessage('Created "{0}"'.format(output))
  52. return output
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement