Hello, I am working on a script that produces a polygon grid from a series of irregularly spaced points (hence why I can't use fishnet).
I have managed to produce the desired grid but am unable to assign a spactial reference to the grid.
I have tried a number of ways such as assigning a Spactial Reference. I've tried to assign it to the individual points using a for loop:
PointsList=[]
for n in coordList:
array=[]
for coords in n:
point=arcpy.Point(coords[0],coords[1])
ptGeometry=arcpy.PointGeometry(point,arcpy.SpatialReference(factoryCode))
array.append(ptGeometry)
PointsList.append(array)
features = []
for feature in PointsList:
#Create a Polygon object based on the array of points
#Append to the list of Polygon objects
features.append(
arcpy.Polygon(
arcpy.Array(*corner)) for corner in feature)
arcpy.CopyFeatures_management(features, outputName)
Or to the polygon durring its construction:
features = []
for feature in coordList:
# Create a Polygon object based on the array of points
# Append to the list of Polygon objects
features.append(
arcpy.Polygon(
arcpy.Array([arcpy.Point(*coords) for coords in feature]), arcpy.SpatialReference(factoryCode)))
arcpy.CopyFeatures_management(features, outputName)
But both ways are giving me a runtime error.
I was wondering if it would be best to first create a feature class and then creat my polygons but I don't know how to write polygons to feature classes in python.
If someone could provide guidance it would be much apprechiated.
Solved! Go to Solution.
Below an extract from another post:
import arcpy arcpy.env.overwriteOutput = True sr = arcpy.SpatialReference(4326) # WGS 1984 # coords lon_min = 175 lon_max = 185 lat_min = 0 lat_max = 10 polygon = arcpy.Polygon(arcpy.Array([arcpy.Point(lon_min, lat_min), arcpy.Point(lon_min, lat_max), arcpy.Point(lon_max, lat_max), arcpy.Point(lon_max, lat_min), arcpy.Point(lon_min, lat_min)]),sr) fc_out = r"D:\Xander\GeoNet\AroundTheWorld\polygon01.shp" arcpy.CopyFeatures_management([polygon], fc_out)
Notice that the Polygon is created from an Array of a list of Point objects.
In your post I see you are using an "array" which is in your case a list and you use PointGeometry objects.
Below an extract from another post:
import arcpy arcpy.env.overwriteOutput = True sr = arcpy.SpatialReference(4326) # WGS 1984 # coords lon_min = 175 lon_max = 185 lat_min = 0 lat_max = 10 polygon = arcpy.Polygon(arcpy.Array([arcpy.Point(lon_min, lat_min), arcpy.Point(lon_min, lat_max), arcpy.Point(lon_max, lat_max), arcpy.Point(lon_max, lat_min), arcpy.Point(lon_min, lat_min)]),sr) fc_out = r"D:\Xander\GeoNet\AroundTheWorld\polygon01.shp" arcpy.CopyFeatures_management([polygon], fc_out)
Notice that the Polygon is created from an Array of a list of Point objects.
In your post I see you are using an "array" which is in your case a list and you use PointGeometry objects.
Thanks Xander Bakker,
I guess my main issue was in the line:
arcpy.Array([arcpy.Point(*coords) for coords in feature]),arcpy.SpatialReference(factoryCode)))
where factoryCode was an input Coordinate system from the user of this script. I was hoping to have the code so I can create the polygons with a different spatial without having to open the scrip everytime. Here is a better example of what I am triing to do.
import arcpy arcpy.env.overwriteOutput = True inputWorkspace = arcpy.GetParameterAsText(0) outputName = arcpy.GetParameterAsText(1) factoryCode = arcpy.GetParameterAsText(2) #input Coordinate System coordList = [[[1, 2], [2, 4], [3, 7]], [[6, 8], [5, 7], [7, 2], [9, 5]]] features = [] sr = arcpy.SpatialReference(factoryCode) for feature in coordList: features.append( arcpy.Polygon( arcpy.Array([arcpy.Point(*coords) for coords in feature]), sr)) arcpy.CopyFeatures_management(features, outputName)