Looking at your Y values this is pretty much a straight line. You are probably breaking polygon rules with self intersections when you close the polygon.
Thanks for looking into this. This is actually a trapezoid. If you use the method def _create_polyline_shapefile. It creates the line shape. The problem is actually when it is generated as a polygon shape, which is the other method "_create_polygon_shapefile". When we try to generate as a shape, it does not show the graphics.
There is no need to create a new class. Just a function would do. Shapefiles are obsolete with lots of limitations, use a featureclass in a filegeodatabase. Then you can have null geometry for example.
There are much easier ways of loading data that this painful way that is also very old.
Here are 5 records of the in the PointFile======================id, shapeId, x, y, z
1,1,2197490.3821680555,1.5003079009938888E7,1573.2872741540364
2,2,2197478.7284111492,1.5003076194199622E7,1570.29
3,3,2197459.2878189506,1.500307149703293E7,1570.29
4,4,2197446.2932236306,1.5003068357325058E7,1573.6321294959107
5,5,2197490.3821680555,1.5003079009938888E7,1573.2872741540364Here is the python program===================import arcpy
import os
class TextToShapefileConverter:
def __init__(self, input_directory, output_directory, spatial_reference_id=26914😞
self.input_directory = input_directory
self.output_directory = output_directory
self.spatial_reference_id = spatial_reference_id
self.spatial_reference = arcpy.SpatialReference(self.spatial_reference_id)
def convert(self, point_file_name):
input_text_file = os.path.join(self.input_directory, point_file_name)
output_shapefile_name = os.path.splitext(point_file_name)[0] + '.shp'
output_shapefile = os.path.join(self.output_directory, output_shapefile_name)
print "generating", output_shapefile_name
if "PolygonPointFile" in point_file_name:
self._create_polyline_shapefile(output_shapefile, input_text_file)
# self._create_polygon_shapefile(output_shapefile, input_text_file)
def _create_polyline_shapefile(self, output_shapefile, input_text_file):
arcpy.env.overwriteOutput = True
arcpy.CreateFeatureclass_management(
os.path.dirname(output_shapefile),
os.path.basename(output_shapefile),
"POLYLINE", has_z="ENABLED", has_m="DISABLED",
spatial_reference=self.spatial_reference)
arcpy.AddField_management(output_shapefile, "PairID", "LONG")
cursor = arcpy.da.InsertCursor(output_shapefile, ['SHAPE@', 'PairID'])
points = []
pair_id = 0
with open(input_text_file, 'r') as file:
next(file) # Skip header
for line in file:
if line.strip():
_, _, x, y, z = line.split(',')
point = arcpy.Point(float(x), float(y), float(z))
points.append(point)
# Check if a pair of points has been added
if len(points) == 5:
print points
polyline = arcpy.Polyline(arcpy.Array(points), self.spatial_reference, True)
cursor.insertRow([polyline, pair_id])
points = [] # Reset for next pair
pair_id += 1
del cursor
def _create_polygon_shapefile(self, output_shapefile, input_text_file):
arcpy.env.overwriteOutput = True
arcpy.CreateFeatureclass_management(
os.path.dirname(output_shapefile),
os.path.basename(output_shapefile),
"POLYGON", has_z="ENABLED", has_m="DISABLED",
spatial_reference=self.spatial_reference)
arcpy.AddField_management(output_shapefile, "GroupID", "LONG")
cursor = arcpy.da.InsertCursor(output_shapefile, ['SHAPE@', 'GroupID'])
points = []
group_id = 0
with open(input_text_file, 'r') as file:
next(file) # Skip header
for line in file:
if line.strip():
id, _, x, y, z = line.split(',')
point = arcpy.Point(float(x), float(y), float(z))
points.append(point)
if len(points) == 5:
if points[0] != points[-1]:
points.append(points[0]) # Ensure the polygon is closed
polygon = arcpy.Polygon(arcpy.Array(points), self.spatial_reference, True)
cursor.insertRow([polygon, group_id])
points = [] # Reset for next group
group_id += 1
del cursor
if __name__ == "__main__":
input_directory = r'C:\Tutorial\GIS\ArcPyTutorial\Data\MyTestFolder'
output_directory = r'C:\Tutorial\GIS\ArcPyTutorial\Data\MyTestFolder\outPut'
converter = TextToShapefileConverter(input_directory, output_directory)
# Process each file
for filename in os.listdir(input_directory):
if filename.endswith('.txt'😞
converter.convert(filename)