Вот иллюстрация рабочего процесса, о котором я упоминал в комментарии выше, и хотя я не знаю какой-либо простой предварительно подготовленной процедуры для этого, я приложил электронную таблицу Excel, в которую можно импортировать набор координат отправления-назначения и лист затем создает набор или круговую линию координат (таблица здесь ). У него есть настроенные формулы, поэтому довольно легко импортировать новые координаты OD и расширять формулы, чтобы заполнить результаты, но я более подробно расскажу о логике процесса, а другие могут дать совет, как полностью написать сценарий в ArcMap (или любой другой).
Вкратце, я думаю, что это разумно для визуализации данных OD, в основном по той же причине, по которой популярны большие круговые линии, они обеспечивают более визуальное различие между линиями. Подход, который я предлагаю, также имеет одно преимущество перед большими круговыми линиями в том, что направление потока кодируется в полукруге. В этом другом ответе на сайте я даю более общий обзор методов визуализации для отображения потока, и многие из тех же самых техник могут применяться в дополнение к созданию дуг, подобных этой.
Итак, чтобы детализировать, как рисуют линии, как я предлагаю, по сути, у меня есть только 3 шага для процесса, 1) найти ориентацию потока, 2) найти среднюю точку и расстояние потока, 3) обработать среднюю точку, как центр круга, а затем нарисуйте дугу (полукруг от начала координат до пункта назначения). Чтобы было ясно, я начинаю с установленной пары проецируемых координат начала и координат (x1,y1)
назначения (x2,y2)
.
Итак, 1) найдите ориентацию потока. Один сначала использует формулу, ATAN((y2 - y1)/(x2 - x1))
а затем в зависимости от направления назначает ориентацию в зависимости от того, является ли направление на восток или запад. Пример псевдокода ниже (я назначаю точки OD, которые находятся в одинаковых координатах с ориентацией нуля). Здесь varaible or_rad
предназначен для сокращения «ориентации в радианах» и pi
относится к значению pi.
#tan_or = ATAN((y2 - y1)/(x2 - x1)).
Do If x2 = x1 and y1 <= y2.
compute or_rad = 0.
Else if x2 = x1 and y1 > y2.
compute or_rad = pi.
Else if x1 > x2.
compute or_rad = 270/180*pi - #tan_or.
Else if x1 < x2.
compute or_rad = 90/180*pi - #tan_or.
End If.
2) Найти среднюю точку и расстояние потока. Это очень просто, так как только для одного набора парных координат будет находиться средняя точка в координатах (x, y) (x1+x2/2,y1+y2/2)
. Итак, давайте определимся mid_x = (x1 + x2)/2
и mid_y = (y1 + y2)/2
для следующей части. Расстояние с использованием теоремы пифагорея просто distance = SQRT((x1 - x2)^2 + (y1 - y2)^2)
.
3) Затем, учитывая эту информацию, нарисуйте круг с заданным количеством градусов и радиусом (который равен половине расстояния между двумя точками). Например, допустим, мы начинаем с набора пар координат OD в (1,3):(3,2)
. Ориентация в градусах будет ~ 116 (а в радианах ~ 2), средняя точка x, y будет, (2,2.5)
а расстояние между двумя точками - около 2.2.
Допустим, мы хотим нарисовать полукруг около 180 градусов. В псевдо-коде (с использованием переменных, которые я уже определил) итерации будут выглядеть примерно так:
for i in (0 to 180 degrees)
rad_i = i/180*pi. /*converts i from degrees to radians
step_or = pi - rad_i /*for clarity, this makes the circle go from origin to destination
radius = distance/2
Arc_X = mid_x + sin(or_rad - step_or)*radius.
Arc_Y = mid_y + cos(or_rad - step_or)*radius.
Ниже приведена схема исходных координат, указанных мной выше. Начиная с нуля и заканчивая 180, убедитесь, что существо и конечные точки находятся в одинаковых местах. Настройка цикла на большее количество шагов (более подробная дуга) или меньшее количество (менее подробная дуга) должна быть достаточно очевидной.
Отметим, что другие темы на сайте обсуждают создание линий из точечных данных (см. Тег polyline-creation ). У меня есть пример в прикрепленной электронной таблице xls, и я использовал инструмент Arcmap ET Geo- wizards для преобразования координат электронной таблицы в линии шейп - файла. Дуги в данных примера в прилагаемой электронной таблице впоследствии выглядят следующим образом;
Одним из простых, но потенциально полезных обновлений для этой текущей настройки было бы обновление формул, чтобы учесть предварительно определенное количество эксцентриситета в дуге, хотя я до сих пор не был совершенно уверен, как это сделать в моих нескольких попытках. Я с нетерпением жду предложений и отзывов от сообщества по моему совету.