<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Bug?: Creating polygons with holes using Arcpy in Python Questions</title>
    <link>https://community.esri.com/t5/python-questions/bug-creating-polygons-with-holes-using-arcpy/m-p/469975#M36696</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I tried this method to create a polygon with holes, and &lt;/SPAN&gt;&lt;SPAN style="font-style:italic;"&gt;nearly&lt;/SPAN&gt;&lt;SPAN&gt; succeeded.&amp;nbsp; Take a look at &lt;/SPAN&gt;&lt;A href="http://forums.arcgis.com/threads/41104-polygon-with-holes-arcpy.AsShape-is-broken?p=139588#post139588"&gt;this &lt;/A&gt;&lt;SPAN&gt;thread for details.&amp;nbsp; Any help explaining why the method described here fails in my case would be appreciated.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Dustin&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 06 Oct 2011 20:03:06 GMT</pubDate>
    <dc:creator>DustinReagan</dc:creator>
    <dc:date>2011-10-06T20:03:06Z</dc:date>
    <item>
      <title>Bug?: Creating polygons with holes using Arcpy</title>
      <link>https://community.esri.com/t5/python-questions/bug-creating-polygons-with-holes-using-arcpy/m-p/469971#M36692</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I believe I have found what is a bug with the Arcpy site package and how it handles creating polygon geometries...&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;We are trying to generate polygon geometries using the Arcpy site package and cannot generate polygons with multiple holes. One or two holes in a polygon outer ring seem to work fine but any more than that and the polygon generation fails. In looking at the point arrays that come from an existing multiple hole polygon (using polygon.GetPart()) there is a "None" type object in the point array that indicates that subsequent points are part of a hole. However the arcpy.Array object does not allow the inserting of "None" types or null Points so it appears that holes cannot be created directly and must be inferred by the Arcpy package to create the holes.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Have a look at the attached code and see if you can make it work. The documentation has nothing about this anywhere I can find (&lt;/SPAN&gt;&lt;A href="http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#/Writing_geometries/002z0000001v000000/" rel="nofollow noopener noreferrer" target="_blank"&gt;other than this&lt;/A&gt;&lt;SPAN&gt;) so I have been working backwards to figure it out. The example coordinate list in the attached python file has clockwise outer rings and counter clockwise holes yet still it does not work. The output should look like this (2 polygons):&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;IMG src="http://www.ruraltech.org/downloads/correct.gif" /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;but instead looks like this:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;IMG src="http://www.ruraltech.org/downloads/incorrect.gif" /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Here is the code (in case attachment doesn't work):&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;import arcpy

# Globals
outputFeatureClass = r"D:\temp\geometry\example.mdb\example"
coordList = [[[[0,0],[0,10],[10,10],[10,0],[0,0]],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [[1,1],[2,1],[2,2],[1,2],[1,1]],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [[8,8],[9,8],[9,9],[8,9],[8,8]],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [[8,1],[9,1],[9,2],[8,2],[8,1]],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [[1,8],[2,8],[2,9],[1,9],[1,8]]],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [[[10,10], [11,11], [12,10], [10,10]]]]

def main():
&amp;nbsp;&amp;nbsp;&amp;nbsp; array = arcpy.Array()
&amp;nbsp;&amp;nbsp;&amp;nbsp; point = arcpy.Point()
&amp;nbsp;&amp;nbsp;&amp;nbsp; # Create a list to store the features
&amp;nbsp;&amp;nbsp;&amp;nbsp; features = []
&amp;nbsp;&amp;nbsp;&amp;nbsp; # Read the coordinates
&amp;nbsp;&amp;nbsp;&amp;nbsp; for feature in coordList:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for part in feature:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for coordPair in part:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; point.X = coordPair[0]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; point.Y = coordPair[1]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; array.add(point)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Create the polygon object
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; polygon = arcpy.Polygon(array)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Clear the array for the next feature
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; array.removeAll()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Append to the feature list
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; features.append(polygon)

&amp;nbsp;&amp;nbsp;&amp;nbsp; # Copy the features to an output feature class
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.CopyFeatures_management(features, outputFeatureClass)

if __name__ == '__main__':
&amp;nbsp;&amp;nbsp;&amp;nbsp; main()&lt;/PRE&gt;&lt;SPAN&gt;Please help!&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 20:49:12 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/bug-creating-polygons-with-holes-using-arcpy/m-p/469971#M36692</guid>
      <dc:creator>Luke__NWGS_Rogers</dc:creator>
      <dc:date>2021-12-11T20:49:12Z</dc:date>
    </item>
    <item>
      <title>Re: Bug?: Creating polygons with holes using Arcpy</title>
      <link>https://community.esri.com/t5/python-questions/bug-creating-polygons-with-holes-using-arcpy/m-p/469972#M36693</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Luke...a quick test...&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
# Globals
outputFeatureClass = r"c:\temp\donutdemo.shp"
coordList = [[[[0,0],[0,10],[10,10],[10,0],[0,0]],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [[1,1],[2,1],[2,2],[1,2],[1,1]],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [[8,8],[9,8],[9,9],[8,9],[8,8]],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [[8,1],[9,1],[9,2],[8,2],[8,1]],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [[1,8],[2,8],[2,9],[1,9],[1,8]]],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [[[10,10], [11,11], [12,10], [10,10]]]]
def main():
&amp;nbsp; array = arcpy.Array()
&amp;nbsp; point = arcpy.Point()
&amp;nbsp; # Create a list to store the features
&amp;nbsp; features = []
&amp;nbsp; # Read the coordinates
&amp;nbsp; for feature in coordList:
&amp;nbsp;&amp;nbsp;&amp;nbsp; print "feature", feature
&amp;nbsp;&amp;nbsp;&amp;nbsp; for part in feature:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for coordPair in part:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; point.X = coordPair[0]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; point.Y = coordPair[1]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; array.add(point)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; null_point = arcpy.Point()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; array.add(null_point)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Create the polygon object
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; polygon = arcpy.Polygon(array)
&amp;nbsp;&amp;nbsp;&amp;nbsp; # Clear the array for the next feature
&amp;nbsp;&amp;nbsp;&amp;nbsp; array.removeAll()
&amp;nbsp;&amp;nbsp;&amp;nbsp; # Append to the feature list
&amp;nbsp;&amp;nbsp;&amp;nbsp; features.append(polygon)

&amp;nbsp; # Copy the features to an output feature class
&amp;nbsp; arcpy.CopyFeatures_management(features, outputFeatureClass)

if __name__ == '__main__':
&amp;nbsp; import arcpy
&amp;nbsp; arcpy.env.overwriteOutput = True
&amp;nbsp; main()
&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 20:49:15 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/bug-creating-polygons-with-holes-using-arcpy/m-p/469972#M36693</guid>
      <dc:creator>DanPatterson_Retired</dc:creator>
      <dc:date>2021-12-11T20:49:15Z</dc:date>
    </item>
    <item>
      <title>Re: Bug?: Creating polygons with holes using Arcpy</title>
      <link>https://community.esri.com/t5/python-questions/bug-creating-polygons-with-holes-using-arcpy/m-p/469973#M36694</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi Dan-&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;This does indeed work which is interesting since calling arcpy.Point() creates a point object with 0.0 for X and Y which I would think would be valid coordinates so I didn't even try the solution you discovered. A little qwerky but it works!&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks Dan!&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 09 Dec 2010 17:03:56 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/bug-creating-polygons-with-holes-using-arcpy/m-p/469973#M36694</guid>
      <dc:creator>Luke__NWGS_Rogers</dc:creator>
      <dc:date>2010-12-09T17:03:56Z</dc:date>
    </item>
    <item>
      <title>Re: Bug?: Creating polygons with holes using Arcpy</title>
      <link>https://community.esri.com/t5/python-questions/bug-creating-polygons-with-holes-using-arcpy/m-p/469974#M36695</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Luke&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;that appears to be the case, which appears to go against the documentation which suggests that X and Y would be assigned a value of none&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
&amp;gt;&amp;gt;&amp;gt; from arcpy import Point
&amp;gt;&amp;gt;&amp;gt; pnt = Point()
&amp;gt;&amp;gt;&amp;gt; print str(pnt)
0 0 NaN NaN
&amp;gt;&amp;gt;&amp;gt; &lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt; |&amp;nbsp; Methods inherited from arcpy.arcobjects.mixins.PointMixin:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; |&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; |&amp;nbsp; __init__(self, X=None, Y=None, Z=None, M=None, ID=None)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Point({X}, {Y}, {Z}, {M}, {ID})&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;which suggests that None is being translated to 0...perhaps ESRI could provide some rationale which I presume has something to do with None not being able to be represented as a numeric value for coordinates...go figure&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 20:49:18 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/bug-creating-polygons-with-holes-using-arcpy/m-p/469974#M36695</guid>
      <dc:creator>DanPatterson_Retired</dc:creator>
      <dc:date>2021-12-11T20:49:18Z</dc:date>
    </item>
    <item>
      <title>Re: Bug?: Creating polygons with holes using Arcpy</title>
      <link>https://community.esri.com/t5/python-questions/bug-creating-polygons-with-holes-using-arcpy/m-p/469975#M36696</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I tried this method to create a polygon with holes, and &lt;/SPAN&gt;&lt;SPAN style="font-style:italic;"&gt;nearly&lt;/SPAN&gt;&lt;SPAN&gt; succeeded.&amp;nbsp; Take a look at &lt;/SPAN&gt;&lt;A href="http://forums.arcgis.com/threads/41104-polygon-with-holes-arcpy.AsShape-is-broken?p=139588#post139588"&gt;this &lt;/A&gt;&lt;SPAN&gt;thread for details.&amp;nbsp; Any help explaining why the method described here fails in my case would be appreciated.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Dustin&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 06 Oct 2011 20:03:06 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/bug-creating-polygons-with-holes-using-arcpy/m-p/469975#M36696</guid>
      <dc:creator>DustinReagan</dc:creator>
      <dc:date>2011-10-06T20:03:06Z</dc:date>
    </item>
    <item>
      <title>Re: Bug?: Creating polygons with holes using Arcpy</title>
      <link>https://community.esri.com/t5/python-questions/bug-creating-polygons-with-holes-using-arcpy/m-p/469976#M36697</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I've been trying this method too, including a arcpy.Point(None, None) in the middle of the point array.&amp;nbsp; I even got a tip from the arcpy team (through the help feedback button) to use Dan's suggestion. But it does not work for me. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I end up with a 0,0 point added to my ring when the feature is created (ie when I write the polygon to a shape).&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;[ATTACH=CONFIG]27437[/ATTACH]&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I have an open incident going with Esri on this and hopefully will have an answer soon as we go back and forth. So far my analyst is running into the same problems. At this point we're chalking it up to missing documentation. There's GOT to be a way to do this. &lt;/SPAN&gt;&lt;A href="http://gis.stackexchange.com/questions/14952/arcgis-10-0-arcpy-how-to-create-a-polygon-geometry-from-inner-and-outer-ring-po"&gt;Someone on stack exchange apparently figured it out &lt;/A&gt;&lt;SPAN&gt;but did not (!) post their code.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN style="font-style:italic;"&gt;[#NIM094838&amp;nbsp; Include a sample in the help on how to build a polygon with a hole using python. ]&lt;BR /&gt;[#NIM093332&amp;nbsp; Please provide some additional documentation and examples for creating donut polygons using arcpy geometry objects&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 13 Sep 2013 14:02:17 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/bug-creating-polygons-with-holes-using-arcpy/m-p/469976#M36697</guid>
      <dc:creator>curtvprice</dc:creator>
      <dc:date>2013-09-13T14:02:17Z</dc:date>
    </item>
    <item>
      <title>Creating polygons with holes using ArcPy</title>
      <link>https://community.esri.com/t5/python-questions/bug-creating-polygons-with-holes-using-arcpy/m-p/469977#M36698</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Finally got a working sample. This seems to work pretty well.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The key thing is that you do not write polygon parts and holes differently.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Instead, you construct a polygon from nested arrays which represent parts made of up rings. When you write the geometry by writing it to a shape field or use it in a tool, behind the scenes arc objects planarizes the rings within in each polygon part and determines what's a hole and what isn't. And sorts the coordinates clockwise, and burns the xys into the coordinate system and domain of the geodatabase feature class.&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
#
# Write a polygon feature class
#

import os
import arcpy
from arcpy import env

def makepoly(coord_list, SR=None):
&amp;nbsp;&amp;nbsp;&amp;nbsp; """Convert a Python list of coordinates to an ArcPy polygon feature

&amp;nbsp;&amp;nbsp;&amp;nbsp; Author: Curtis Price, USGS, cprice@usgs.gov

&amp;nbsp;&amp;nbsp;&amp;nbsp; Examples, from Desktop Help 10.x: Reading Geometries

&amp;nbsp;&amp;nbsp;&amp;nbsp; Feat0 = [
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [[3.0, 8.0],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [1.0, 8.0],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [2.0, 10.0],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [3.0, 8.0]]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ]
&amp;nbsp;&amp;nbsp;&amp;nbsp; Feat1 = [
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [[5.0, 3.0],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [3.0, 3.0],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [3.0, 5.0],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [5.0, 3.0]],

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [[7.0, 5.0],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [5.0, 5.0],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [5.0, 7.0],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [7.0, 5.0]],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ]

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # this feature has an interior ring (donut)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Feat2 = [
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [[9.0, 11.0],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [9.0, 8.0],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [6.0, 8.0],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [6.0, 11.0],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [9.0, 11.0],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; None,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [7.0, 10.0],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [7.0, 9.0],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [8.0, 9.0],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [8.0, 10.0],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [7.0, 10.0]]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ]
"""

&amp;nbsp;&amp;nbsp;&amp;nbsp; parts = arcpy.Array()
&amp;nbsp;&amp;nbsp;&amp;nbsp; rings = arcpy.Array()
&amp;nbsp;&amp;nbsp;&amp;nbsp; ring = arcpy.Array()
&amp;nbsp;&amp;nbsp;&amp;nbsp; for part in coord_list:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for pnt in part:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if pnt:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ring.add(arcpy.Point(pnt[0], pnt[1]))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # null point - we are at the start of a new ring
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rings.add(ring)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ring.removeAll()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # we have our last ring, add it
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rings.add(ring)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ring.removeAll()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # if we only have one ring: remove nesting
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if len(rings) == 1:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rings = rings.getObject(0)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; parts.add(rings)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rings.removeAll()
&amp;nbsp;&amp;nbsp;&amp;nbsp; # if single-part (only one part) remove nesting
&amp;nbsp;&amp;nbsp;&amp;nbsp; if len(parts) == 1:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; parts = parts.getObject(0)
&amp;nbsp;&amp;nbsp;&amp;nbsp; return arcpy.Polygon(parts, SR)

# test data from:
# Desktop Help 10.0: Reading Geometries

Feat0 = [
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [[3.0, 8.0],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [1.0, 8.0],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [2.0, 10.0],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [3.0, 8.0]]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ]
Feat1 = [
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [[5.0, 3.0],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [3.0, 3.0],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [3.0, 5.0],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [5.0, 3.0]],

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [[7.0, 5.0],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [5.0, 5.0],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [5.0, 7.0],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [7.0, 5.0]],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ]

# this last feature has an interior ring (donut)

Feat2 = [
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [[9.0, 11.0],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [9.0, 8.0],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [6.0, 8.0],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [6.0, 11.0],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [9.0, 11.0],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; None,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [7.0, 10.0],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [7.0, 9.0],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [8.0, 9.0],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [8.0, 10.0],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [7.0, 10.0]]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ]

# test code

# create the empty feature class

# with real data, provide a SR code, name or dataset for SR
# SR = arcpy.SpatialReference(4326)
SR = None
env.workspace = env.scratchGDB
Data = arcpy.CreateScratchName("","","featureclass",env.workspace)
print "writing: " + Data
print
arcpy.CreateFeatureclass_management(os.path.dirname(Data),
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; os.path.basename(Data),"Polygon",
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; spatial_reference=SR)

# create the polygons and write them

Rows = arcpy.da.InsertCursor(Data, "SHAPE@")
for f in [Feat0, Feat1, Feat2]:
&amp;nbsp;&amp;nbsp;&amp;nbsp; print "coords: " +&amp;nbsp; repr(f)
&amp;nbsp;&amp;nbsp;&amp;nbsp; p = makepoly(f)
&amp;nbsp;&amp;nbsp;&amp;nbsp; print "feature: " + repr(p)
&amp;nbsp;&amp;nbsp;&amp;nbsp; Rows.insertRow(
)
del Rows
&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;another bugfix&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 20:49:21 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/bug-creating-polygons-with-holes-using-arcpy/m-p/469977#M36698</guid>
      <dc:creator>curtvprice</dc:creator>
      <dc:date>2021-12-11T20:49:21Z</dc:date>
    </item>
    <item>
      <title>Re: Bug?: Creating polygons with holes using Arcpy</title>
      <link>https://community.esri.com/t5/python-questions/bug-creating-polygons-with-holes-using-arcpy/m-p/1117894#M62995</link>
      <description>&lt;P&gt;Thanks Curtis, the code works great for the given examples, and also for polygons with multiple interior rings (holes). However, I can't figure out how to create a multipart polygon with a hole in one of its parts (the union of Feat0 and Feat2 - tested with ArcGIS Desktop 10.8.1). The returned polygon will only contain the first part:&lt;/P&gt;&lt;LI-CODE lang="python"&gt;Feat3 = [
  [[3.0, 8.0],
   [1.0, 8.0],
   [2.0, 10.0],
   [3.0, 8.0]],

  [[9.0, 11.0],
   [9.0, 8.0],
   [6.0, 8.0],
   [6.0, 11.0],
   [9.0, 11.0],
   None,
   [7.0, 10.0],
   [7.0, 9.0],
   [8.0, 9.0],
   [8.0, 10.0],
   [7.0, 10.0]]
]&lt;/LI-CODE&gt;&lt;P&gt;When I try to print the returned polygon with the following method:&lt;/P&gt;&lt;LI-CODE lang="python"&gt;def printpoly(polygon):
    print "Area:   {0}".format(polygon.area)
    print "Length: {0}".format(polygon.length)
    for part in polygon:
        for pnt in part:
            print pnt&lt;/LI-CODE&gt;&lt;P&gt;I get this result:&lt;/P&gt;&lt;LI-CODE lang="c"&gt;Area: 2.0
Length: 6.472135955
3,0001220703125 8,0001220703125 NaN NaN
1,0001220703125 8,0001220703125 NaN NaN
2,0001220703125 10,0001220703125 NaN NaN
3,0001220703125 8,0001220703125 NaN NaN&lt;/LI-CODE&gt;&lt;P&gt;Am I missing something or is there a bug in Esri's Polygon constructor?&lt;/P&gt;</description>
      <pubDate>Wed, 17 Nov 2021 20:50:12 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/bug-creating-polygons-with-holes-using-arcpy/m-p/1117894#M62995</guid>
      <dc:creator>FridjofSchmidt</dc:creator>
      <dc:date>2021-11-17T20:50:12Z</dc:date>
    </item>
    <item>
      <title>Re: Bug?: Creating polygons with holes using Arcpy</title>
      <link>https://community.esri.com/t5/python-questions/bug-creating-polygons-with-holes-using-arcpy/m-p/1322111#M68480</link>
      <description>&lt;P&gt;I realize this is a very old post, but after grappling with this issue for a while I think I might have a workaround using the&amp;nbsp;symmetricDifference function for a&amp;nbsp;&lt;A href="https://pro.arcgis.com/en/pro-app/latest/arcpy/classes/polygon.htm" target="_blank"&gt;Polygon—ArcGIS Pro | Documentation&lt;/A&gt;&amp;nbsp;object. My specific workflow was to compute M and Z values on an existing Polygon ZM object and the only way I could figure out how to do this was to extract the exterior and interior rings into separate arrays, reassemble the parts and then run the&amp;nbsp;symmetricDifference with the exterior parts and the interior parts. I've modified&amp;nbsp;&lt;a href="https://community.esri.com/t5/user/viewprofilepage/user-id/1325"&gt;@curtvprice&lt;/a&gt;&amp;nbsp;code and posted it here as well as an attachment. I believe this also helps with the issue&amp;nbsp;&lt;a href="https://community.esri.com/t5/user/viewprofilepage/user-id/8423"&gt;@FridjofSchmidt&lt;/a&gt;&amp;nbsp;was having.&lt;/P&gt;&lt;PRE&gt;&lt;SPAN&gt;#&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;# Write a polygon feature class with interior rings (donut holes)&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;#&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;import &lt;/SPAN&gt;os&lt;BR /&gt;&lt;SPAN&gt;import &lt;/SPAN&gt;arcpy&lt;BR /&gt;&lt;SPAN&gt;from &lt;/SPAN&gt;arcpy &lt;SPAN&gt;import &lt;/SPAN&gt;env&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;def &lt;/SPAN&gt;&lt;SPAN&gt;makepoly&lt;/SPAN&gt;(coord_list&lt;SPAN&gt;, &lt;/SPAN&gt;SR):&lt;BR /&gt;    exteriorRing = arcpy.Array()&lt;BR /&gt;    interiorRing = arcpy.Array()&lt;BR /&gt;    &lt;SPAN&gt;for &lt;/SPAN&gt;part &lt;SPAN&gt;in &lt;/SPAN&gt;coord_list:&lt;BR /&gt;        &lt;SPAN&gt;print&lt;/SPAN&gt;(part)&lt;BR /&gt;        exteriorSubArray = arcpy.Array()&lt;BR /&gt;        interiorSubArray = arcpy.Array()&lt;BR /&gt;        isExterior = &lt;SPAN&gt;True&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;        for &lt;/SPAN&gt;pnt &lt;SPAN&gt;in &lt;/SPAN&gt;part:&lt;BR /&gt;            &lt;SPAN&gt;if &lt;/SPAN&gt;pnt:&lt;BR /&gt;                px&lt;SPAN&gt;, &lt;/SPAN&gt;py = pnt&lt;BR /&gt;                pnt = arcpy.Point(px&lt;SPAN&gt;, &lt;/SPAN&gt;py)&lt;BR /&gt;            &lt;SPAN&gt;if not &lt;/SPAN&gt;pnt:&lt;BR /&gt;                isExterior = &lt;SPAN&gt;False&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;                if &lt;/SPAN&gt;interiorSubArray.count:&lt;BR /&gt;                    interiorRing.add(interiorSubArray)&lt;BR /&gt;                interiorSubArray.removeAll()&lt;BR /&gt;            &lt;SPAN&gt;if &lt;/SPAN&gt;pnt &lt;SPAN&gt;and &lt;/SPAN&gt;isExterior:&lt;BR /&gt;                exteriorSubArray.add(pnt)&lt;BR /&gt;            &lt;SPAN&gt;if &lt;/SPAN&gt;pnt &lt;SPAN&gt;and not &lt;/SPAN&gt;isExterior:&lt;BR /&gt;                interiorSubArray.add(pnt)&lt;BR /&gt;        &lt;SPAN&gt;if &lt;/SPAN&gt;interiorSubArray.count:&lt;BR /&gt;            interiorRing.add(interiorSubArray)&lt;BR /&gt;        exteriorRing.add(exteriorSubArray)&lt;BR /&gt;&lt;BR /&gt;    exteriorPolygon = arcpy.Polygon(exteriorRing&lt;SPAN&gt;, &lt;/SPAN&gt;SR&lt;SPAN&gt;, True, True&lt;/SPAN&gt;)&lt;BR /&gt;    &lt;SPAN&gt;if &lt;/SPAN&gt;interiorRing.count:&lt;BR /&gt;        interiorPolygon = arcpy.Polygon(interiorRing&lt;SPAN&gt;, &lt;/SPAN&gt;SR&lt;SPAN&gt;, True, True&lt;/SPAN&gt;)&lt;BR /&gt;        finalPolygon = exteriorPolygon.symmetricDifference(interiorPolygon)&lt;BR /&gt;    &lt;SPAN&gt;else&lt;/SPAN&gt;:&lt;BR /&gt;        finalPolygon = exteriorPolygon&lt;BR /&gt;    &lt;SPAN&gt;return &lt;/SPAN&gt;finalPolygon&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;Feat0 = [&lt;BR /&gt;    [[&lt;SPAN&gt;3.0&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;8.0&lt;/SPAN&gt;]&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;     [&lt;SPAN&gt;1.0&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;8.0&lt;/SPAN&gt;]&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;     [&lt;SPAN&gt;2.0&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;10.0&lt;/SPAN&gt;]&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;     [&lt;SPAN&gt;3.0&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;8.0&lt;/SPAN&gt;]]&lt;BR /&gt;]&lt;BR /&gt;Feat1 = [&lt;BR /&gt;    [[&lt;SPAN&gt;5.0&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;3.0&lt;/SPAN&gt;]&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;     [&lt;SPAN&gt;3.0&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;3.0&lt;/SPAN&gt;]&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;     [&lt;SPAN&gt;3.0&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;5.0&lt;/SPAN&gt;]&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;     [&lt;SPAN&gt;5.0&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;3.0&lt;/SPAN&gt;]]&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;    [[&lt;SPAN&gt;7.0&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;5.0&lt;/SPAN&gt;]&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;     [&lt;SPAN&gt;5.0&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;5.0&lt;/SPAN&gt;]&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;     [&lt;SPAN&gt;5.0&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;7.0&lt;/SPAN&gt;]&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;     [&lt;SPAN&gt;7.0&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;5.0&lt;/SPAN&gt;]]&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;]&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;# this last feature has an interior ring (donut)&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;Feat2 = [&lt;BR /&gt;    [[&lt;SPAN&gt;9.0&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;11.0&lt;/SPAN&gt;]&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;     [&lt;SPAN&gt;9.0&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;8.0&lt;/SPAN&gt;]&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;     [&lt;SPAN&gt;6.0&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;8.0&lt;/SPAN&gt;]&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;     [&lt;SPAN&gt;6.0&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;11.0&lt;/SPAN&gt;]&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;     [&lt;SPAN&gt;9.0&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;11.0&lt;/SPAN&gt;]&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;     None,&lt;BR /&gt;&lt;/SPAN&gt;     [&lt;SPAN&gt;7.0&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;10.0&lt;/SPAN&gt;]&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;     [&lt;SPAN&gt;7.0&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;9.0&lt;/SPAN&gt;]&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;     [&lt;SPAN&gt;8.0&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;9.0&lt;/SPAN&gt;]&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;     [&lt;SPAN&gt;8.0&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;10.0&lt;/SPAN&gt;]&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;     [&lt;SPAN&gt;7.0&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;10.0&lt;/SPAN&gt;]]&lt;BR /&gt;]&lt;BR /&gt;&lt;BR /&gt;Feat3 = [&lt;BR /&gt;    [[&lt;SPAN&gt;6.0&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;11.0&lt;/SPAN&gt;]&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;     [&lt;SPAN&gt;4.0&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;11.0&lt;/SPAN&gt;]&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;     [&lt;SPAN&gt;5.0&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;13.0&lt;/SPAN&gt;]&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;     [&lt;SPAN&gt;6.0&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;11.0&lt;/SPAN&gt;]]&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;    [[&lt;SPAN&gt;12.0&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;14.0&lt;/SPAN&gt;]&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;     [&lt;SPAN&gt;12.0&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;11.0&lt;/SPAN&gt;]&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;     [&lt;SPAN&gt;9.0&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;11.0&lt;/SPAN&gt;]&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;     [&lt;SPAN&gt;9.0&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;14.0&lt;/SPAN&gt;]&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;     [&lt;SPAN&gt;12.0&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;14.0&lt;/SPAN&gt;]&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;     None,&lt;BR /&gt;&lt;/SPAN&gt;     [&lt;SPAN&gt;10.0&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;13.0&lt;/SPAN&gt;]&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;     [&lt;SPAN&gt;10.0&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;12.0&lt;/SPAN&gt;]&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;     [&lt;SPAN&gt;11.0&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;12.0&lt;/SPAN&gt;]&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;     [&lt;SPAN&gt;11.0&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;13.0&lt;/SPAN&gt;]&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;     [&lt;SPAN&gt;10.0&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;13.0&lt;/SPAN&gt;]]&lt;BR /&gt;]&lt;BR /&gt;&lt;SPAN&gt;# create the empty feature class&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;# with real data, provide a SR code, name or dataset for SR&lt;BR /&gt;&lt;/SPAN&gt;SR = &lt;SPAN&gt;None&lt;/SPAN&gt;&lt;BR /&gt;output_polygon = &lt;SPAN&gt;r'C:\ArcGIS\Default.gdb\TestPoly'&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;# create the polygons and write them&lt;BR /&gt;&lt;/SPAN&gt;polyList = []&lt;BR /&gt;&lt;SPAN&gt;for &lt;/SPAN&gt;f &lt;SPAN&gt;in &lt;/SPAN&gt;[Feat0&lt;SPAN&gt;, &lt;/SPAN&gt;Feat1&lt;SPAN&gt;, &lt;/SPAN&gt;Feat2&lt;SPAN&gt;, &lt;/SPAN&gt;Feat3]:&lt;BR /&gt;    &lt;SPAN&gt;print&lt;/SPAN&gt;(&lt;SPAN&gt;f"coords: &lt;/SPAN&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;f&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;SPAN&gt;"&lt;/SPAN&gt;)&lt;BR /&gt;    p = makepoly(f&lt;SPAN&gt;, &lt;/SPAN&gt;SR)&lt;BR /&gt;    polyList.append(p)&lt;BR /&gt;    &lt;SPAN&gt;print&lt;/SPAN&gt;(&lt;SPAN&gt;f"feature: &lt;/SPAN&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;p&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;SPAN&gt;"&lt;/SPAN&gt;)&lt;BR /&gt;&lt;BR /&gt;arcpy.management.CopyFeatures(polyList&lt;SPAN&gt;, &lt;/SPAN&gt;output_polygon)&lt;BR /&gt;&lt;BR /&gt;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 24 Aug 2023 14:04:00 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/bug-creating-polygons-with-holes-using-arcpy/m-p/1322111#M68480</guid>
      <dc:creator>lsturtevant</dc:creator>
      <dc:date>2023-08-24T14:04:00Z</dc:date>
    </item>
  </channel>
</rss>

