Страница 1 из 1

Автоматическое перемещение полигонов

Добавлено: 11 июн 2014, 16:18
olkis
Добрый день!
У меня такая проблема: есть полигональный слой хаотично расположенных полигонов. Мне необходимо, вычислить полигоны, которые находятся друг от друга на расстоянии меньше 3 м и сдвинуть (распределить) их автоматически, чтобы расстояние между каждым полигоном было не менее 3м. Возможно ли такое сделать в АркГис ?

Re: Автоматическое перемещение полигонов

Добавлено: 11 июн 2014, 16:28
lam
olkis писал(а):Добрый день!
У меня такая проблема: есть полигональный слой хаотично расположенных полигонов. Мне необходимо, вычислить полигоны, которые находятся друг от друга на расстоянии меньше 3 м и сдвинуть (распределить) их автоматически, чтобы расстояние между каждым полигоном было не менее 3м. Возможно ли такое сделать в АркГис ?
Выложите фрагмент шейпа.

Re: Автоматическое перемещение полигонов

Добавлено: 11 июн 2014, 16:38
olkis
Вот полигоны

Re: Автоматическое перемещение полигонов

Добавлено: 11 июн 2014, 19:21
gamm
olkis писал(а):Добрый день!
У меня такая проблема: есть полигональный слой хаотично расположенных полигонов. Мне необходимо, вычислить полигоны, которые находятся друг от друга на расстоянии меньше 3 м и сдвинуть (распределить) их автоматически, чтобы расстояние между каждым полигоном было не менее 3м. Возможно ли такое сделать в АркГис ?
1) постановка задачи (если воспринимать написанное буквально) бессмысленная - решением является, например, размещение объектов в узлах регулярной сетки с шагом 1км

2) найти нетрудно - нужно сделать вокруг них буферы радиусом 1.51 метра, и найти пересекающиеся буферы.

3) если наложить на решение естественные ограничения (например, минимальный возможный сдвиг, сохранение ориентации рядов, сдвиг по возможности только пересекающихся, и т.д), то есть итерационное решение, которое применяют для подобной задачи о размещении меток - вычислить для пересекающихся объектов (точнее, их буферов) направление сдвига (вычислением производной от площади пересечения по координатам), и сдвинуть оба на некоторый шаг, например 0.1 - 0.3 от разводящего их

4) в Арке сделать это можно, если программировать умеете (или кто-то готовый модуль для размещения меток написал).

5) если заменить буферы окружностями, описанными вокруг буферов, то задачка становится простой и ее можно решить на любом языке программирования. Решение будет субоптимальным, но скорее всего приемлимым.