Как определить центр тяжести многоугольников?

34

У меня есть вектор многоугольника, и я хочу быстро получить центроид этого многоугольника для вставки в текстовый документ. Я работаю с QGIS. Я искал другие вопросы, и, хотя некоторые из них довольно близки, они не совсем отвечают на мой вопрос.

В идеале координаты центроида должны быть в таблице атрибутов многоугольника, и я могу просто скопировать и вставить координаты.

Я не хочу создавать отдельный векторный файл точек, представляющий центроид, а затем найти эти координаты, скопировать и вставить их.

Дэвид
источник
В каком формате находится ваш текстовый документ?
Натан W
Это документ MS Word, но на самом деле это может быть что угодно.
Дэвид

Ответы:

34

Центроид по определению является точечным слоем, а не многоугольником. Для этого вам нужно создать новый слой, который очень прост в QGIS 1.8 и более поздних версиях.

  • Загрузите в свой полигон
  • Перейдите в меню -> Вектор -> Инструменты геометрии -> Многоугольный центроид и создайте точечный слой центроида.
  • Экспортируйте координаты созданного центроида в таблицу атрибутов, нажав -> векторное меню -> Инструменты геометрии -> Экспорт / Добавить столбцы геометрии.

После этого вы можете сделать пространственное соединение, чтобы добавить столбцы центроидов к полигонам и снова удалить точечный слой.

кроншнеп
источник
Спасибо за ответ, я ценю помощь. Тем не менее, это очень простая работа, чтобы узнать, каковы координаты центроида. Жаль, что в QGIS нет более простого способа.
Дэвид
Если вы все еще хотите сделать это проще, вы можете взглянуть на PostGIS и функцию ST_Centroid, упомянутую ниже. Таким образом, вам не нужно создавать временные файлы. В качестве альтернативы вы можете написать скрипт Python для QGIS или использовать SEXTANTE Modeler.
Curlew
10

Действительно, создание нового шейп-файла - один из самых простых вариантов. Однако вам не нужно копировать и вставлять координаты. Сделай это:

  • Создайте файл центроидов, используя инструмент Polygon Centroids.
  • Откройте таблицу атрибутов центроидов и сделайте ее редактируемой (значок карандаша внизу).
  • Откройте калькулятор поля (значок калькулятора внизу), выберите параметр «Создать новое поле» и назовите его значимым (например, «Восток»).
  • Из списка функций разверните меню Geometry и выберите $ x, затем повторите с новым столбцом для $ y (скажем, Northing, скажем).
  • Сохраните ваши изменения, и теперь у вас есть все координаты как часть таблицы атрибутов с исходным идентификатором полигона и атрибутами, если вы использовали инструмент центроидов.

В качестве альтернативы вам придется импортировать ваши данные в PostGIS, а затем перебирать полигоны, используя функцию ST_Centroid, и сохранять результат в новом поле. Эта работа примерно такая же, но второй вариант означает, что у вас нет отдельного файла точек центроидов.

MappaGnosis
источник
Спасибо за ответ. Я ценю вашу помощь. Кажется, что ответ Керлью немного легче для меня. Тем не менее, оба эти ответа - намного больше работы, которую я хотел. В конце концов вы получите различные шейп-файлы, которые вы должны назвать, удалить, отредактировать и т. Д.
David
8

Более надежное решение для ответа Майка: long = toreal(regexp_substr(geom_to_wkt(centroid($geometry)), '(-?\\d+\\.?\\d*) -?\\d+\\.?\\d*')) lat = toreal(regexp_substr(geom_to_wkt(centroid($geometry)), '-?\\d+\\.?\\d* (-?\\d+\\.?\\d*)'))

SzieberthAdam
источник
1
Недооцененный ответ;)
Фернандо Ирарразаваль Г
6

Как насчет использования этого в Полевом Калькуляторе 2.2?

Длинное поле = substr (geomToWKT (центроид ($ geometry)), 7, 12)

Lat field = substr (geomToWKT (центроид ($ geometry)), strpos (geomToWKT (центроид ($ geometry)), '') +2, 12)

Кажется, это решено в 2.6 с помощью опции xmin xmin (centroid ($ geometry))

Майк
источник
5

Я только что наткнулся на этот пост почти на 5 лет позже (!), Но вот что я делаю, чтобы вычислить центроид многоугольника в версии 2.18.14:

  1. Начните редактировать слой многоугольника
  2. Создайте новое текстовое поле, назовите его centroidxy
  3. Используя калькулятор поля, вычислите centroidxy = x ($ geometry) || ',' || у ($ геометрия)
  4. Результат выглядит примерно так: 397640.915545362, 2126924.53637653
  5. Сохраните ваши правки.
  6. Ваш слой многоугольника теперь содержит поле со значениями центроидов x, y
Стю Смит
источник
простой и превосходный
Казухито
3

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

Льюис
источник
Спасибо за Ваш ответ. Да, я понимаю, что у многоугольников нет одного широты, и они сами по себе могут быть вычислены. К сожалению, это не проще, чем это в QGIS. Еще раз спасибо всем за ответы. И так быстро. Благодарность!
Дэвид
2

Наткнулся на этот пост и было сложно следить, предложил обновить:

Примечание. Это позволит рассчитать широту и долготу в ваших координатах проекции (которые могут быть метрами). Если вы хотите получить координаты в десятичных градусах (если я предполагаю, что вы это делаете, или они в основном неразборчивы), сначала сохраните слой в этом CRS: EPSG: 4326, WGS 84.

  1. Калькулятор открытого поля
  2. Создать новое поле
  3. Введите имя (Широта или Долгота)
  4. Выберите десятичное число в качестве типа выходного поля
  5. Введите это выражение для широты: y ($ geometry) и это выражение для долготы: x ($ geometry)
  6. Нажмите ОК
Марк Мэтьюз
источник
-2

lon = ToReal (regexp_substr (geomToWKT (центроид ($ geometry)), '([\ s]')) lat = ToReal (regexp_substr (geomToWKT (центроид ($ geometry))), '\ s [)]'))

Марко Аурелио
источник
1
Это не ответ вообще. Пожалуйста, посетите тур, чтобы лучше понять, как ответить на вопрос ...
Nightwatch