Создание карты радиального потока, показывающей изогнутые линии на короткие расстояния (20 км) с использованием ArcGIS for Desktop?


10

Esri предоставила инструкции по созданию радиальной карты потока, но я думаю, что изогнутые линии будут создаваться только на большом расстоянии, например, на половине земного шара.

На коротких расстояниях (20 км) геодезическая линия, вероятно, все еще будет выглядеть довольно прямой. Чтобы продолжать использовать этот процесс для радиальной карты потока на короткие расстояния, тогда я подумал, что мы могли бы отредактировать базовые параметры, чтобы земля была меньше, поэтому вы получите хорошую изогнутую линию на небольшом расстоянии. Кто-нибудь знает, как это сделать?

В качестве альтернативы, есть ли в ArcGIS Desktop 10.0 другой инструмент для создания изогнутых линий? У меня есть 90 точек, которые мне нужно соединить до 54 точек, было бы неплохо автоматизировать это, а не рисовать линии вручную.


2
Ваш вопрос был задан по адресу gis.stackexchange.com/questions/5204/… вне контекста ArcGIS. Вы можете найти ответы, которые представляют интерес.
whuber

1
У меня была другая идея, чем у Вубера, но, возможно, он лучше подходит для ваших целей. Я просто думал, что можно добавить произвольное количество изгибов к дуге, подобно тому, как это делается на дуговых диаграммах . Затем можно изменить направление апекса в зависимости от направления потока. По сути, рабочий процесс будет таким же, как для больших кругов, разбейте строку строки на множество меньших прямых сегментов. Однако произвольный изгиб может вместить любую локальную проекцию.
Энди У,

@ AndyW, ваше предложение звучит более полезно для меня (хотя не обижайся на whuber, который делает отличные предложения для большего количества пользователей capaple). Я не могу понять или реализовать предложение whuber. Я выбрал простое решение «из коробки», предпочтительно расширение ArcGIS. Я посмотрел на дуговые диаграммы, там есть несколько удивительных примеров. Я не вижу там решения для простой статической карты, показывающей отношения многие ко многим (но обычно один ко многим) между, в моем случае, сайтами выселения и местами переселения.
2012 года

Ответы:


5

Вот иллюстрация рабочего процесса, о котором я упоминал в комментарии выше, и хотя я не знаю какой-либо простой предварительно подготовленной процедуры для этого, я приложил электронную таблицу 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, убедитесь, что существо и конечные точки находятся в одинаковых местах. Настройка цикла на большее количество шагов (более подробная дуга) или меньшее количество (менее подробная дуга) должна быть достаточно очевидной.

введите описание изображения здесь

Отметим, что другие темы на сайте обсуждают создание линий из точечных данных (см. Тег ). У меня есть пример в прикрепленной электронной таблице xls, и я использовал инструмент Arcmap ET Geo- wizards для преобразования координат электронной таблицы в линии шейп - файла. Дуги в данных примера в прилагаемой электронной таблице впоследствии выглядят следующим образом;

введите описание изображения здесь

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


1
это действительно фантастический ответ! хотя я не понимаю, как кодировать, я думаю, у меня есть что-то хорошее, что я могу обсудить с другом. Мне известен инструмент et geowizards для соединения двух точек с помощью прямой линии - меня интересуют только кривые линии для картографических целей.
ndthl
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.