Прописать направления от точки до точки в атрибутике
Добавлено: 06 май 2020, 15:58
Уважаемые коллеги, здравствуйте!
Такая задача стоит. Нужно сделать описание границ объекта (полигона). По типу "от точки N1 до точки Т2 в северо-западном направлении..." и т.д.
Так вот, этих точек тысячи и понятно, что руками прописывать направление - это с ума сойти можно.
Что сделал (в ArcGIS):
1. Создал точки на границе полигона (Feature Vertices to Points)
2. Разбил полигон на множество отрезков от точки до точки (split line at vertices)
3. Добавил азимуты линий (для множества отрезков). Значения находятся в диапазоне от 0 до 360. тип поля double.
(Add geometry attributes -> Line_bearing)
4. Дальше затор. Как преобразовать значения азимутов в шейпфайле в соответствующий текст в калькуляторе полей? Т.е. нужно новое текстовое поле и примерно понимаю, что на подобие такого выражения получится:
bearing = float(input())
if (bearing > 0.0) and (bearing < 90.0):
print('северо-восточном')
elif (bearing > 90.0) and (bearing < 180.0):
print('юго-восточном')
elif (bearing > 180.0) and (bearing < 270.0):
print('юго-западном')
else:
print('северо-западном')
Или как-то по другому можно этот вопрос решить?
Такая задача стоит. Нужно сделать описание границ объекта (полигона). По типу "от точки N1 до точки Т2 в северо-западном направлении..." и т.д.
Так вот, этих точек тысячи и понятно, что руками прописывать направление - это с ума сойти можно.
Что сделал (в ArcGIS):
1. Создал точки на границе полигона (Feature Vertices to Points)
2. Разбил полигон на множество отрезков от точки до точки (split line at vertices)
3. Добавил азимуты линий (для множества отрезков). Значения находятся в диапазоне от 0 до 360. тип поля double.
(Add geometry attributes -> Line_bearing)
4. Дальше затор. Как преобразовать значения азимутов в шейпфайле в соответствующий текст в калькуляторе полей? Т.е. нужно новое текстовое поле и примерно понимаю, что на подобие такого выражения получится:
bearing = float(input())
if (bearing > 0.0) and (bearing < 90.0):
print('северо-восточном')
elif (bearing > 90.0) and (bearing < 180.0):
print('юго-восточном')
elif (bearing > 180.0) and (bearing < 270.0):
print('юго-западном')
else:
print('северо-западном')
Или как-то по другому можно этот вопрос решить?