Это можно сделать с помощью Python, но для его написания потребуется некоторое время.
Я думаю, что самый быстрый способ реализовать это без Python - это иметь шаблонный файл SHP этих параллельных линий. Имейте несколько, если вам нужна переменная ширина, и просто используйте соответствующую для этого полигона. Сделайте так, чтобы линии шаблона занимали достаточно места, чтобы покрыть самый большой полигон, с которым вы столкнетесь.
- При редактировании перемещайте линии над многоугольником.
- Используйте инструмент «Поворот», переместите опорную точку туда, где параллельная линия и край многоугольника совпадают, и поверните линии так, чтобы они привязывались к краю многоугольника, на котором вы выстроились.
- Преобразовать многоугольник в полилинию
- Поместите ломаную линию на любое расстояние, которое вы хотите, чтобы параллельные линии были от края многоугольника.
- Используйте инструмент «Стереть», чтобы стереть полилинии, которые покрыты буферным ребром полигона.
- Выберите по расположению все линии, которые не находятся внутри многоугольника, и удалите их. Или я думаю, что инструмент Clip тоже подойдет.
- Выберите по атрибуту все строки, которые меньше определенной длины (слишком короткая, чтобы ее сохранить, хотя вам может понадобиться сначала добавить поле и вычислите геометрию), и больше определенной длины (слишком длинная, чтобы ее сохранить, если вы этого хотите ), удалите их.
- Промыть и повторить...
Шаги с 3 по 7 могут быть смоделированы, без необходимости написания кода.
Почти тот же процесс может быть использован для его кодирования, но вместо шаблонных линий можно сделать так, чтобы код рисовал линии под прямым углом, на расстоянии друг от друга и т. Д. Я некоторое время этого не делал, но я думаю, что Библиотека Python вроде shapely поможет. Просто убедитесь, что он охватывает большую область, чем полигон, и используйте инструменты для автоматического преобразования в ломаную линию, буферизации, удаления, выделения линий, не входящих в полигон, и удаления их.