Определение линейных размеров полигонов в ArcGis

ArcGIS 8.x,9.x,10.x (Arcview, ArcEditor, Arcinfo).
AndreyL
Завсегдатай
Сообщения: 484
Зарегистрирован: 17 авг 2006, 14:04
Репутация: 0
Откуда: Новосибирск

Сообщение AndreyL » 01 дек 2007, 16:33

Тут действительно есть сложность поиска нескольких одинаковых минимумов – алгоритм то численный. Посему на правильных геометрических фигурах возможны несколько решений одинаковых с точки зрения одной целевой функции, но разных для другой. Выход вижу в том, чтобы реализовать несколько правил для поиска. Так для Вашего случая минимизация площади может дать худший результат, чем максимизация длины, но использование длины даст требуемый результат.
Mitrich писал(а):Готов поделиться полезными функциями по заполнению комбобокса полигональными, линейными темами, выборка вертексов в массив, создание полигонов и т.д.
Mitrich! Вас, похоже, тема перестала интересовать. А жалко! Именно этих функций крайне не хватает.

Mitrich
Активный участник
Сообщения: 184
Зарегистрирован: 15 сен 2006, 16:15
Репутация: 10
Откуда: Москва

Сообщение Mitrich » 03 дек 2007, 11:55

выложил проект тут
это чуть переделанный старый проект, но все основные функции есть.
поищу еще создание нового класса - я так понимаю выбрасывать рассчеты будут в новый featuerClass? Это надежнее, чем добавлять поля в уже существующий.

тема интересна, но пока не ясно ее практическое применение. Пока интерес кооперативно-онлайновой организации.

geologic
Гуру
Сообщения: 852
Зарегистрирован: 15 сен 2005, 13:19
Репутация: 6
Откуда: москва
Контактная информация:

Сообщение geologic » 04 дек 2007, 14:58

Борис писал(а): нет, это не пойдет. В этом случае у "змейки" (синусоиды) в случае одинаковой амплитуды, но разной частоты, этот условный критерий может отличаться в разы, хотя вписываться они будут в равные прямоугольники.
Да, чем более извилистая фигура, тем сильнее будет отличаться от иделала эрзац-ширина, полученная "через площадь". Однако тут вся соль в длине - если научиться брать длину, как центральную линию змейки или серпа - centerline - то аппроксимация ширины через площадь становится более привлекательной.
Не понял насчет "вписанных в равные многоугольники", этот процесс тут ни при чем. Длина и эрзац-ширина НЕ ДАЮТ описанных прямоугольников, это способ Андрея, который я как раз критикую
Борис писал(а): все-таки, думаю, лучший способ определение ширины - это проекция всех точек фигуры на ось, проведенную перпенидкулярно длине (то есть расстояние между крайними точками). Перемножение двух этих величин - длины и ширины - и дают площадь.
.

Проекция всех точек (точнее, крайних точек) как раз дает максимально возможную "ширину", которая "врёт" сильнее всех остальных "ширин". Или вы что-то другое имели в виду?
Моя идея была использовать ПЛОЩАДЬ как исходный параметр, а не получать площадь помножением ширины на длину. Площадь в ГИС ИЗВЕСТНА, зачем ее перевычислять? Наоборот, можно через нее узнать ширину! Если поставить вопрос таким образом, то все упирается в правильную аппроксимацию длины, а она, как вы отметили, возможна только через CENTERLINE. Мне кажется, вы уперлись в эти описанные фигуры, вообще в геометрическое воплощение ширины, а это не обязательно для морфометрии, достаточно, например, знать "среднюю ширину".

Борис
Интересующийся
Сообщения: 36
Зарегистрирован: 22 ноя 2005, 12:32
Репутация: 0

Сообщение Борис » 04 дек 2007, 17:06

"Однако тут вся соль в длине - если научиться брать длину, как центральную линию змейки или серпа - centerline - то аппроксимация ширины через площадь становится более привлекательной."

- в этом случае могут быть не реализованы некоторые задачи. Например, при разных картографических задачах возникают случаи, что мелкие полигоны надо оставить на карте только в том случае, если они вытянуты по какому-то направлению, а если они изометричные в плане - то они не нужны. Другими словами "спираль" нужно выкидывать, а прямую полоску (с равной средней линией) - оставить.

geologic
Гуру
Сообщения: 852
Зарегистрирован: 15 сен 2005, 13:19
Репутация: 6
Откуда: москва
Контактная информация:

Сообщение geologic » 05 дек 2007, 16:36

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

Словом, к задумке по описанному прямоугольнику легко добавить вычисление средней ширины через площадь, если надо. А вот находить длину как Centerline стоило бы продумать алгоритм. Тогда задачу оперативной морфометрии можно было бы считать решенной. Пока - только для частных случаев и задач.

Laines
Новоприбывший
Сообщения: 2
Зарегистрирован: 23 окт 2018, 15:21
Репутация: 0
Откуда: Belarus

Re: Определение линейных размеров полигонов в ArcGis

Сообщение Laines » 23 окт 2018, 15:38

Может кому понадобится решение)))
не знаю на сколько оно верно но это единственный оптимальный способ, что я придумала)
мне необходимо было найти ширину полигона
для этого я использовала в Polygon.centroid - это точно расположенная внутри полигона где якобы его центр. Естественно, где более менее правильная фигура то все хорошо, просто находишь минимальное расстояние между полилинией и центром и умножаешь на 2 и все. Но т.к. центр бывает смещен, то я нашла другое способ.

В общем я получаю точки полигона и для каждой пары точек строю линии полигона. потом от каждой построенной линии ищу расстояние до своего центроида методом distanceTo и среди всех расстояний получаю минимальное (запоминаю, что за линия была с минимальным расстоянием назовем line1).
Второй шаг опять методом перебора моих прямых отбросить те которые пересекаются с моей прямой line1 методом touches и при этом чтобы она не была равна line1. когда все условия выполнены из оставшихся прямых опять ищу минимальное расстояние от линии до центроида.
потом два расстояния просто суммирую и получаю ширину полигона относительно его центра.

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

Laines
Новоприбывший
Сообщения: 2
Зарегистрирован: 23 окт 2018, 15:21
Репутация: 0
Откуда: Belarus

Re: Определение линейных размеров полигонов в ArcGis

Сообщение Laines » 23 окт 2018, 15:41

Может кому понадобится решение)))
не знаю на сколько оно верно но это единственный оптимальный способ, что я придумала)
мне необходимо было найти ширину полигона
для этого я использовала в Polygon.centroid - это точно расположенная внутри полигона где якобы его центр. Естественно, где более менее правильная фигура то все хорошо, просто находишь минимальное расстояние между полилинией и центром и умножаешь на 2 и все. Но т.к. центр бывает смещен, то я нашла другое способ.

В общем я получаю точки полигона и для каждой пары точек строю линии полигона. потом от каждой построенной линии ищу расстояние до своего центроида методом distanceTo и среди всех расстояний получаю минимальное (запоминаю, что за линия была с минимальным расстоянием назовем line1).
Второй шаг опять методом перебора моих прямых отбросить те которые пересекаются с моей прямой line1 методом touches и при этом чтобы она не была равна line1. когда все условия выполнены из оставшихся прямых опять ищу минимальное расстояние от линии до центроида.
потом два расстояния просто суммирую и получаю ширину полигона относительно его центра.

для вычисления длины думаю подойдет такой же алгоритм только нужно искать максимальное расстояние между прямой и центроидом.
Вложения
Load_Sloi.py
(2.4 КБ) 327 скачиваний

Vadim
Активный участник
Сообщения: 166
Зарегистрирован: 03 июн 2015, 10:19
Репутация: 28

Re: Определение линейных размеров полигонов в ArcGis

Сообщение Vadim » 23 окт 2018, 16:21

Эту задачу можно решить и с помощью команды geom.polygonfetch из набора Geospatial Modeling Environment

geom.polygonfetch(in, uidfield, out, [where]);

Determines the longest line that can be position within the bounds of a polygon, crossing no edges

Link to full online help:
http://www.spatialecology.com/gme/geompolygonfetch.htm

in
the input polygon data source

uidfield
the unique ID field of the input feature data source

out
the output line data source

[where]
the selection statement that will be applied to the line feature data source to identify a subset of lines to process (see full Help documentation for further details)

Ответить

Вернуться в «ArcGIS»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость