Hi Everyone,
I am new to Python, I am creating one empty feature class using python code and trying to create polygon using text file which is having ID, X, Y values as below,
my text file points.txt and the code is as follows
1 542935 1619969
2 543015 1619964
3 543079 1619924
4 543095 1619896
5 543107 1619816
6 543099 1619768
7 543067 1619669
8 543047 1619629
9 543007 1619593
10 542979 1619577
11 542923 1619569
12 542883 1619577
13 542810 1619625
14 542738 1619649
15 542698 1619701
16 542690 1619733
17 542699 1619773
18 542719 1619821
19 542775 1619893
20 542883 1619953
21 542935 1619969
>>> import arcpy, fileinput, string, os >>> from arcpy import env >>> env.workspace = "D:/Data" >>> inputfile = "D:/Data/points.txt" >>> fc = "newpoly.shp" >>> arcpy.CreateFeatureclass_management("D:/Data", fc, "polygon") <Result 'D:\\Data\\newpoly.shp'> >>> cursor = arcpy.da.InsertCursor(fc, ["SHAPE@"]) >>> array = arcpy.Array() >>> point = arcpy.Point() >>> for line in fileinput.input(inputfile): ... point.ID, point.X, point.y = string.split(line, " ") ... array.add(arcpy.Point(X, Y)) ... cursor.insertRow([arcpy.Polygon(array)]) ... fileinput.close() ... del cursor
But it is unable to create polygon feature, after running the code "newpoly.shp" is empty with values like
FID Shape Id
0 Polygon 0
where am i wrong?, why it is not writing geometry, Please help me
Thanks You
Sadananad
Can you format your code so indentation can be checked.
Code Formatting... the basics++
In any event, are you saying that you couldn't see a polygon or that you were expecting to see the point number because you won't see them. Are the points in clockwise order? Is it a simple polygon? And you might want to try CopyFeatures rather than CreateFeatureClass
...
arcpy.Polygon( arcpy.Array([arcpy.Point(*coords) for coords in feature])))
,,,
Thank You So Much
It looks like you are closing your input text file after reading the first line.
Put the .close outside of the loop.
I believe that the geometry constructor sorts out the directionality of the coordinate loop first before writing the geometry.
Thank You So Much
And the del cursor
First, you should really be working with spatial references. As it stands now, you are creating polygons and feature classes/shape files that have no spatial references.
Beyond what Neil Ayres covered, i.e., closing the file after one point is read, I am surprised the code runs completely. Specifically, the following line should generate an error:
array.add(arcpy.Point(X, Y))
You have not defined X or Y anywhere in the code you have posted, so it should generate a NameError. Since you have already defined a Point and set its ID, X, and Y attributes; all you need to do is pass the point into the array:
array.add(point)
Your current code will not populate an "ID" field seperate from the FID for two reasons:
Thank You So Much
I think I did it like this
spatial_ref = # Define Spatial referene here point = arcpy.Point(X, Y) point_geometry = arcpy.PointGeometry(point, spatial_ref)
Then you can use point_geometry with your insert cursor (which should be opened with the ID field as well as SHAPE@) to create the feature with the ID.
There are also some good examples in the help, I'd stay closer to their recipe
Writing geometries—Help | ArcGIS for Desktop
Also see some of my tribulations here