Найти "центр тяжести" полигона и отметить его точкой
-
- Участник
- Сообщения: 55
- Зарегистрирован: 15 дек 2008, 20:46
- Репутация: 0
Найти "центр тяжести" полигона и отметить его точкой
Столкнулся со следующей проблемой:
Нужно найти "центр тяжести" полигона и отметить его точкой. Может есть какой-нибудь скрипт на это дело?
Сразу попытаюсь объяснить что имеется в виду под центром тяжести:
Представьте, что вы вырезали любую область России из картона и теперь надо найти такую точку, воткнув иголку в которую можно добиться того, что картонка не будет "заваливаться на бок" а останется горизонтальна полу
Объяснение детское - но думаю так понятнее.
Нужно найти "центр тяжести" полигона и отметить его точкой. Может есть какой-нибудь скрипт на это дело?
Сразу попытаюсь объяснить что имеется в виду под центром тяжести:
Представьте, что вы вырезали любую область России из картона и теперь надо найти такую точку, воткнув иголку в которую можно добиться того, что картонка не будет "заваливаться на бок" а останется горизонтальна полу
Объяснение детское - но думаю так понятнее.
-
- Гуру
- Сообщения: 852
- Зарегистрирован: 15 сен 2005, 13:19
- Репутация: 6
- Откуда: москва
- Контактная информация:
Re: Центрография, конечно, лженаука, но все же...
Упрощенно можно так: грид и среднее из координат всех точек.
Для облака точек можно сразу среднее, а для полигонов, наверное, так.
Для облака точек можно сразу среднее, а для полигонов, наверное, так.
-
- Интересующийся
- Сообщения: 33
- Зарегистрирован: 21 янв 2009, 23:07
- Репутация: 2
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Центрография, конечно, лженаука, но все же...
В версии 9.3 есть функция Calculate Geometry, где для полигона можно для полей таблицы вычислить X и Y координаты центроида. Для России у меня получилось Широта=61.95 и Долгота=96.58, это в Decimal Degrees. Визуально это похоже на центр масс. Соответственно, открываем таблицу атрибутов для полигонов, создаем два новых поля, в которых рассчитываем X и Y. После этого копируем содержимое этих полей и по ним строим точечный шейп.
- Максим Дубинин
- MindingMyOwnBusiness
- Сообщения: 9128
- Зарегистрирован: 06 окт 2003, 20:20
- Репутация: 747
- Ваше звание: NextGIS
- Откуда: Москва
- Контактная информация:
Re: Центрография, конечно, лженаука, но все же...
мне казалось ArcGIS геометрический центр так считает, не центр масс.
пристегивайтесь, турбулентность прямо по курсу
-
- Гуру
- Сообщения: 4205
- Зарегистрирован: 10 апр 2006, 22:34
- Репутация: 433
- Откуда: Париж
Re: Найти "центр тяжести" полигона и отметить его точкой
Мне кажется для плоской фигуры центроид и центр масс должны совпадать, поскольку толщина по Z=0. Хотя надо посмотреть определение центроида ...
-
- Интересующийся
- Сообщения: 33
- Зарегистрирован: 21 янв 2009, 23:07
- Репутация: 2
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Найти "центр тяжести" полигона и отметить его точкой
Цитирую с http://www.gisa.ru/13549.html
Я склонен доверять этому определению и интуитивно для плоских фигур отождествляю эти понятия. Цитирую справку ESRIЦентроид
Англ.: Centroid, Seed
1. Точка, являющаяся центром тяжести (геометрическим центром) фигуры;
2. Внутренняя точка полигона со значениями координат, полученными, например, осреднением координат всех точек, образующих полигон; служит для его идентификации (см. метка); в случае невыпуклого полигона или составного полигона, включающего внутренние полигоны -- "острова", анклавы, ее положение может не совпадать с центром тяжести полигона (Ц. в первом значении).
В гидрологии центр тяжести применяется в традиционных методах расчета стока на неизученных бассейнах, что отражено в соответствующих нормативных документах (СНиПы и СП), поэтому мы его иногда применяем.CENTROID for polygon: the center of gravity (centroid) of the polygon will be used.
- Максим Дубинин
- MindingMyOwnBusiness
- Сообщения: 9128
- Зарегистрирован: 06 окт 2003, 20:20
- Репутация: 747
- Ваше звание: NextGIS
- Откуда: Москва
- Контактная информация:
Re: Найти "центр тяжести" полигона и отметить его точкой
Что-то я запутался в этих определениях, мне кажется или в первом пункт 2 противоречит пункту 1 в части про невыпуклые полигоны или просто у центроида 2 определения (ArcGIS как я понимаю считает 1). Т.е., читая его буквально:
1. центроид <> внутренняя точка
2. центроид = внутренняя точка
Теперь еще соображение, возьмем объект типа круга с длинной тонкой "ручкой". Где его геометрический центр? Наверное где-то посередине этой тонкой ручки. Если мы как автор топика воткнем в него иглу и попробуем поставить на нее, что случится? Завалится, одна из частей явно тяжелее другой. Или мне кажется?
1. центроид <> внутренняя точка
2. центроид = внутренняя точка
Теперь еще соображение, возьмем объект типа круга с длинной тонкой "ручкой". Где его геометрический центр? Наверное где-то посередине этой тонкой ручки. Если мы как автор топика воткнем в него иглу и попробуем поставить на нее, что случится? Завалится, одна из частей явно тяжелее другой. Или мне кажется?
пристегивайтесь, турбулентность прямо по курсу
-
- Интересующийся
- Сообщения: 33
- Зарегистрирован: 21 янв 2009, 23:07
- Репутация: 2
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Найти "центр тяжести" полигона и отметить его точкой
Я рассматривал пункт 2 как уточнение пункта 1 для сложных составных полигонов.
Проверил на дырявом полигоне, при увеличении дырки центр тяжести, рассчитанный в Arcgis, смещается.
На рисунке: 1 и 2 - дырки. Ц1 и Ц2 - координаты центров тяжести дырявых полигонов с соответствующими дырками 1 и 2.
Проверил на дырявом полигоне, при увеличении дырки центр тяжести, рассчитанный в Arcgis, смещается.
На рисунке: 1 и 2 - дырки. Ц1 и Ц2 - координаты центров тяжести дырявых полигонов с соответствующими дырками 1 и 2.
- Вложения
-
- Untitled.jpg (29.06 КБ) 24894 просмотра
-
- Гуру
- Сообщения: 4205
- Зарегистрирован: 10 апр 2006, 22:34
- Репутация: 433
- Откуда: Париж
Re: Найти "центр тяжести" полигона и отметить его точкой
Я не могу сказать совпадает ли центроид с центром тяжести плоской фигуры, но одно я знаю точно - рассчитывается центроид очень быстро. Так что алгоритм не может быть сильно заумным.
-----
Для MapInfo:
a) фигура с дыркой и без дырки, имеет один и то же Centroid b) "сковородка" имеет Centroid, размещенный в начале "ручки" c) в такой фигуре Centroid выглядит не соответствующим любому определению
Видимо существует несколько определений (или реализаций) Centroid
-----
Для MapInfo:
a) фигура с дыркой и без дырки, имеет один и то же Centroid b) "сковородка" имеет Centroid, размещенный в начале "ручки" c) в такой фигуре Centroid выглядит не соответствующим любому определению
Видимо существует несколько определений (или реализаций) Centroid
- Максим Дубинин
- MindingMyOwnBusiness
- Сообщения: 9128
- Зарегистрирован: 06 окт 2003, 20:20
- Репутация: 747
- Ваше звание: NextGIS
- Откуда: Москва
- Контактная информация:
Re: Найти "центр тяжести" полигона и отметить его точкой
Борис, Журавлев, спасибо за иллюстрации, только я сам собирался тоже самое сделать
А сковородка таки заваливается, согласно предсказанию.
Вот мои произведения, Arcview GIS, Polygon.ReturnCenter + прямоугольник охвата вокруг них. Заодно прилагаю сам шейп на случай если вдруг кто-то захочет сравнить что получается для тех же фигур в другом ПО. Было бы интересно.
А сковородка таки заваливается, согласно предсказанию.
Вот мои произведения, Arcview GIS, Polygon.ReturnCenter + прямоугольник охвата вокруг них. Заодно прилагаю сам шейп на случай если вдруг кто-то захочет сравнить что получается для тех же фигур в другом ПО. Было бы интересно.
пристегивайтесь, турбулентность прямо по курсу
-
- Интересующийся
- Сообщения: 33
- Зарегистрирован: 21 янв 2009, 23:07
- Репутация: 2
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Найти "центр тяжести" полигона и отметить его точкой
в ArcGIS 9.3 - Data Management Tools-Feature-Feature To Point
Очевидно, что крест и серп на иголке не подвесишь, поэтому центроиды получились внутри дырок. Кстати, существует еще опция Inside, с использованием которой результаты получились аналогичными результатам sim.
Очевидно, что крест и серп на иголке не подвесишь, поэтому центроиды получились внутри дырок. Кстати, существует еще опция Inside, с использованием которой результаты получились аналогичными результатам sim.
- Вложения
-
- Untitled1.jpg (55.18 КБ) 24863 просмотра
-
- Гуру
- Сообщения: 852
- Зарегистрирован: 15 сен 2005, 13:19
- Репутация: 6
- Откуда: москва
- Контактная информация:
Re: Найти "центр тяжести" полигона и отметить его точкой
Когда-то давно разбирали этот вопрос. По-моему, в ArcINFO даже было описание на эту тему... Центроид мол считается как центр тяжести, а потом сдвигается перпендикулярно оси пока не попадет внутрь фигуры.
Поскольку считается простым способом, без особого анализа формы, то может не совпадать с истинным ЦТ. IMHO векторно ЦТ непросто вычислить, вряд ли есть готовый алгоритм. Обычно применяют разбиение на треугольники и тп. Или подобно грид в результате по регулярной сетке, только с неявной дискретностью - как правило, совпадающей с точностью координат. Т.е. долгая процедура.
Поскольку считается простым способом, без особого анализа формы, то может не совпадать с истинным ЦТ. IMHO векторно ЦТ непросто вычислить, вряд ли есть готовый алгоритм. Обычно применяют разбиение на треугольники и тп. Или подобно грид в результате по регулярной сетке, только с неявной дискретностью - как правило, совпадающей с точностью координат. Т.е. долгая процедура.
-
- Интересующийся
- Сообщения: 17
- Зарегистрирован: 25 окт 2008, 03:01
- Репутация: 0
Re: Найти "центр тяжести" полигона и отметить его точкой
Центроид не имеет к центру тяжести никакого отношения. Обычно это фиктивный объект, который находится внутри (с точки зрения топологии) площадного объекта. Пространственно, он может иметь любое расположение, удовлетворяя главному и единственному условию. Его задача раньше сводилась к тому, чтобы иметь ассоциативную связь с непространственными атрибутами объекта. В последнее время все развитые продукты для ГИС имеют встроенные топологические анализаторы и непосредственное оперирование пользователями центроидами редко, когда нужно. А, вот, грамотное расположение центроида - задача ещё та! Автомат их лепит куда ни попадя, а часто центроиды подписывают (подписывали). Поэтому приходилось для цивильной карты после авторасстановки центроидов, ручками пробегать по ней и переносить их в наиболее свободные места(из ручки сковородки в саму тарелку, e.g.), где и кликать удобнее, и подписи помещаются.Boris писал(а): Я не могу сказать совпадает ли центроид с центром тяжести плоской фигуры...
Извините за возможный оффтопик! Тему не читал, только сообщение от Boris.
--
Маша
-
- Интересующийся
- Сообщения: 17
- Зарегистрирован: 25 окт 2008, 03:01
- Репутация: 0
Re: Найти "центр тяжести" полигона и отметить его точкой
Естественно, есть!!! Вы полагаете, что этот вопрос впервые заинтересовал именно вас? (без обид ;) А как тогда сделали все графические векторные редакторы, а системы черчения (типа AutoCAD, MicroStation...), а системы проектирования (типа SolidEdge, I/EMS), а ракеты как запустили...?!!geologic писал(а):IMHO векторно ЦТ непросто вычислить, вряд ли есть готовый алгоритм.
Ищем книги с названиями подобными самосфантазированнаму - "Алгоритмы компьютерной графики". Издания, эдак, годов 70-х - 80-х. Скорее всего, перевод. В библиотеках, типа ГПНТБ в Москве, по меж.библ.абонементу, в Инете или где-то воруем...
Уже давно всё описано (по крайней мере, математика для геоинформатики). Не изабритайте виласипеды! Читайте сначала книги, потом берите в руки манипуляторы типа "мышь" и киборды.
Короче, "Учите матчасть!" - говорил (по рассказам) прапор моего недавнего бойфренда.
--
Маша
-
- Участник
- Сообщения: 55
- Зарегистрирован: 15 дек 2008, 20:46
- Репутация: 0
Re: Найти "центр тяжести" полигона и отметить его точкой
Вы меня тоже извините, но я не очень понял - зачем Вы вообще написали свое сообщение? Ответить: "Учите матчасть" - можно на 99,9% вопросов, задаваемых на этом форуме. То, что уже "все давно придумано" - никто не сомневался и я, задавая этот вопрос, конечно это учитывал и именно поэтому спрашивал - не знает ли кто ответ? И в данном случае послать в московские библиотеки - примерно равносильно тому, что просто послать...BlackRead писал(а):Естественно, есть!!! Вы полагаете, что этот вопрос впервые заинтересовал именно вас? (без обидgeologic писал(а):IMHO векторно ЦТ непросто вычислить, вряд ли есть готовый алгоритм.
Уже давно всё описано (по крайней мере, математика для геоинформатики). Не изабритайте виласипеды! Читайте сначала книги, потом берите в руки манипуляторы типа "мышь" и киборды.
Короче, "Учите матчасть!" - говорил (по рассказам) прапор моего недавнего бойфренда.
--
2All: Спасибо за предложенные варианты. Мне как раз был нужен "центр тяжести" для Иркутской области - а она по форме отдаленно напоминает "сковородку"... хотя честно сказать я так до конца и не уверен, что полученная точка - это именно то, что мне нужно - хоть и в самом деле вырезай из картона и накалывай на иголку
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 8 гостей