2014-09-09 4 views
0

Я работаю с проблемой ГИС, используя один входной файл файла формы многоугольника.Вертикальные линии в файле формы polygon

Рассмотрите нерегулярный многоугольник. Я хочу нарисовать вертикальные линии по всему полигону на равном расстоянии.

Как я намерен продолжить это:

  1. Определить рамку (сделано с использованием PyShp)

  2. рисовать вертикальные линии параллельно левому краю прямоугольника в равной интервал (Как?)

  3. Обрежьте строки в пределах полигона

Примечание (как, без использования ArcPy?): Они должны быть только по вертикали, а не картографической сеткой. Кроме того, я не намерен использовать ArcPy и намереваться выполнить кодирование, завершающееся в Python (2.7), так как этот сегмент кода должен войти в инструмент, созданный из PyQt.

+0

@jonrsharpe - Спасибо за изменения .. – Akhil

+0

Вы также можете задать свой вопрос и опубликовать свой код на http://gis.stackexchange.com/. – wwii

+0

Да .. Абсолютно .. Спасибо :) – Akhil

ответ

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") 

Это сохраняет результат в шейп-файле.

В качестве продолжения вышеупомянутого вопроса решение проблемы доступно по адресу Clipping Line shapefiles within extent of Polygon shape. Я думаю, что этот набор вопросов теперь можно рассматривать как ответ и закрыт.

Благодарим вас за помощь.

+0

Любые помощь с сегментом отсечения наиболее приветствуются. – Akhil

+0

Вы хотите, чтобы она была обрезана в ограничительную рамку или в оригинальную * форму *? Один, грубый, метод должен был бы сравнить точки на линии с * формой * и найти, где точки * вне * формы. – wwii

+0

Идея состоит в том, чтобы закрепить его на полигоне. Не ограничивающая рамка. – Akhil

0
  • Найти точки/вершины, которые описывают линию на левом краю - (x1, y1), (х2, у2)
  • Добавить константу к значениям х - (x1 + к, y1), (x2 + k, y2)
  • Найти значения y на многоугольнике при новых значениях x - (x1 + k, y3), (x2 + k, y4)
  • Нарисуйте линию между этими двумя точками.
+0

Большое спасибо за ввод. Я скоро отправлю код, если его решит (или обсудит ошибки) – Akhil

+0

Больше всего приветствуется любая помощь с отсекающим сегментом. – Akhil

 Смежные вопросы

  • Нет связанных вопросов^_^