The code used:
def main():
import arcpy
import os
fc_out = r'C:\HH\ce\cemeterypy.gdb\result05'
fld_lbl = r'RectangleID'
sr = arcpy.SpatialReference(2276)
x_start = 2523853.5
y_start = 7124354.1
rect_width = 10.0
rect_height = 5.0
num_blocks_h = 7
num_blocks_v = 7
num_rect_in_block_h = 4
num_rect_in_block_v = 8
spacing_h = 2.0
spacing_v = 2.0
arcpy.env.overwriteOutput = True
fc_ws, fc_name = os.path.split(fc_out)
arcpy.CreateFeatureclass_management(fc_ws, fc_name, "POLYGON", None, None, None, sr)
arcpy.AddField_management(fc_out, fld_lbl, "TEXT", None, None, 10)
flds = ("SHAPE@", fld_lbl)
cnt = 0
with arcpy.da.InsertCursor(fc_out, flds) as curs:
for block_h in range(num_blocks_h):
for block_v in range(num_blocks_v):
for rect_h in range(num_rect_in_block_h):
for rect_v in range(num_rect_in_block_v):
x_min = x_start + block_h * spacing_h + block_h * num_rect_in_block_h * rect_width + rect_h * rect_width
y_min = y_start + block_v * spacing_v + block_v * num_rect_in_block_v * rect_height + rect_v * rect_height
x_max = x_min + rect_width
y_max = y_min + rect_height
rectangle = CreateRactangle(x_min, y_min, x_max, y_max, sr)
label = GetLabel(block_h, block_v, rect_h, rect_v)
cnt += 1
if cnt % 50 == 0:
print("Processing rectangle: {}".format(cnt))
curs.insertRow((rectangle, label, ))
print("Finished processing {} rectangles".format(cnt))
def CreateRactangle(x_min, y_min, x_max, y_max, sr):
coords = [[x_min, y_min], [x_min, y_max], [x_max, y_max],
[x_max, y_min], [x_min, y_min]]
return arcpy.Polygon(arcpy.Array([arcpy.Point(*coord) for coord in coords]), sr)
def GetLabel(block_h, block_v, rect_h, rect_v):
even = rect_h % 2 == 0
if rect_v < 4:
if even:
part3 = rect_v + 1
else:
part3 = rect_v + 7
quad_row = 1 + 28 * block_v
if rect_h <2:
quad_col = block_h * 2
else:
quad_col = 1 + block_h * 2
else:
if even:
part3 = rect_v - 3
else:
part3 = rect_v + 1
quad_row = 15 + 28 * block_v
if rect_h <2:
quad_col = block_h * 2
else:
quad_col = 1 + block_h * 2
part2 = quad_row + quad_col
part1 = "A"
return "{}-{}-{}".format(part1, part2, part3)
if __name__ == '__main__':
main()