Ось ілюстрація робочого процесу, про який я згадував у коментарі вище, і хоча я не знаю жодної простої попередньо консервованої програми для цього, я додав таблицю Excel, яка дозволяє імпортувати набір координат вихідного місця призначення та Потім на аркуші робиться набір або координати кругової лінії (таблиця тут ). У ньому встановлені формули, тому досить легко імпортувати нові координати OD і розширити формули для заповнення результатів, але я детальніше пройду логіку процесу, але інші можуть дати поради, як його повністю скриптувати в межах ArcMap (або що завгодно).
Якщо коротко, я вважаю, що це доцільно для візуалізації даних OD в основному з тієї ж причини, що популярні великі кола кола, вони забезпечують більш візуальне розрізнення між лініями. Підхід, який я пропоную, також має одну перевагу перед великими лініями кола в тому, що напрямок потоку кодується півколом. У цій іншій відповіді на сайті я даю більш загальний огляд методів візуалізації для картографування потоків, і багато тих самих прийомів можна застосувати на додаток до виготовлення подібних дуг.
Отже, для деталізації того, як можна малювати лінії, як я пропоную, по суті, у мене є лише 3 етапи процесу, 1) знайти орієнтацію потоку, 2) знайти середину та відстань потоку, 3) обробити середина точки як центр кола, а потім намалюйте дугу (півкола від початку до пункту призначення). Щоб було зрозуміло, я починаю з заданої пари проектованих координат початку (x1,y1)
та координати призначення (x2,y2)
.
Отже 1) знайти орієнтацію потоку. Перший використовує формулу, ATAN((y2 - y1)/(x2 - x1))
а потім, залежно від напрямку, призначає орієнтацію залежно від того, напрямок є на схід чи на захід. Приклад псевдокоду нижче (я присвоюю точки OD, які обидва мають однакові координати, орієнтовані на нуль). Тут змінний 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 градусів. У pseduo-коді (використовуючи я вже визначені змінні) ітерації виглядатимуть приблизно так;
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, гарантує, що істота і кінцеві точки знаходяться в одних і тих же місцях. Регулювання циклу, щоб мати більше кроків (більш детальна дуга) або менше (менш деталізована дуга), повинно бути досить очевидним.

Для зауваження, інші потоки на сайті обговорюють створення ліній із даних точок (див. Тег створення поліліній ). У мене є приклад прикладеної таблиці xls, і я використав інструмент arcmap ET Geo-wizards для перетворення координат електронних таблиць у рядки shapefile. Дуги в прикладних даних у доданій таблиці згодом виглядають приблизно так;

Одним простим, але потенційно корисним оновленням цього поточного налаштування було б оновлення формул, щоб забезпечити заздалегідь задану кількість ексцентриситету в дузі, хоча я не був зовсім впевнений, як це зробити в кількох своїх спробах досі. Я з нетерпінням чекаю пропозицій та відгуків громади тут щодо моїх порад.