# Vertical lines in a polygon shapefile

I am working with a GIS problem using a single input of a polygon shapefile.

Consider an irregular polygon. I want to draw vertical lines across the extent of the polygon at equal spacing.

How I intend to proceed is:

1. Identify the bounding box (done using PyShp)

2. Draw vertical Lines parallel to the left edge of the bounding box at equal spacing (How?)

3. Clip the lines to the extent of the polygon (How, without using ArcPy?)

Note: They are required to be only vertical, and not a graticule. Also, I do not intend to use ArcPy, and intend to perform the coding completing in Python (2.7) as this segment of code needs to go into a tool generated from PyQt.

you could used shapely, here are some pieces of code that should help you build your script

from shapely.geometry import Point, LineString

``````for x in range(size):
line = LineString([Point(leftX + x, 0), Point(leftX + x, 10000)])
clippedline = line.intersection(polygon)
``````
• Could you please look into my code below, and suggest how to clip the resultant shapefile and the input polygon? – Akhil Sep 12 '14 at 9:21

Finally figured out the code to my question.. !! Thus answering it PARTIALLY... Thank you for your inputs..

``````Ipath = raw_input("Enter the input file :- ")
Opath = raw_input("Enter the output directory :- ")
Ipath = Ipath.replace("\\", "/") # Python requirement for paths
Opath = Opath.replace("\\", "/")
copyfile(str(Ipath) + ".prj", str(Opath) + "/" + "Out_Lines" + ".prj") # Copying projection file

shapes = sf.shapes()
Box = shapes.bbox
Spc = input("Enter the grid spacing :- ") # Grid Spacing read

x_min = Box # Save the coordinates of the right-bottom, left-top bounding box
y_min = Box
x_max = Box
y_max = Box

A_bbox = [x_min, y_min] # First assignment of coordinates
B_bbox = [x_max, y_max]
C_bbox = [x_min, y_max]
D_bbox = [x_max, y_min]

w = shapefile.Writer(shapefile.POLYLINE) # Shapefile writer
w.line(parts = [[A_bbox, C_bbox]])
w.field('Path number', 'C', '50')
w.record(str(1)) # Writes the first line, that is the left 'side' of the bounding box

# Increasing the X coordinate to generate a line at a specified spacing
i = 2
while (A_bbox <= x_max):
A_bbox = [A_bbox + Spc, A_bbox]
C_bbox = [C_bbox + Spc, C_bbox]
w.line(parts = [[A_bbox, C_bbox]])
w.record(str(i))
i = i+1

w.save(str(Opath) + "/" + "Out_Lines")
``````