Найти "центр тяжести" полигона и отметить его точкой

ArcGIS 8.x,9.x,10.x (Arcview, ArcEditor, Arcinfo).
Izdolt
Участник
Сообщения: 55
Зарегистрирован: 15 дек 2008, 20:46
Репутация: 0

Найти "центр тяжести" полигона и отметить его точкой

Сообщение Izdolt » 10 апр 2009, 12:24

Столкнулся со следующей проблемой:
Нужно найти "центр тяжести" полигона и отметить его точкой. Может есть какой-нибудь скрипт на это дело?

Сразу попытаюсь объяснить что имеется в виду под центром тяжести:
Представьте, что вы вырезали любую область России из картона и теперь надо найти такую точку, воткнув иголку в которую можно добиться того, что картонка не будет "заваливаться на бок" а останется горизонтальна полу :-)
Объяснение детское - но думаю так понятнее.

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

Re: Центрография, конечно, лженаука, но все же...

Сообщение geologic » 10 апр 2009, 12:47

Упрощенно можно так: грид и среднее из координат всех точек.
Для облака точек можно сразу среднее, а для полигонов, наверное, так.

Журавлёв
Интересующийся
Сообщения: 33
Зарегистрирован: 21 янв 2009, 23:07
Репутация: 2
Откуда: Санкт-Петербург
Контактная информация:

Re: Центрография, конечно, лженаука, но все же...

Сообщение Журавлёв » 11 апр 2009, 19:17

В версии 9.3 есть функция Calculate Geometry, где для полигона можно для полей таблицы вычислить X и Y координаты центроида. Для России у меня получилось Широта=61.95 и Долгота=96.58, это в Decimal Degrees. Визуально это похоже на центр масс. Соответственно, открываем таблицу атрибутов для полигонов, создаем два новых поля, в которых рассчитываем X и Y. После этого копируем содержимое этих полей и по ним строим точечный шейп.

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9128
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 747
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: Центрография, конечно, лженаука, но все же...

Сообщение Максим Дубинин » 11 апр 2009, 20:57

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

Boris
Гуру
Сообщения: 4205
Зарегистрирован: 10 апр 2006, 22:34
Репутация: 433
Откуда: Париж

Re: Найти "центр тяжести" полигона и отметить его точкой

Сообщение Boris » 11 апр 2009, 22:36

Мне кажется для плоской фигуры центроид и центр масс должны совпадать, поскольку толщина по Z=0. Хотя надо посмотреть определение центроида ...

Журавлёв
Интересующийся
Сообщения: 33
Зарегистрирован: 21 янв 2009, 23:07
Репутация: 2
Откуда: Санкт-Петербург
Контактная информация:

Re: Найти "центр тяжести" полигона и отметить его точкой

Сообщение Журавлёв » 12 апр 2009, 10:43

Цитирую с http://www.gisa.ru/13549.html
Центроид
Англ.: Centroid, Seed
1. Точка, являющаяся центром тяжести (геометрическим центром) фигуры;
2. Внутренняя точка полигона со значениями координат, полученными, например, осреднением координат всех точек, образующих полигон; служит для его идентификации (см. метка); в случае невыпуклого полигона или составного полигона, включающего внутренние полигоны -- "острова", анклавы, ее положение может не совпадать с центром тяжести полигона (Ц. в первом значении).
Я склонен доверять этому определению и интуитивно для плоских фигур отождествляю эти понятия. Цитирую справку ESRI
CENTROID for polygon: the center of gravity (centroid) of the polygon will be used.
В гидрологии центр тяжести применяется в традиционных методах расчета стока на неизученных бассейнах, что отражено в соответствующих нормативных документах (СНиПы и СП), поэтому мы его иногда применяем.

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9128
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 747
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: Найти "центр тяжести" полигона и отметить его точкой

Сообщение Максим Дубинин » 12 апр 2009, 19:04

Что-то я запутался в этих определениях, мне кажется или в первом пункт 2 противоречит пункту 1 в части про невыпуклые полигоны или просто у центроида 2 определения (ArcGIS как я понимаю считает 1). Т.е., читая его буквально:
1. центроид <> внутренняя точка
2. центроид = внутренняя точка

Теперь еще соображение, возьмем объект типа круга с длинной тонкой "ручкой". Где его геометрический центр? Наверное где-то посередине этой тонкой ручки. Если мы как автор топика воткнем в него иглу и попробуем поставить на нее, что случится? Завалится, одна из частей явно тяжелее другой. Или мне кажется?
пристегивайтесь, турбулентность прямо по курсу

Журавлёв
Интересующийся
Сообщения: 33
Зарегистрирован: 21 янв 2009, 23:07
Репутация: 2
Откуда: Санкт-Петербург
Контактная информация:

Re: Найти "центр тяжести" полигона и отметить его точкой

Сообщение Журавлёв » 12 апр 2009, 21:42

Я рассматривал пункт 2 как уточнение пункта 1 для сложных составных полигонов.
Проверил на дырявом полигоне, при увеличении дырки центр тяжести, рассчитанный в Arcgis, смещается.
На рисунке: 1 и 2 - дырки. Ц1 и Ц2 - координаты центров тяжести дырявых полигонов с соответствующими дырками 1 и 2.
Вложения
Untitled.jpg
Untitled.jpg (29.06 КБ) 24894 просмотра

Boris
Гуру
Сообщения: 4205
Зарегистрирован: 10 апр 2006, 22:34
Репутация: 433
Откуда: Париж

Re: Найти "центр тяжести" полигона и отметить его точкой

Сообщение Boris » 13 апр 2009, 03:33

Я не могу сказать совпадает ли центроид с центром тяжести плоской фигуры, но одно я знаю точно - рассчитывается центроид очень быстро. Так что алгоритм не может быть сильно заумным.
-----
Для MapInfo:
a) фигура с дыркой и без дырки, имеет один и то же Centroid
Clipboard104.jpg
Clipboard104.jpg (10.86 КБ) 24876 просмотров
b) "сковородка" имеет Centroid, размещенный в начале "ручки"
Clipboard103.jpg
Clipboard103.jpg (11.4 КБ) 24881 просмотр
c) в такой фигуре
Clipboard105.jpg
Clipboard105.jpg (14.87 КБ) 24872 просмотра
Centroid выглядит не соответствующим любому определению :shock:

Видимо существует несколько определений (или реализаций) Centroid

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9128
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 747
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: Найти "центр тяжести" полигона и отметить его точкой

Сообщение Максим Дубинин » 13 апр 2009, 03:56

Борис, Журавлев, спасибо за иллюстрации, только я сам собирался тоже самое сделать :)
А сковородка таки заваливается, согласно предсказанию.

Вот мои произведения, Arcview GIS, Polygon.ReturnCenter + прямоугольник охвата вокруг них. Заодно прилагаю сам шейп на случай если вдруг кто-то захочет сравнить что получается для тех же фигур в другом ПО. Было бы интересно.
skovorodka.gif
И все-таки центр масс здесь непричем
skovorodka.gif (2.28 КБ) 24872 просмотра
serp.gif
serp.gif (2.54 КБ) 24872 просмотра
hole1.gif
hole1.gif (3.02 КБ) 24874 просмотра
hole2.gif
hole2.gif (3.09 КБ) 24877 просмотров
cross.gif
Крест
cross.gif (2.11 КБ) 24875 просмотров
1.7z
(1.58 КБ) 812 скачиваний
пристегивайтесь, турбулентность прямо по курсу

Журавлёв
Интересующийся
Сообщения: 33
Зарегистрирован: 21 янв 2009, 23:07
Репутация: 2
Откуда: Санкт-Петербург
Контактная информация:

Re: Найти "центр тяжести" полигона и отметить его точкой

Сообщение Журавлёв » 13 апр 2009, 08:46

в ArcGIS 9.3 - Data Management Tools-Feature-Feature To Point
Очевидно, что крест и серп на иголке не подвесишь, поэтому центроиды получились внутри дырок. Кстати, существует еще опция Inside, с использованием которой результаты получились аналогичными результатам sim.
Вложения
Untitled1.jpg
Untitled1.jpg (55.18 КБ) 24863 просмотра

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

Re: Найти "центр тяжести" полигона и отметить его точкой

Сообщение geologic » 13 апр 2009, 11:00

Когда-то давно разбирали этот вопрос. По-моему, в ArcINFO даже было описание на эту тему... Центроид мол считается как центр тяжести, а потом сдвигается перпендикулярно оси пока не попадет внутрь фигуры.
Поскольку считается простым способом, без особого анализа формы, то может не совпадать с истинным ЦТ. IMHO векторно ЦТ непросто вычислить, вряд ли есть готовый алгоритм. Обычно применяют разбиение на треугольники и тп. Или подобно грид в результате по регулярной сетке, только с неявной дискретностью - как правило, совпадающей с точностью координат. Т.е. долгая процедура.

BlackRead
Интересующийся
Сообщения: 17
Зарегистрирован: 25 окт 2008, 03:01
Репутация: 0

Re: Найти "центр тяжести" полигона и отметить его точкой

Сообщение BlackRead » 17 апр 2009, 02:31

Boris писал(а): Я не могу сказать совпадает ли центроид с центром тяжести плоской фигуры...
Центроид не имеет к центру тяжести никакого отношения. Обычно это фиктивный объект, который находится внутри (с точки зрения топологии) площадного объекта. Пространственно, он может иметь любое расположение, удовлетворяя главному и единственному условию. Его задача раньше сводилась к тому, чтобы иметь ассоциативную связь с непространственными атрибутами объекта. В последнее время все развитые продукты для ГИС имеют встроенные топологические анализаторы и непосредственное оперирование пользователями центроидами редко, когда нужно. А, вот, грамотное расположение центроида - задача ещё та! Автомат их лепит куда ни попадя, а часто центроиды подписывают (подписывали). Поэтому приходилось для цивильной карты после авторасстановки центроидов, ручками пробегать по ней и переносить их в наиболее свободные места(из ручки сковородки в саму тарелку, e.g.), где и кликать удобнее, и подписи помещаются.
Извините за возможный оффтопик! Тему не читал, только сообщение от Boris.
--
Маша

BlackRead
Интересующийся
Сообщения: 17
Зарегистрирован: 25 окт 2008, 03:01
Репутация: 0

Re: Найти "центр тяжести" полигона и отметить его точкой

Сообщение BlackRead » 17 апр 2009, 02:46

geologic писал(а):IMHO векторно ЦТ непросто вычислить, вряд ли есть готовый алгоритм.
Естественно, есть!!! Вы полагаете, что этот вопрос впервые заинтересовал именно вас? (без обид ;) А как тогда сделали все графические векторные редакторы, а системы черчения (типа AutoCAD, MicroStation...), а системы проектирования (типа SolidEdge, I/EMS), а ракеты как запустили...?!!
Ищем книги с названиями подобными самосфантазированнаму - "Алгоритмы компьютерной графики". Издания, эдак, годов 70-х - 80-х. Скорее всего, перевод. В библиотеках, типа ГПНТБ в Москве, по меж.библ.абонементу, в Инете или где-то воруем...
Уже давно всё описано (по крайней мере, математика для геоинформатики). Не изабритайте виласипеды! Читайте сначала книги, потом берите в руки манипуляторы типа "мышь" и киборды.
Короче, "Учите матчасть!" - говорил (по рассказам) прапор моего недавнего бойфренда.
--
Маша

Izdolt
Участник
Сообщения: 55
Зарегистрирован: 15 дек 2008, 20:46
Репутация: 0

Re: Найти "центр тяжести" полигона и отметить его точкой

Сообщение Izdolt » 17 апр 2009, 07:00

BlackRead писал(а):
geologic писал(а):IMHO векторно ЦТ непросто вычислить, вряд ли есть готовый алгоритм.
Естественно, есть!!! Вы полагаете, что этот вопрос впервые заинтересовал именно вас? (без обид ;)
Уже давно всё описано (по крайней мере, математика для геоинформатики). Не изабритайте виласипеды! Читайте сначала книги, потом берите в руки манипуляторы типа "мышь" и киборды.
Короче, "Учите матчасть!" - говорил (по рассказам) прапор моего недавнего бойфренда.
--
Вы меня тоже извините, но я не очень понял - зачем Вы вообще написали свое сообщение? Ответить: "Учите матчасть" - можно на 99,9% вопросов, задаваемых на этом форуме. То, что уже "все давно придумано" - никто не сомневался и я, задавая этот вопрос, конечно это учитывал и именно поэтому спрашивал - не знает ли кто ответ? И в данном случае послать в московские библиотеки - примерно равносильно тому, что просто послать...

2All: Спасибо за предложенные варианты. Мне как раз был нужен "центр тяжести" для Иркутской области - а она по форме отдаленно напоминает "сковородку"... хотя честно сказать я так до конца и не уверен, что полученная точка - это именно то, что мне нужно - хоть и в самом деле вырезай из картона и накалывай на иголку :-)

Ответить

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

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

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