Задачка - получится ли решить в ArcGIS?
-
- Активный участник
- Сообщения: 244
- Зарегистрирован: 03 мар 2015, 10:01
- Репутация: 24
- Откуда: Санкт-Петербург
Задачка - получится ли решить в ArcGIS?
Добрый вечер!
Есть вопрос по функциональности Аркгис, может кто имеет опыт - можно ли с его помощью решить следующую задачу?
Имеется слой, импортированный из другой программы, он представляет собой улицы, разбитые на отрезки в последовательном направлении (каждый следующий должен начинаться из предыдущего). Отрезки имеют 2 ключевых атрибута, условно А и Б. При этом направление некоторых отрезков неправильно (то есть внутри одной улицы отрезок не начинается из предыдущего), и в этом случае значения атрибутов А и Б перепутаны местами. Также имеются атрибуты начального и конечного узлов, и номер первого всегда меньше номера второго (без ошибок).
Я бы хотела реализовать такой алгоритм: присвоить отрезкам название из другого слоя с улицами по расположению, а затем задать правило: если отрезки с одинаковым названием имеют одинаковый номер конечного узла, то у этих отрезков поменять местами номера узлов, атрибуты А и Б, а также сменить направление.
Я еще не пользовалась Model builder, и хочу спросить, есть ли возможность там такое сделать?
Спасибо тем, кто осилит мое изложение.
Есть вопрос по функциональности Аркгис, может кто имеет опыт - можно ли с его помощью решить следующую задачу?
Имеется слой, импортированный из другой программы, он представляет собой улицы, разбитые на отрезки в последовательном направлении (каждый следующий должен начинаться из предыдущего). Отрезки имеют 2 ключевых атрибута, условно А и Б. При этом направление некоторых отрезков неправильно (то есть внутри одной улицы отрезок не начинается из предыдущего), и в этом случае значения атрибутов А и Б перепутаны местами. Также имеются атрибуты начального и конечного узлов, и номер первого всегда меньше номера второго (без ошибок).
Я бы хотела реализовать такой алгоритм: присвоить отрезкам название из другого слоя с улицами по расположению, а затем задать правило: если отрезки с одинаковым названием имеют одинаковый номер конечного узла, то у этих отрезков поменять местами номера узлов, атрибуты А и Б, а также сменить направление.
Я еще не пользовалась Model builder, и хочу спросить, есть ли возможность там такое сделать?
Спасибо тем, кто осилит мое изложение.
-
- Гуру
- Сообщения: 4168
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1107
- Ваше звание: программист
- Откуда: Казань
Re: Задачка - получится ли решить в ArcGIS?
не годится, поскольку вы не знаете, у которого менять, чтобы все отрезки были направлены в одну сторону по улице (если поменяете у обоих, то ничего не изменится). Проще присвоить отрезкам улицу, и собрать из них линейную топологию (по улицам). Можно скриптом, идя в цикле от первого узла, и пристыковывая сегменты по одному запросами по текущему конечному узлу (если у вас одна линия, без "дублеров" - иначе сложнее). Можно совсем просто, но долго - делаем буфер вокруг отрезка, отсекаем кусок улицы (если современная Арка умеет пересекать линии - то и без буфера можно), и считаем скалярное произведение (векторов из начала в конец). Если оно отрицательное, то разворачиваем отрезок (предполагается, что улица - одна линия, точнее одна дуга).amnesiac писал(а):Я бы хотела реализовать такой алгоритм: присвоить отрезкам название из другого слоя с улицами по расположению, а затем задать правило: если отрезки с одинаковым названием имеют одинаковый номер конечного узла, то у этих отрезков поменять местами номера узлов, атрибуты А и Б, а также сменить направление.
-
- Активный участник
- Сообщения: 244
- Зарегистрирован: 03 мар 2015, 10:01
- Репутация: 24
- Откуда: Санкт-Петербург
Re: Задачка - получится ли решить в ArcGIS?
Извините, не слишком четко написала - менять направление у одного из отрезков, того, у которого порядковый номер больше.gamm писал(а):не годится, поскольку вы не знаете, у которого менять, чтобы все отрезки были направлены в одну сторону по улице
Но скорее лучше как вы предложили - выбрать отрезок, который ближе всего к началу геонима, и если его направление совпадает с направлением геонима, то двигаться в цикле от него, сравнивая попарно следующий с предыдущим. Если направления геонима и отрезка не совпадают, поменять направления геонима, а затем все тоже самое
А на чем нужно писать такой скрипт?
И еще, как это, собрать линейную топологию? В аркгисовских стандартных правилах вроде нет про направления?
-
- Гуру
- Сообщения: 731
- Зарегистрирован: 12 янв 2011, 22:40
- Репутация: 304
- Ваше звание: ∀
Re: Задачка - получится ли решить в ArcGIS?
Есть идея, как добиться результата стандартными средствами, но сам не проверял работоспособность.
1. Делаем Unsplit Line. Смежные рёбра объединятся. Можно задать атрибутивное поле (имя улицы), чтобы объединилось то, что нам надо.
2. Делаем обратную операцию - Split Line at Point, используя узлы исходного графа. Если узлы не представлены в виде самостоятельных точечных объектов, их можно вытянуть из начальных и конечных точек исходных полилиний, используя Feature Vertices To Points.
Получившиеся рёбра должны сохранить направление объединённых геометрий (во всяком случае, я надеюсь, что Арка так сделает). Таким образом, у нас есть однородно сориентированные отрезки в пределах улицы, которые можно пространственно сопоставить с исходными. Идентификаторы начальной и конечной точки, правда, потеряются вместе с прочими атрибутами, но сравнить направления можно и по координатам начала и конца.
3. Выбрав те геометрии из исходного слоя, которые имеют другое направление в новом, разворачиваем их (Flip Line).
Боюсь только, что при этих операциях с геометриями вычислительная точность где-нибудь подложит свинью. Но я бы попробовал.
1. Делаем Unsplit Line. Смежные рёбра объединятся. Можно задать атрибутивное поле (имя улицы), чтобы объединилось то, что нам надо.
2. Делаем обратную операцию - Split Line at Point, используя узлы исходного графа. Если узлы не представлены в виде самостоятельных точечных объектов, их можно вытянуть из начальных и конечных точек исходных полилиний, используя Feature Vertices To Points.
Получившиеся рёбра должны сохранить направление объединённых геометрий (во всяком случае, я надеюсь, что Арка так сделает). Таким образом, у нас есть однородно сориентированные отрезки в пределах улицы, которые можно пространственно сопоставить с исходными. Идентификаторы начальной и конечной точки, правда, потеряются вместе с прочими атрибутами, но сравнить направления можно и по координатам начала и конца.
3. Выбрав те геометрии из исходного слоя, которые имеют другое направление в новом, разворачиваем их (Flip Line).
Боюсь только, что при этих операциях с геометриями вычислительная точность где-нибудь подложит свинью. Но я бы попробовал.
-
- Активный участник
- Сообщения: 244
- Зарегистрирован: 03 мар 2015, 10:01
- Репутация: 24
- Откуда: Санкт-Петербург
Re: Задачка - получится ли решить в ArcGIS?
Спасибо, попробую, если я все правильно поняла, как сделать. А как выбрать в исходном слое объекты, поменявшие направление? Или можно выбрать идентичные, а потом переключить выборку, если идентичность включает направление?
-
- Гуру
- Сообщения: 731
- Зарегистрирован: 12 янв 2011, 22:40
- Репутация: 304
- Ваше звание: ∀
Re: Задачка - получится ли решить в ArcGIS?
Надо пробовать, может, получится вашим способом. Я предполагал вытянуть в атрибуты координаты начала и конца полилиний в обоих слоях, сделать Spatial Join на основе общего линейного сегмента, а затем сравнивать направление по координатам в атрибутах.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя