多边形shapefile中的垂直线

时间:2014-09-09 10:58:14

标签: python python-2.7 shapefile bounding-box

我正在使用多边形shapefile的单个输入处理GIS问题。

考虑不规则多边形。我想以相等的间距在多边形的范围内绘制垂直线。

我打算如何继续:

  1. 识别边界框 (使用PyShp完成)

  2. 以相等的间距绘制与边界框左边平行的垂直线 (如何?)

  3. 将线条剪切到多边形的范围 (如何,不使用ArcPy?)

  4. 注意:它们必须只是垂直的,不是一个刻度。此外,我不打算使用ArcPy,并打算在Python(2.7)中执行编码,因为这段代码需要进入从PyQt生成的工具。

2 个答案:

答案 0 :(得分:0)

  • 找到描述左边缘线的点/顶点 - (x1,y1),(x2,y2)
  • 向x值添加常数 - (x1 + k,y1),(x2 + k,y2)
  • 在新x值处找到多边形上的y值 - (x1 + k,y3),(x2 + k,y4)
  • 画出这两点之间的界限。

答案 1 :(得分:0)

最后想出了我的问题的代码.. !!因此回答它...感谢您的投入..

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


sf = shapefile.Reader(str('Input Path'))
shapes = sf.shapes()
Box = shapes[0].bbox
Spc = input("Enter the grid spacing :- ") # Grid Spacing read

x_min = Box[0] # Save the coordinates of the right-bottom, left-top bounding box
y_min = Box[1]
x_max = Box[2]
y_max = Box[3]

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[0] <= x_max):
    A_bbox = [A_bbox[0] + Spc, A_bbox[1]]
    C_bbox = [C_bbox[0] + Spc, C_bbox[1]]
    w.line(parts = [[A_bbox, C_bbox]])
    w.record(str(i))
    i = i+1

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

这会将结果保存在shapefile中。

作为上述问题的延续,问题的解决方案可在Clipping Line shapefiles within extent of Polygon shape获得。我认为这套问题现在可以被视为已回答并已结束。

谢谢大家的帮助。