Рассчитать координаты ограничительного прямоугольника выбранного многоугольника с помощью QGIS


17

Я просто вручную (и несколько неточно уверен) получил координаты ограничивающего прямоугольника для полигона округа, который является выделением из большего слоя форм округа. Я хотел бы иметь возможность использовать плагин QGIS или другую функцию, чтобы вычислить это быстро и не вручную. Это почти наверняка возможно, но я не смог ничего найти с помощью поиска Google

Ответы:


26

Следующая маленькая функция Python выведет координаты ограничивающего прямоугольника текущей активной функции:

def printBB():
    feature = iface.activeLayer().selectedFeatures()[0]
    print feature.geometry().boundingBox().toString()

Чтобы определить функцию, откройте консоль Python из меню плагинов, скопируйте и вставьте три строки в консоль и нажмите клавишу ввода. Затем вы можете вызвать функцию, набрав printBB()и нажав клавишу ввода, пока выбрана нужная функция.


1
Я получаю эту ошибку при попытке запустить этот скрипт: File "<input>", line 4 printBB() ^ SyntaxError: invalid syntax
cbunn

@cbunn убедитесь, что вы выбрали слой в слоях / оглавлении - он очень чувствителен к этому!
DPSSpatial

Спасибо за помощь. Я также забыл нажать Enter, чтобы полностью определить функцию printBB () перед ее вызовом.
cbunn

2
Мне пришлось использовать print (feature.geometry (). BoundingBox (). ToString ()) для строки 3.
cm1

17

QGIS может сделать это через Polygon из Layer Extent

Фото со стока - Инструменты исследования - Многоугольник от слоя

Будет создан новый шейп-файл с такими атрибутами, как XMIN XMAX YMIN YMAX AREA WIDTH HEIGHT


1
Вы должны проверить Use only selected obectsи calculate for every objectполучить желаемый результат.
AndreJ

хм, что у меня не сработало, выводимый шейп-
файл

1
Вы хотите отметить «Использовать только выбранные объекты», только если у вас есть выбранные объекты. Я оставил оба этих поля без контроля и добился хорошего результата.
Йоханна

4

Вы также можете сделать это с помощью плагина PyShp в Python. Это намного проще ...

import shapefile

sf = shapefile.Reader("Path to shapefile...") 
shapes = sf.shapes() 
bbox = shapes[0].bbox # Retrieves the bounding box of the first shape

print bbox # Will print the bounding box coordinates

Более подробную информацию о PyShp и других функциях можно найти здесь .


3

Если вам нужно много ограничивающих рамок многоугольника, вы можете «Сохранить как ...» ваш слой в GeoJSON с параметром WRITE_BBOX = YES, и перед атрибутом «geometry» будет один атрибут «bbox», даже для многогранников.

..., "bbox": [ -70.062408006999874, 12.417669989000046, -69.876820441999939, 12.632147528000104 ], "geometry": ...

1

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

  1. Установить плагин QGIS FieldPyculator
  2. Переключить редактирование слоя
  3. Создать новый столбец в таблице атрибутов в виде строки, например, bbox (сохранить изменения)
  4. Открыть FieldPyculator
  5. Установите поле обновления в bbox
  6. В поле выражения введите что-то вроде:

    bb = $geom.boundingBox().toString()

    bb = bb.replace(' ','')

    bb = bb.replace(':',',')

    value = bb

  7. Бегать

  8. Отключить редактирование и сохранить слой

1

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

  • Режим редактирования Toogle
  • Запустить полевой калькулятор
  • Установить создать новое поле, задать имя (например, xmin), тип (десятичное число), длина, (точность)
  • Выражение: x_min ($ geometry)
  • Вы получите новое поле в таблице атрибутов с координатой LEFT.

    Повторите это для RIGHT, BOTTOM, TOP с выражениями:

  • x_max ($ геометрия)
  • y_min ($ геометрия)
  • y_max ($ геометрия)
  • Пример результата введите описание изображения здесь

    Затем вы можете установить плагин AutoFields для автоматического обновления этих полей при изменении функции.

    Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
    Licensed under cc by-sa 3.0 with attribution required.